Linux集群架构(一)

集群从功能实现上分为两种:高可用集群和负载均衡集群。高可用,顾名思义,当一台服务器宕机不能提供服务了,还有另外的服务器替代。负载均衡集群,简单讲就是把用户的请求分摊到多台服务器上。

18.1 搭建高可用集群

高可用集群,即“HA集群”,也称为“双机热备”,用于关键业务。

常用实现高可用集群的开源软件有heartbeat和Keepalived,其中Keppalived还有负载均衡的功能。这两个软件类似,核心原理都是通过心跳线连接两台服务器,正常情况下由一台服务器提供服务,当这台服务器宕机,备用服务器顶替。这里建议使用Keepalived。

Keepalived工作原理

VRRP(Virtual Router Redundancy Protocol)协议叫做虚拟路由冗余协议,它是实现路由高可用的一个通信协议。

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话,就是MASTER,或者是通过算法选举产生的,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等,其他设备不具有该IP,状态是BACKUP。除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能,当MASTER失效时,BACKUP将接管原先MASTER的网络功能。

Keepalived就是基于VRRP协议实现的。Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为Keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;check模块负责健康检查;vrrp模块用来实现VRRP协议。

安装Keepalived

刚刚提到的VRRP协议有1个master角色和至少一个backup角色,所以做本实验需要准备至少两台linux机器。这里我用了两台虚拟机(192.168.33.128和192.168.33.129,其中128作为master,129作为backup)来完成实验。

  • 在两台机器上都安装keepalived:
[root@localhost ~]# cd /usr/local/src/             //为了辨识,我将主进入/src/目录
[root@localhost src]# yum install -y keepalived    //安装keepalived
[root@localhost ~]# cd /usr/local/mysql/           //将从进入/mysql/目录
[root@localhost mysql]# yum install -y keepalived

Keepalived+Nginx实现Web高可用

在生产环境中,很多企业把Nginx作为负载均衡器使用,它很重要,一旦宕机会导致整个站点不能访问,所以需要再准备一台备用Nginx,Keepalived用在这种场景下非常合适。

在配置之前,我把两台机器的IP、角色罗列一下:

master:192.168.33.128   安装keepalived+Nginx
backup:192.168.33.129   安装keepalived+Nginx
VIP(虚拟IP):192.168.33.100

VIP(虚拟IP)是由Keepalived给服务器配置上的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP就会被分配到backup机器上继续对外提供服务,而用户是无法感知的。

  • 编辑master的keepalived配置文件:
[root@localhost src]# vim /etc/keepalived/keepalived.conf          //更改为下面内容
global_defs {
   notification_email {
     lzx@lzxlinux.com         //定义接收告警的人
   }
   notification_email_from root@lzxlinux.com        //定义发邮件的地址
   smtp_server 127.0.0.1          //定义发邮件服务器地址,若为127.0.0.1则使用本机自带邮件服务器发送
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {          //chk_nginx为自定义名字,后面会用到
    script "/usr/local/sbin/check_ng.sh"         //自定义脚本,该脚本为监控Nginx服务的脚本
    interval 3         //每隔3s执行一次该脚本
}

vrrp_instance VI_1 {
    state MASTER          //角色为master
    interface ens33       //针对哪个网卡监听VIP
    virtual_router_id 51
    priority 100          //设置权重为100,master权重必须要比backup大,因为权重越大优先级越高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass lzxlinux>com        //定义密码,这个密码自定义
    }
    virtual_ipaddress {
        192.168.33.100          //定义VIP地址
    }

    track_script {
        chk_nginx          //定义监控脚本,这里和上面vrrp_script后面的字符串保持一致
    }

}

Keepalived要实现高可用,监控Nginx服务是必须的,它本身没有这个功能,需要借助自定义脚本来实现。
- 定义监控Nginx服务的脚本:

[root@localhost src]# vim /usr/local/sbin/check_ng.sh         //写入下面内容
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi
[root@localhost src]# chmod a+x /usr/local/sbin/check_ng.sh        //需要给予执行权限,否则无法被keepalived调用

上面操作完成后,就可以启动master上的keepalived了,如果没有启动Nginx服务,它会帮我们自动拉起来,并监听VIP

  • 启动master上的keepalived:
[root@localhost src]# systemctl start keepalived          //启动keepalived服务
[root@localhost src]# ip add          //这里使用ip add命令才能查看VIP,ifconfig无法查看
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8e:5e:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.128/24 brd 192.168.33.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.33.100/32 scope global ens33            //可以看到VIP地址
       valid_lft forever preferred_lft forever
    inet6 fe80::686b:95cd:2ab3:9c19/64 scope link 
       valid_lft forever preferred_lft forever
  • 查看Nginx服务是否启动:
