精华内容
下载资源
问答
  • 闲谈高可用与负载均衡

    千次阅读 2017-08-22 11:44:33
    虽然说很多负载均衡的设备有着高可用的特性,或者高可用的机器使用着负载均衡的方式分发流量,事实上,高可用负载均衡是两个完全不同的概念,两者关注的地方是不同的,而且很多在很多场景下两者的需求是冲突的。...

    闲谈高可用和负载均衡

        高可用集群和负载均衡集群想必大家或多或少都听说过,但是很多人往往把这两个搞混在一起,不加区分地使用这两个概念。虽然说很多负载均衡的设备有着高可用的特性,或者高可用的机器使用着负载均衡的方式分发流量,事实上,高可用和负载均衡是两个完全不同的概念,两者关注的地方是不同的,而且很多在很多场景下两者的需求是冲突的。


      那,什么是高可用和负载均衡呢?两个概念各自关注的地方又是什么?

      高可用性:顾名思义,尽可能采取措施减少系统服务中断时间,进而提高业务程序持续对外提供服务的能力。

      负载均衡:将高并发的请求数据分发到不同的集群结点,尽量平衡系统所有资源的压力,从而提升整个集群对于请求的处理能力。


        以上的内容非常科学地定义了高可用性和负载均衡,但是对于很多人他没接触过这两个概念一时还不好理解怎么办,那就用一个我们工作中通俗的例子来跟大家聊下高可用和负载均衡。


          工作岗位有产品人员,程序员和运维人员之分,一般一个产品人员会带着一群程序员开发一个产品,一个开发人员背后又有着系统运维,网络运维,业务运维,平台运维的支持。这个时候,产品人员就相当于负载均衡中的分发器,程序员相当于负载均衡集群的结点,产品人员作为分发器将各种收集来的用户请求转发给不同的程序员,当然分发给不同程序员处理的事务可能相同也可能不相同。假如说不考虑产品人员担心程序员的可用性,那一般情况下,一项需求是不会交给两个人去做的,每个程序员做的都是不相同的事务。同样,每个开发人员也相当一个分发器,一个应用需要上线需要做的事情非常多,包含系统,网络和应用环境以及一些与业务相关的配置,这个时候也是一个非常典型的负载均衡模型,一个开发人员提一个需求单,然后处于不同角色的运维人员然后处理自己相关的事情。当一件比较复杂或者一大堆比较繁琐的事情需要处理的时候,如果由某个单一的系统来处理,需要的时间以及相应的资源可能比较多,使用负载均衡集群将不同的请求分发到不同的结点,从而提高整个集群对于事务的处理能力,负载均衡集群相对于单个结点有着更高的性能。

      那什么时候我们会考虑高可用性呢?同样是产品人员和程序员,产品人员发现某个程序员请假了,那么他就有可能要求开发团队的领导给他再安排一个人继续处理相同的事务,从而保证产品如期开发完成。当集群中某一个结点无法提供预期的服务的时候就使用另一个结点替换当前结点来进行服务。


     再通俗点讲就是,

      美国的总统和副总统更像高可用集群,只有等到总统挂了副总统才派得上用场,这叫高可用;像我朝各个正职和副职(比如正校长和副校长,正校长可能姓付,副校长也可能姓郑)的关系,更像负载均衡的关系,各个正副职往往各司其职,没有说哪两个人干的事情是一模一样的,或者某个人平时不干事就等正职那位伙计挂掉然后顺利成章就接手正职的职责和权利的。


    负载均衡一般不关注集群中各节点对于请求的处理能力,很多时候会根据节点处理能力的不同而使用不同的分发策略,比如轮询,最小连接,最快响应等。高可用比较关注集群中结点处理请求能力的对等性,因为一单主节点出现问题备用节点需要承受主节点所有的请求压力,一旦处理能力较弱有可能无法正常提供服务,从而失去高可用的作用。

     

    高可用性集群中的节点一般是一主一备,或者一主多备,通过备份提高整个系统可用性。负载均衡集群一般是多主,每个节点都会分担部分流量。


    为什么很多人会把高可用和负载均混淆起来,因为大家一般了解的都是某个软件或者设备,往往这些设备会同时应用负载均衡和高可用。比较典型的F5和HAProxy中,F5作为一个负载均衡设备对后端节点有着健康监测功能,而且当有多个节点的时候是不影响到整个服务的可用性的。假如没有这个健康监测功能,一个集群下放1个节点和多个节点在可用性方面是没有区别的。同时HAProxy作为被大多数人认为的高可用软件,其实根本就不是什么高可用集群软件,其对于用户请求有着分发处理的功能,同时有着反向代理功能,事实上Haproxy 是一个负载均衡器(The Reliable, High Performance TCP/HTTP Load Balancer,可靠的高性能TCP/HTTP负载均衡器),真正的高可用是有一个叫keepalived 软件来实现的。由于数据库数据要保证数据的一致性,一般都是单写,所以无法实现数据库服务的负载均衡,这也是目前碰到的一个难题,当然了如果数据库是只读的,还是可以实现负载均衡的。


    负载均衡集群中,更多的关注可扩展性和性能,比较关注集群节点处理能力;高可用集群,更多的关注可用性,比较关注自动侦测,自动切换,自动恢复。

    在高可用性集群内,每种服务的用户数据只有一份,在任一时刻只有一个节点能读写这份数据。

    在负载均衡集群内,对于数据一般不会只有一份,往往基本上都是有差异的。

    高可用性集群对一种服务而言不具有负载均衡功能,它可以提高整个系统的可靠性,但不能增加系统的负载能力。负载均衡集群的各节点间通常没有共用的存储介质,用户数据被复制成多份,存放于每一个提供该项服务的节点上。

    对于同一种服务,是不能同时获得高可用性与负载均衡能力的,大家看看数据库服务就很清楚了。

    展开全文
  • 高可用性集群中的节点一般是一主一备,或者一主多备,通过备份提高整个系统可用性。而负载均衡集群一般是多主,每个节点都分担流量 转载于:https://www.cnblogs.com/my-blogs-for-everone/p/6902565.html...
    高可用性集群中的节点一般是一主一备,或者一主多备,通过备份提高整个系统可用性。
    而负载均衡集群一般是多主,每个节点都分担流量

    转载于:https://www.cnblogs.com/my-blogs-for-everone/p/6902565.html

    展开全文
  • ActiveMQ+zookeeper实现高可用负载均衡(代码和测试)
  • 在网站的建设中,网站的部署和发布是非常重要的一环,尤其是企业网站,随着企业的影响力和业务规模的扩大,企业的服务器需要承载的访问量和负载也日益增多,这就对企业提供网络服务提出了新的标准。因此,为使得企业...

    1.需求分析

    网站建设是企业、组织、个人宣传和分享交流的重要的平台,尤其是在如今的信息化时代下,所有行业都在互联网的影响下实现数字化、在线化。在网站的建设中,网站的部署和发布是非常重要的一环,尤其是企业网站,随着企业的影响力和业务规模的扩大,企业的服务器需要承载的访问量和负载也日益增多,这就对企业提供网络服务提出了新的标准。因此,为使得企业网络可以承载更多的访问量和业务需求,我们就需要搭建web集群,实现企业集群负载均衡和高可用。

    1.1功能需求

    1.1.1网站搭建

    网站开发测试完成后,需要正式发布上线,此时,我们需要配置web服务器,提供网络服务。当访问量较少时,我们可以部署单台节点的服务器站点,同时对服务器配置定期备份任务以及定期维护。

    1.1.2负载均衡

    当访问量越来越多时,单台节点的服务器无法承受超负载的HTTP(s)请求时,此时为满足外部的访问量,同时为了方便管理、提高扩展性和安全性以及减少企业开支,通常就需要采用增加服务器部署站点配置负载均衡集群的方法,来提高企业网站的网络服务能力。

    1.1.3高可用

    当负载均衡的服务器节点越来越多时,网站规模也越来越大,负载均衡分发器承担的网络流量最大,其在整个集群中的重要性也就不言而喻,一旦节点出现故障甚至宕机,整个集群将无法对外提供服务。因此,除了负载均衡之外,我们同时会部署负载均衡的高可用,即负载均衡器的主备部署。

    1.2性能和安全性需求

    对物理服务器硬件的需求以及web站点服务器的需求需要根据实际情况分析,在这里我采用的是实验环境,故该部分不做过多解释。

    2.系统设计

    2.1系统结构图表

    在这里插入图片描述

    系统地址以及软件分布表

    容器(Container) 操作系统(OS) IP地址 安装软件
    宿主机(docker) CentOS7.6.1810 172.18.74.188 Docker+LVS
    lvs-k CentOS7.6.1810 172.17.0.8 LVS+keepalived
    lvs-k1 CentOS7.6.1810 172.17.0.7 LVS+keepalived
    nginx CentOS7.6.1810 172.17.0.5 nginx
    nginx1 CentOS7.6.1810 172.17.0.4 nginx
    web CentOS7.6.1810 172.17.0.2 apache+php
    web1 CentOS7.6.1810 172.17.0.3 apache+php
    VIP 172.17.0.9

    OS内核版本信息
    在这里插入图片描述

    2.2 Docker构建集群

    2.2.1 Docker概念

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    2.2.2 docker特点

    Docker的特点 develop, deploy, and run
    Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器部署应用程序称为容器化。容器不是新的,但它们用于轻松部署应用程序。
    容器化越来越受欢迎,因为容器是:
    灵活:即使是最复杂的应用也可以集装箱化。
    轻量级:容器利用并共享主机内核。
    可互换:您可以即时部署更新和升级。
    便携式:您可以在本地构建,部署到云,并在任何地方运行。
    可扩展:您可以增加并自动分发容器副本。
    可堆叠:您可以垂直和即时堆叠服务。

    2.2.3为什么要使用 Docker?

    作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
    首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
    容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
    具体说来,Docker 在如下几个方面具有较大的优势。
    更快速的交付和部署
    对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
    开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
    更高效的虚拟化
    Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
    更轻松的迁移和扩展
    Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
    更简单的管理
    使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

    对比传统虚拟机总结
    特性 容器 虚拟机
    启动 秒级 分钟级
    硬盘使用 一般为 MB 一般为 GB
    性能 接近原生 弱于
    系统支持量 单机支持上千个容器 一般几十个

    根据我的实验情况来看,使用docker这项新技术可以使我更加快捷方便的搭建网络集群,(虽然在掌握docker这门新技术花了几天时间),而且用docker模拟可以使网络的效果更加直观。将来用于实际部署应用时也会非常的便捷,这得益于它的便携式和灵活性以及强大的移植功能。

    2.2 docker架构

    在这里插入图片描述

    2.2.4 Docker核心概念

    在这里我只简单介绍两个概念。
    1)Images 镜像,os组合
    基本操作如下:

    $ docker images  #列出本地主机上的镜像
    $ docker run -t -i ubuntu:15.10 /bin/bash 
    $ docker pull ubuntu:13.10
    $  docker search httpd
    $ docker run httpd
    $ docker tag 860c279d2fec runoob/centos:dev
    $ docker build -t runoob/centos:6.7 .
    

    2)Containers 容器
    我自己的理解是镜像的进程态,container与vm的区别如下

    在这里插入图片描述
    在这里插入图片描述

    2.2.5 docker 网络

    1.桥接模式(default)
    Docker容器的默认网络模式为桥接模式,如图所示:
    在这里插入图片描述
    2.HOST模式
    在这里插入图片描述
    3.Container模式
    在这里插入图片描述
    4.None

    获取独立的network namespace,但不为容器进行任何网络配置,之后用户可以自己进行配置,容器内部只能使用loopback网络设备,不会再有其他的网络资源

    2.3 LVS+keepalive负载均衡原理介绍

    LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。
    LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtualserver.org 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

    在这里插入图片描述

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
    2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
    3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
    4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。
    在本次实验中,采用的是LVS的DR方式实现四层上负载均衡
    重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址
    2.4 Nginx负载均衡原理
    Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers, 后面简称backend)来做复杂的计算、处理和响应,并且在业务量增加的时候可以方便地扩容后台服务器。
    在这里插入图片描述
    从原理上理解,lvs解决的是四层的负载均衡,nginx解决的是七层的负载均衡

    3.系统实现

    3.1网络环境以及服务器配置

    在实际搭建的过程中,因为校园网账号只有一个,同时为实现在校园网内访问,我搭建了一个nat服务器,或者说是跳板机,来解决集群搭建中的网络问题。具体方法如下:

    1.服务器配置双网卡,ip地址如下:
    在这里插入图片描述
    在这里插入图片描述
    1.配置双网卡间的iptables规则,并执行连接校园网的认证脚本,测试服务器上网情况

    在nat服务其中设置iptables规则
    让发送至内网网卡的数据全部通过 ens160(内网网卡地址)
    iptables -A FORWARD -i ens160 -j ACCEPT
    修改数据报头信息 ens32(外网网卡地址)
    iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens32 -j MASQUERADE
    开启Linux的路由功能
    echo 1 > /proc/sys/net/ipv4/ip_forward # 打开路由功能
    cat /proc/sys/net/ipv4/ip_forward
    #查看是否启用路由功能,结果为1,代表已启用,0代表未启用
    在这里插入图片描述
    4.在需要联网的虚拟机上配置网关为内网网卡的地址
    在这里插入图片描述

    5.配置完后重启网卡,即可访问外网systemctl restart network

    在这里插入图片描述

    3.2安装Docker CE

    1.清除已存在的docker环境

    $ sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    

    2.repository 配置yum源
    新主机上首次安装Docker CE 需要设置Docker repository(存储库)
    安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。

    $ sudo yum install -y yum-utils \
      device-mapper-persistent-data \
    lvm2
    

    使用以下命令设置稳定存储库。即使您还想从边缘或测试存储库安装构建,您始终需要稳定的存储 库。

    $ sudo yum-config-manager \
     --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    yum makecache fast
    

    3.安装Docekr CE

    $ sudo yum install docker-ce -y
    

    4.启动Docker

    $ sudo systemctl start docker
    

    3.3容器的基本操作

    1.创建并运行容器,若没有镜像将从docker hub上下载并运行
    以下命令为创建一个可以运行内核服务的容器
    $ docker run --privileged --name=container_name --hostname=host_name -p port:port -it -d centos:latest(image) /usr/sbin/init
    2. 开启和停止容器
    $ docker start/stop container_name/container_id
    3.进入容器
    $ docker exec -it container_name /bin/bash
    4.查看docker镜像
    $ docker images
    5.查看docker容器
    $ docker container ls
    $ docker container ls -a
    6.删除docker容器
    $ docker stop container_name/container_id
    $ docker rm container_name/container_id
    7.创建自定义镜像
    $docker commit -m "comment" -a "author" container_model image_name
    就像这样
    

    3.4容器准备

    最终需要六个容器,如图所示:
    在这里插入图片描述
    其中在创建容器时,最方便的时可以根据自己自定义的image去创建容器,这大大减少了集群搭建的工作量,就像这样,搭建好一个容器环境后打包为镜像,再次创建运行新的容器,使用时只需要简单的修改以下配置即可。
    在这里插入图片描述

    3.4.1 web 服务器

    $ yum install -y httpd php
    $ systemctl start httpd
    vim /var/www/html/index.html
    This is web(1) master!
    

    3.4.2 Nginx负载均衡器

    $  yum install epel-release -y
    $  yum install nginx -y
    vim /etc/nginx/nginx.conf
    

    在httpd中加入以下内容:

    upstream myweb{
            server 172.17.0.2:80;
            server 172.17.0.3:80;
        }
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
          #proxy_set_header Host $host;
          #proxy_set_header X-Real-IP $remote_addr;
        	#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://myweb;
    }
    

    $ systemctl start nginx
    Nginx作为lvs的Real server节点2台配置脚本:

    #vim /usr/local/sbin/lvs_dr_rs.sh

    #! /bin/bash
    vip=172.17.0.7
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    

    2节点rs 上分别执行脚本:
    bash /usr/local/sbin/lvs_dr_rs.sh

    3.4.3 LVS +keepalived上的配置
    Lvs + keepalived的2个节点安装
    $ yum install ipvsadm keepalived -y
    keepalived节点配置(2节点):
    主节点( MASTER )配置文件

    vim /etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            172.17.0.9
        }
    }
    
    virtual_server 172.17.0.9 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
    
        real_server 172.17.0.4 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    
        real_server 172.17.0.5 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    从节点( BACKUP )配置文件
    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    state MASTER -> state BACKUP
    priority 100 -> priority 90
    

    keepalived的2个节点执行如下命令,开启转发功能:

    #echo 1 > /proc/sys/net/ipv4/ip_forward
    

    启动keepalive
    先主后从分别启动keepalive

    service keepalived start
    

    3.4.4 问题解决
    3.4.4.1. Docker warning的问题解决
    在这里插入图片描述
    解决办法:

    #vi /etc/sysctl.conf
    或者
    #vi /usr/lib/sysctl.d/00-system.conf
    添加如下代码:
        net.ipv4.ip_forward=1
    重启network服务
    #systemctl restart network
    查看是否修改成功
    #sysctl net.ipv4.ip_forward
    如果返回为“net.ipv4.ip_forward = 1”则表示成功了
    

    3.4.2 keepalived服务问题

    在配置启动keepalive时,启动时并没有报错,然而在测试环节却不起作用,查看keepalived的状态,可以看出keepalive一直是stopping的状态,无法正常服务。这个问题一直困扰着我,无法解决。
    在这里插入图片描述
    直到看到了一篇博文
    https://www.cnblogs.com/XiongMaoMengNan/p/8056211.html

    先在宿主机上安装并以root来启动ipvsadm,每次要在容器中运行ipvs都需要先在宿主机上启动ipvsadm。如果直接进行2步操作将报出如下错误:

    Can’t initialize ipvs: Protocol not available
    Are you sure that IP Virtual Server is built in the kernel or as module?

    在宿主机上仍是出错,
    在这里插入图片描述

    3.4.4.3 解决ipvsadm启动出错的问题

    解决方法见以下链接
    https://blog.csdn.net/qq_37165604/article/details/79963894

    $ ipvsadm --save > /etc/sysconfig/ipvsadm
    

    此时ipvsadm启动正常
    再次启动keepalived
    在这里插入图片描述

    4.系统测试

    4.1 web服务器测试

    在这里插入图片描述

    4.2 nginx负载均衡测试

    在nginx 服务器上使用的是轮询,采用weight 1:1的方式,在nginx上进行访问,轮询比例1:1,结果如下图
    在这里插入图片描述

    在nginx1上进行的是1:2的轮询方式,在nginx1上访问结果如下
    在这里插入图片描述
    4.3 高可用测试

    在lvs-k(master)与lvs-k1(backup)安装和配置好keepalived后,正常访问vip时,访问结构如下

    在这里插入图片描述

    模拟nginx(master)单点故障的状态,即在nginx上执行systemctl stop nginx将nginx服务器关闭,再次在客户端上访问vip结果如下:
    在这里插入图片描述

    从图中可以看出,当nginx服务器出现故障时,client端实际访问的是nginx1服务器。
    同时可以从lvs-k服务器的keepalived的健康状态检测中看到,服务器检测到了nignx服务器的宕机情况,并将vip转移至nginx1上,如图所示:

    在这里插入图片描述

    模拟lvs-k(master)宕机的情况,当master和backup正常工作时,keepalived的状态如下图:

    在这里插入图片描述
    在这里插入图片描述
    当在lvs-k上执行systemctl stop keepalived时,此时可以看到lvs-k1开始服务。
    在这里插入图片描述

    5.总结
    在搭建平台系统和撰写课程设计论文的过程中,发现如果能够熟练掌握其中的原理,所有的配置都十分的简单,重点是要理解各项技术和软硬件实现的原理,才能达到事半功倍的效果。首先,去查看其他博客的操作时,应该边看边思考,不要一味照搬,因为可能博主跟你要做集群的环境和配置思路上有所差异,应该学习他们的配置原理和思路,进而设计自己的系统平台架构;其次,在学习的过程中,遇到问题先根据掌握的知识进行思考,然后再进行查资料,要明白自己那块儿知识掌握了,用已知去探索未知,可以更快的掌握一门新的技术。最后,遇到问题并不可怕,只要放平心态,探索问题的本质,很快就可以将问题解决。

    展开全文
  • oracle的高可用与负载均衡

    千次阅读 2017-03-19 01:14:38
    oracle的高可用与负载均衡

    本文转自于: http://www.cnblogs.com/createyuan/p/3904296.html


    浏览了一下Oracle官方的网页以及非官方的ppt,简单了解了一下Oracle提供的高可用方案。

    1. RAC
    RAC,  Real Application Clusters
    多个Oracle服务器组成一个共享的Cache,而这些Oracle服务器共享一个基于网络的存储。这个系统可以容忍单机/或是多机失败。
    不过系统内部的多个节点需要高速网络互连,基本上也就是要全部东西放在在一个机房内,或者说一个数据中心内。如果机房出故障,比如网络不通,那就坏了。所以仅仅用RAC还是满足不了一般互联网公司的重要业务的需要,重要业务需要多机房来容忍单个机房的事故。

    2. Data Guard.
    Data Guard这个方案就适合多机房的。某机房一个production的数据库,另外其他机房部署standby的数据库。Standby数据库分物理的和逻辑的。物理的standby数据库主要用于production失败后做切换。而逻辑的standby数据库则在平时可以分担production数据库的读负载。

    3. MAA
    MAA(Maximum Availability Architecture)其实不是独立的第三种,而是前面两种的结合,来提供最高的可用性。每个机房内部署RAC集群,多个机房间用Data Guard同步。

    Oracle+Fusionio+Dataguard的高可用方案
    传统的Oracle的高可用方案必须基于共享存储设备,不管是双机主备模式,还是Oracle RAC,数据库必须放在共享的SAN存储上,通过HA或集群软件实现高可用。Oracle DataGuard是很好的容灾软件,但是作为HA解决方案,功能有很多局限性,比如数据丢失,应用透明切换,只能读无法写(11g)等等,目前都没有非常好的解决方案。
    自从固态存储技术出现后,单机的IO能力大幅度提升,比如采用PCIE接口的fusionio卡,单块卡就可以提供数万IOPS的能力,单机的IO能力已经超过了传统的磁盘存储。但是,一直困扰我们的是,如何解决无共享存储环境下Oracle数据库的高可用问题?我们团队设计了一种架构,提供简单可靠的高可用功能。

    虽然在Oracle的立场上,总是建议客户能够更好地规划自己的应用,在有其它负载平衡方法的时候,尽量不要依赖于Oracle的Load Balance方法,但是往往在给客户配置完Oracle RAC数据库以后,客户都会要求要测试负载平衡(Load Balance)和TAF(Transparent Application Failover),并且将这两个测试作为RAC是否安装成功的标准。
    这是一件很无奈的事情,像把旁枝末节看作了主要功能,甚至有些买椟还珠的感觉,但是毕竟这是客户,更了解Oracle Load Balance(后文用LB表示),才可以更好满足客户需求。

    RAC的负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作。在RAC中,负载均衡分为两种,一种是基于客户端连接的,另外一种是基于服务器端的。客户端的负载均衡配置相对简单,只需要在tnsnames.ora中添加LOAD_BALANCE=ON这么一个选项即可。

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力。
    通常情况下有两种方式来实现负载均衡
    一个是基于客户端连接的负载均衡
    客户端的负载均衡主要是通过为tnsnames.ora增加load_balance=yes条目来实现
    如果未开启load_balance=yes时,Oracle Net会根据地址列表按顺序来选择一个进行连接,直到连接成功为止。 如果第一个host主机连接失败,在有多个地址的情形下,接下来选择第二个地址连接,依此类推,直到连接成功为止。当开启了load_balance=yes时,则Oracle Net会从多个地址中随机地选择一个地址进行连接,直到连接成功为止。注意,此连接方式仅根据地址列表随机选择,并不考虑到各个实例上当前真正连接数量的多少,也即是没有考虑各个节点真实的连接负载情况

    二是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式。
    Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去。当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到service_register。而对于节点中任意监听器故障或监听器意外失败时,PMON进程会每1秒钟检查当前节点上的监听是否重启,以获得最新的负载信息来及时调整负载均衡。

    跨机房问题

    跨机房问题一直都是一个老大难的问题,先看传统数据库的跨机房方案。

    Master/Slave方案

    这是最常用的方案,适用于大多数需求。Master将操作日志实时地发送到Slave,Slave当成Master的一个Hot Backup。Master宕机时,服务切换到Slave,需要修改客户端逻辑使得Master失效时自动寻找新的Master。

    这个方案有一个问题就是数据库的Master和Slave一般不是强同步的,所以,切换到Slave后可能丢失宕机前的少量更新。如果将 Master和Slave做成强同步的,即:所有的数据必须同时写成功Master和Slave才成功返回客户端,这样又带来了另外一个问 题:Master和Slave中任何一台机器宕机都不允许写服务,可用性太差。因此,Oracle有一种折衷的模式:正常情况下Master和Slave 是强同步的,当Master检测到Slave故障,比如Slave宕机或者Master与Slave之间网络不通时,Master本地写成功就返回客户 端。采用这种折衷的同步模式后,一般情况下Master和Slave之间是强同步的,Master宕机后切换到Slave是安全的。当然,为了确保数据安 全后,宕机的Master重启后可以和新的Master(原有的Slave)对比最后更新的操作日志,如果发现不一致可以提醒DBA手工介入,执行数据订 正过程。

    Master和Slave之间强同步还有一个问题就是跨机房延时,对于关键业务,同城的机房可以部署专用光纤,在硬件层面上解决这个问题;异地的机房一般用来做备份,与主机房之间的数据同步一般是异步的,可能有秒级延时。

    机房宕机切换自动化成本太高,但是对于很多单点服务,机房内部宕机切换的自动化很有必要。Oceanbase采用Linux的一个开源方 案:Pacemaker,通过heartbeat和虚IP漂移的方式实现机房内部宕机自动切换。由于主备切换本质上是一个选主问题,理论上只有Paxos 或者类似协议可以解决,而Pacemaker没有采用复杂的Paxos协议,它对硬件是有依赖的,比如要求主备节点之间通过直连线保证网络不会发生故障, 而这在机房内部是可以做到的。机房之间采用前面提到的Master/Slave方案,可以写一个脚本ping主机房的Master,当确认主机房 Master宕机时(比如一分钟不通)将服务切换到备机房并报警。





    展开全文
  • 主要介绍了keepalived+haproxy实现MySQL高可用负载均衡的配置方法,通过这两个软件可以有效地使MySQL脱离故障及进行健康检测,需要的朋友可以参考下
  • 企业级keepalived高可用实战Nginx负载均衡视频教程 更多好的java资源请进入本人个人上传资料
  • ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试
  • 主要介绍了基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作,需要的朋友可以参考下
  • 本文使用haproxy和keepalived搭建mysql集群:负载均衡高可用负载均衡+高可用,并验证测试成功
  • 基于IIS的ARR负载均衡 基于NLB负载均衡 这两篇分别分ARR 和 NLB基本配置,下面我们讲讲,如何组合使用,搭配成高可用/可伸缩集群。 什么是高可用,可伸缩 ? 高可用:是指系统经过专门设计减少停工时间,保持服务高度...
  • Keepalived + Nginx 实现高可用 Web 负载均衡配置文件,具体详情参见博文:http://blog.csdn.net/l1028386804/article/details/72801492
  • MySQL高可用负载均衡集群部署
  • Linux高可用负载均衡集群

    千次阅读 2018-07-23 10:22:34
    集群介绍 ...2:负载均衡 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理, 在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2 ...
  • ActiveMQ的高可用与负载均衡配置

    千次阅读 2016-03-04 19:02:22
    ActiveMQ的高可用与负载均衡配置 1.1 高可用配置(Master/Slave)  当一个应用被部署于生产环境,灾备计划是非常重要的,以便从网络故障,硬件故障,软件故障或者电源故障中恢复。通过合理的配置ActiveMQ,可以...
  • 网卡高可用与负载均衡【team】

    千次阅读 2017-01-16 22:42:07
    team模式: broadcast 传输来自所有端口的包 roundrobin 以轮循的方式传输所有端口的包 activebakup 这是一个故障迁移...lacp 实施802.3ad 链路聚合协议,可以使用 loadbalance 运行程序相同的传输端口选择的可能
  • Nginx入门到精通搭建高可用集群负载均衡,Nginx+Lvs+keepAlived构建高可用集群环境
  • 搭建MySQL高可用负载均衡集群

    千次阅读 2018-08-31 16:21:29
    1、简介  使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么...之前的文章里已经介绍了读写分离的方案了,接下来我将讲解MySQL高可用负载均衡这一方...
  • keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。 VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议。是一种容错...
  • Rabbitmq+HAproxy+Keepalived实现高可用负载均衡-附件资源
  • MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat)
  • 配置网络环境步骤二:配置后台web服务步骤三:调度器安装Keepalivedipvsadm软件步骤四:部署Keepalived实现LVS-DR模式调度器的高可用步骤五:客户端测试 Keepalived 简介 1.Keepalived概述 Keepalive
  • Nginx负载均衡高可用

    2021-02-25 01:14:16
    本文来自于cnblogs,介绍了什么是负载均衡高可用,什么是keepalived,keepalived+nginx实现主备等。首先介绍一下Keepalived,它是一个性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的...
  • 负载均衡,分布式,高可用,容错的区别

    千次阅读 多人点赞 2018-06-25 18:49:19
    集群可以分为:1,负载均衡(Load Balance)集群:负责均衡服务器根据负载均衡算法(轮询,随机,哈希,权重等)来分发请求到不同的主服务器。 每个主服务器都是等价的,都可以完成相同的功能 容错(fall-over):...
  • RocketMQ〖六〗消息的存储,高可用性机制,负载均衡一. 消息存储1. 存储介质2. 性能对比3. 消息的存储和发送1)消息存储2)消息发送4. 消息存储结构5. 刷盘机制1)同步刷盘2)异步刷盘3)配置二. 高可用性机制1. 消息...
  • 开箱即用,简单粗暴Elasticsearch天然支持分布式和集群,开箱即用,零配置,零改动。自动分片一个index默认5个primaryshard,那么我们创建一个document,他给我们分配到哪个shard...shard负载均衡假设我们有1个index,
  • 高可用&负载均衡常用架构

    千次阅读 2016-03-30 14:18:07
    下面总结一下常用的高可用复杂均衡架构模式。 1. 客户端切换。 客户端配置多个服务器地址。如果发生某个服务器无法访问或者使用异常,客户端就切换到其它服务器上。 优点:简单,高效,可以在业务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,532
精华内容 78,612
关键字:

高可用与负载均衡