[root@localhost src]# ps aux |grep nginx
root        843  0.0  0.0  20540   656 ?        Ss   08:53   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody      844  0.0  0.0  22984  3236 ?        S    08:53   0:00 nginx: worker process
nobody      845  0.0  0.0  22984  3236 ?        S    08:53   0:00 nginx: worker process           //Nginx服务已经启动

master上面的配置已经完成,接下来配置backup

  • 编辑keepalived配置文件:
[root@localhost mysql]# vim /etc/keepalived/keepalived.conf        //更改为下面内容
global_defs {
   notification_email {
     lzx@lzxlinux.com
   }
   notification_email_from root@lzxlinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}

vrrp_instance VI_1 {
    state BACKUP          //角色为backup
    interface ens33
    virtual_router_id 51
    priority 90           //权重设为90,比master权重小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass lzxlinux>com
    }
    virtual_ipaddress {
        192.168.33.100
    }

    track_script {
        chk_nginx
    }

}
  • 编辑监控Nginx服务的脚本:
[root@localhost mysql]# vim /usr/local/sbin/check_ng.sh          //写入下面内容
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx           //这里与master不同,因为backup上面Nginx是yum安装的
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi
[root@localhost mysql]# chmod a+x /usr/local/sbin/check_ng.sh        //给予执行权限
  • backup安装Nginx:
[root@localhost mysql]# yum install -y epel-release         //安装扩展源
[root@localhost mysql]# yum install -y nginx

在CentOS 7上yum安装的Nginx启动命令为systemctl start nginx ,所以在前面的check_ng.sh脚本中,启动命令有所更改

  • 启动keepalived服务:
[root@localhost mysql]# systemctl start keepalived

虽然backup上安装了Nginx,但不需要启动,正常情况下只要master提供Nginx服务即可

另外,master上面的Nginx是编译安装,而backup上面的Nginx是yum安装,所以Nginx的版本号不一样,可以用来区分它们

  • 验证上面配置:
[root@localhost mysql]# curl -I 192.168.33.128          //backup上访问master  
HTTP/1.1 200 OK
Server: nginx/1.12.1          //master上面的Nginx版本为1.12.1
Date: Fri, 20 Jul 2018 02:07:17 GMT
Content-Type: text/html
Content-Length: 8
Last-Modified: Thu, 05 Jul 2018 07:22:18 GMT          //版本不一样,Last-Modified也会不一样
Connection: keep-alive
ETag: "5b3dc72a-8"
Accept-Ranges: bytes
[root@localhost mysql]# systemctl start nginx       //backup上启动Nginx
[root@localhost mysql]# systemctl stop firewalld       //关闭防火墙
[root@localhost mysql]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost mysql]# getenforce
Enforcing
[root@localhost mysql]# setenforce 0          //关闭selinux
[root@localhost src]# curl -I 192.168.33.129          //master上访问backup
HTTP/1.1 200 OK
Server: nginx/1.12.2            //backup上面的Nginx版本为1.12.2
Date: Fri, 20 Jul 2018 02:13:41 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes
[root@localhost mysql]# curl -I 192.168.33.100         //backup上访问VIP
HTTP/1.1 200 OK
Server: nginx/1.12.1         //可以看到VIP在master上
Date: Fri, 20 Jul 2018 02:21:59 GMT
Content-Type: text/html
Content-Length: 8
Last-Modified: Thu, 05 Jul 2018 07:22:18 GMT
Connection: keep-alive
ETag: "5b3dc72a-8"
Accept-Ranges: bytes

关掉master上面的Nginx服务:

[root@localhost src]# netstat -lntp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      843/nginx: master p 
[root@localhost src]# /etc/init.d/nginx stop 
Stopping nginx (via systemctl):                            [  确定  ]
[root@localhost src]# netstat -lntp |grep nginx        //可以看到Nginx服务又启动了
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8399/nginx: master 
[root@localhost src]# tail /var/log/messages            //通过日志看到Nginx被启动的信息
Jul 20 10:27:30 localhost systemd: Stopping SYSV: http service....
Jul 20 10:27:30 localhost nginx: Stopping Nginx: [  确定  ]
Jul 20 10:27:30 localhost systemd: Stopped SYSV: http service..
Jul 20 10:27:31 localhost systemd: Starting SYSV: http service....
Jul 20 10:27:31 localhost nginx: Starting Nginx: [  确定  ]
Jul 20 10:27:31 localhost systemd: Started SYSV: http service..

关掉master上的keepalived服务,模拟master宕机:

[root@localhost src]# systemctl stop keepalived      //关闭keepalived服务
[root@localhost src]# curl -I 192.168.33.100         //master上访问VIP
HTTP/1.1 200 OK
Server: nginx/1.12.2           //这里VIP已经到了backup上
Date: Fri, 20 Jul 2018 02:35:01 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT         //这里也显示为backup
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

开启master上的keepalived服务,再看:

[root@localhost src]# systemctl start keepalived     //开启keepalived服务
[root@localhost src]# curl -I 192.168.33.100         //master上访问VIP
HTTP/1.1 200 OK
Server: nginx/1.12.1          //这里VIP又回到了master上
Date: Fri, 20 Jul 2018 02:37:51 GMT
Content-Type: text/html
Content-Length: 8
Last-Modified: Thu, 05 Jul 2018 07:22:18 GMT         //这里也显示是master
Connection: keep-alive
ETag: "5b3dc72a-8"
Accept-Ranges: bytes

如果一台机器宕机,那么上面的keepalived服务必然会停掉,所以上面验证高可用是没有问题的。

另外,如果只是禁掉vrrp协议,但master不会认为自己宕机,也就不会释放VIP资源。而如果master和backup都绑定了VIP,那么对外提供服务就会紊乱,这就叫做“脑裂”,这种情况是不允许发生的。


18.2 搭建负载均衡集群

负载均衡集群,即让多台服务器均衡地去承受压力。实现负载均衡集群的开源软件有LVS、Keepalived、haproxy、Nginx等,当然也有商业负载均衡设备,如F5,Netscaler等,商业的负载均衡解决方案非常稳定,但价格也很昂贵。这里,我们以LVS为主。

LVS介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,由国内大牛章文嵩开发。

LVS是一个4层的负载均衡软件,针对TCP/IP做的路由和转发。在LVS架构中,核心角色是调度器,用来分发用户的请求,调度器具有很好的吞吐率,将请求均衡地转移到不同的真实服务器上执行,且调度器自动屏蔽掉真实服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。

LVS根据实现方式的不同,主要分为3种类型:NAT模式,IP Tunnel(IP隧道)模式,DR模式。

NAT模式

NAT模式的实现原理比较简单,调度器会把用户的请求通过预设的iptables规则转发给后端的真实服务器,其中调度器有两个IP,一个是公网IP,一个是内网IP,而真实服务器只有内网IP。用户访问的时候请求的是调度器的公网IP,它会把用户的请求转发到真实服务器的内网IP上。

IP Tunnel模式

IP隧道是将一个IP报文封装在另一个IP报文的技术,这样就使目标为一个IP地址的数据报文能被封装和转发到另一个IP报文,如VPN技术就是IP隧道。

在LVS的IP Tunnel模式中,后端的真实服务器有一组而非一个,在有请求的时候调度器会动态的选择一台服务器,将请求报文封装和转发给选出的真实服务器。这样,我们可以利用IP隧道的原理,将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。

调度器将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给真实服务器,真实服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文发给客户。

DR模式

和IP Tunnel模式相同,用户的请求被调度器动态地分配到真实服务器上,真实服务器响应请求把结果直接返回给用户。不过,在这种模式下不会封装IP,而是将数据帧的MAC地址改为真实服务器的MAC地址

上面三种模式,NAT模式适合小型的集群,机器数量不多,它的优势是节约公网IP;IP Tunnel和DR模式相差不大,都能支撑较大规模的集群,但缺点是浪费公网IP。

LVS的调度算法

调度器把客户端发来的请求均衡地分发给后端的真实服务器,这是依靠预先设定好的调度算法来实现的。LVS中支持的调度算法主要有8种:

1.轮询调度(RR)

按顺序把请求依次发送给后端的服务器,而不考虑后端服务器的性能、处理速度和响应时间。

2.带权重的轮询调度(WRR)

比上面算法多了一个权重的设置,权重越高的服务器被分配到的请求就越高,这样后端服务器性能不一致时,就可以给配置低的服务器较小的权重。

3.最小连接调度(LC)

会根据各真实服务器上的连接数来决定把新的请求分配给谁,连接数少说明服务器是空闲的,这样把新的请求分配给空闲服务器上更加合理。

4.带权重的最小连接调度(WLC)

在最小连接调度的基础上再增加一个权重设置,这样就可以人为地去控制哪些服务器上多分配请求、哪些少分配请求。

5.基于局部性的最小连接调度(LBLC)

简称LBLC算法,是针对报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,在服务器的负载均衡的情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率。

6.带复制的基于局部性的最小连接调度(LBLCR)

简称LBLCR算法,与上面的算法不同在于:它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法是维护从一个IP地址到一台服务器的映射。

LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从该服务器组中选出一台服务器,若该服务器没有超载,则将请求发送到该服务器;若服务器超载,则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列调度(DH)

根据请求的IP地址,作为散列键(hash key)从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列调度(SH)

与目标地址散列调度正好相反,它是根据请求的源IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

上面8种算法,前4种用的最多,基本上能满足绝大多数的应用场景。

NAT模式LVS搭建

NAT模式下,调度器需要有两个IP,一个公网IP一个内网IP,真实服务器只需要内网IP,此架构需要至少三台服务器。三台机器的IP分配如下:

调度器dir:192.168.33.127(内网IP),192.168.40.128(公网IPvmware仅主机网络模式)
真实服务器rs1:192.168.33.128(内网IP)
真实服务器rs2:192.168.33.129(内网IP

调度器上有两块网卡,作为内网的网卡使用的是NAT的网络,而作为“公网”的网卡使用的是仅主机网络

[root@lzx ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.40.128  netmask 255.255.255.0  broadcast 192.168.40.255
        inet6 fe80::c159:c855:9b0:115  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:13:48:42  txqueuelen 1000  (Ethernet)
        RX packets 41  bytes 5482 (5.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65  bytes 7200 (7.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.127  netmask 255.255.255.0  broadcast 192.168.33.255
        inet6 fe80::98c2:9f58:8e3d:c10a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:13:48:4c  txqueuelen 1000  (Ethernet)
        RX packets 25575  bytes 32190330 (30.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7658  bytes 776297 (758.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 首先,真实服务器rs1和rs2上需要把内网的网关设置为调度器dir的内网IP:
[root@localhost src]# vim /etc/sysconfig/network-scripts/ifcfg-ens33          //更改下面内容
GATEWAY=192.168.33.127         //rs1上更改网关为dir的内网IP
[root@localhost src]# service network restart
Restarting network (via systemctl):                        [  确定  ]

[root@localhost mysql]# vim /etc/sysconfig/network-scripts/ifcfg-ens33        //更改下面内容
GATEWAY=192.168.33.127         //rs2上更改网关为dir的内网IP
[root@localhost mysql]# service network restart
Restarting network (via systemctl):                        [  确定  ]
  • 关闭三台服务器的防火墙并使不开机启动:
[root@localhost src]# systemctl stop firewalld          //rs1关闭防火墙
[root@localhost src]# systemctl disable firewalld       //使不开机启动

[root@localhost mysql]# systemctl stop firewalld        //rs2关闭防火墙
[root@localhost mysql]# systemctl disable firewalld     //使不开机启动

[root@lzx ~]# systemctl stop firewalld                  //dir关闭防火墙
[root@lzx ~]# systemctl disable firewalld               //使不开机启动
  • dir上安装LVS核心工具ipvsadm:
[root@lzx ~]# yum install -y ipvsadm
  • 在dir上编写一个脚本:
[root@lzx ~]# vim /usr/local/sbin/lvs_nat.sh           //写入下面内容
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,我的两个网卡分别为ens33和ens34
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens34/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.33.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.40.128:80 -s wlc 
$IPVSADM -a -t 192.168.40.128:80 -r 192.168.33.128:80 -m -w 1
$IPVSADM -a -t 192.168.40.128:80 -r 192.168.33.129:80 -m -w 1

上面,

ipvsadm的-C选项可以清空规则,防止之前的规则有影响,-A增加Virtual Server,-t为TCP,-s指定调度算法,wlc为带权重的最小连接调度算法,
-a增加rs,-r指定rs的IP,-m表示LVS的模式为NAT(masquerad),如果是-g表示DR,-i表示IP Tunnel,-w指定权重,另外还有-p,指定超时时间,这里不设置该参数,以免影响后面检验

  • 编辑完脚本后,直接执行:
[root@lzx ~]# bash /usr/local/sbin/lvs_nat.sh

如果dir上有开启Nginx服务,需要把它关闭

killall nginx
  • 下面验证LVS效果:
    为了方便区分,需要给rs1和rs2各设置一个默认主页
[root@localhost src]# echo "rs1" > /data/nginx/default/index.html    //rs1上执行,rs1上的Nginx是编译的Nginx
[root@localhost mysql]# echo "rs2" > /usr/share/nginx/html/index.html      //rs2上执行,rs2上的Nginx是yum安装的Nginx,所以路径与rs1不同

再在dir上访问dir的外网IP(192.168.40.128)

[root@lzx ~]# curl 192.168.40.128
rs2
[root@lzx ~]# curl 192.168.40.128
rs1
[root@lzx ~]# curl 192.168.40.128
rs2
[root@lzx ~]# curl 192.168.40.128
rs1
[root@lzx ~]# curl 192.168.40.128
rs2
[root@lzx ~]# curl 192.168.40.128
rs1
[root@lzx ~]# curl 192.168.40.128
rs2
[root@lzx ~]# curl 192.168.40.128
rs1

可以看到,每次访问,返回的结果是在rs1和rs2中随机出现的。这样,就做到了负载均衡


更多资料参考:
LVS入门系列
配置nginx + keepalived双主模式
MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

猜你喜欢

转载自blog.csdn.net/miss1181248983/article/details/81135176