Keepalived的设计目标是构建高可用的LVS负载均衡群集,能够调用ipvsadm工具来建立虚拟服务器、管理服务器池,而不只仅用做双机热备。使用Keepalived构建LVS群集更加简便易用,主要优点体如今:对LVS负载调度器实现热备切换,提升可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再从新加入。html
在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器。此博客将以DR模式的LVS群集为基础,增长一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的LVS网站群集平台。web
由于该服务涉及到了LVS技术,相关LVS概述及配置博文能够参考如下连接:
Centos 7之LVS负载均衡群集概述算法
构建基于直接路由模式(DR)的负载均衡群集centos
使用Keepalived构建LVS群集时,也须要用到ipvsadm管理工具,但大部分工做会由Keepalived自动完成,不须要手动执行ipvsadm(除了查看和监控群集之外)。服务器
1)、2个调度器和2个web节点使用同一个网段地址,能够直接和外网通讯。为了共享存储的安全性,通常将web节点和存储服务器规划到内网环境,因此web节点必须有两个及以上网卡的接口。负载均衡
2)、我这里资源有限,也为了配置方便,因此调度器和web节点分别只有两个,在web访问请求量不大的状况下,足够了,可是若访问请求比较大,那么最少要分别配置三个调度器和web节点,若是只有两个web节点的话,访问量又比较大,那么一旦有一个宕机了,那剩下一个独苗一定会由于扛不住激增的访问请求,而被打死。ide
3)、准备系统映像,以便安装相关服务。工具
4)、自行配置防火墙策略和除了VIP以外的IP地址(我这里直接关闭了防火墙)。
5)、keepalived会自动调用IP_vs模块,因此无需手动加载。
1)、客户端屡次访问群集的VIP,获得的是同一个网页。
2)、主调度器宕机后,群集的VIP地址将会自动漂移到从(备份)调度器,此时,全部的调度任务由从调度器进行分配。当主调度器恢复运行后,群集的VIP地址会自动转移回主调度器,主调度器继续工做,从调度器转回备份状态。
3)、web节点宕机后,会被keepalived健康检查功能检测到,从而自动在web节点池中去除宕机的节点,待web节点恢复运行后,会被自动添加到web节点池中。
[root@centos01 ~]# yum -y install httpd <!--安装httpd服务--> [root@centos01 ~]# echo "www.benet.com" > /var/www/html/index.html <!--建立网站主页,写入测试数据--> [root@centos01 ~]# systemctl start httpd <!--启动httpd服务--> [root@centos01 ~]# systemctl enable httpd<!--设置开机自动启动--> [root@centos01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0 <!--复制lo:0网卡配置文件--> [root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0 <!--编辑lo:0网卡配置文件--> DEVICE=lo:0 <!--修改网卡名字--> IPADDR=192.168.100.253 <!--配置VIP地址--> NETMASK=255.255.255.255 <!--配置子网掩码--> ONBOOT=yes <!--保留上面四行配置项便可,多余的行删除--> [root@centos01 ~]# systemctl restart network <!--重启网卡服务--> [root@centos01 ~]# ifconfig <!--查看配置是否生效--> lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 488 bytes 39520 (38.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 488 bytes 39520 (38.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.100.253 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback) [root@centos01 ~]# vim /etc/sysctl.conf <!--修改web服务器ARP响应--> net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@centos01 ~]# sysctl -p <!--刷新配置--> net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
[root@centos02 ~]# yum -y install httpd <!--安装httpd服务--> [root@centos02 ~]# echo "www.accp.com" > /var/www/html/index.html <!--建立网站主页,写入测试数据--> [root@centos02 ~]# systemctl start httpd <!--启动httpd服务--> [root@centos02 ~]# systemctl enable httpd <!--设置开机自动启动--> [root@centos02 ~]# scp root@192.168.100.10:/etc/sysconfig/network-scripts/ifcfg-lo:0 /etc/sysconfig/network-scripts/ <!--拷贝 第一台网站服务器的lo:0网卡配置文件到第二台网站服务器--> The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--输入yes--> Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts. root@192.168.100.10's password: <!--输入密码--> ifcfg-lo:0 100% 70 53.3KB/s 00:00 [root@centos02 ~]# scp root@192.168.100.10:/etc/sysctl.conf /etc/sysctl.conf <!--拷贝ARP响应到第二台网站服务器--> root@192.168.100.10's password: <!--输入密码--> sysctl.conf 100% 660 304.3KB/s 00:00 [root@centos02 ~]# systemctl restart network <!--重启网卡服务--> [root@centos02 ~]# ifconfig <!--查看是否配置生效--> lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 496 bytes 40064 (39.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 496 bytes 40064 (39.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.100.253 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback) [root@centos02 ~]# sysctl -p <!--刷新配置--> net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
[root@centos04 ~]# yum -y install keepalived ipvsadm <!--安装所需工具--> [root@centos04 ~]# vim /etc/sysctl.conf <!--调整内核参数,写入下面三行--> ..................... net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@centos04 ~]# sysctl -p <!--刷新一下--> net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@centos04 ~]# cd /etc/keepalived/ [root@centos04 keepalived]# cp keepalived.conf keepalived.conf.bak <!--备份配置文件--> [root@centos04 keepalived]# vim keepalived.conf <!--编辑keepalived配置文件--> ! Configuration File for keepalived global_defs { router_id LVS_DEVEL1<!--本服务器的名称改一下,在群集中全部调度器名称里必须惟一--> } vrrp_instance VI_1 { <!--定义VRRP热备实例--> state MASTER <!--设置为主调度器--> interface ens32 <!--承载VIP地址的物理网卡接口根据实际状况改一下--> virtual_router_id 51<!--虚拟路由器的ID号,每一个热备组保持一致--> priority 100 <!--优先级,数值越大优先级越高--> advert_int 1 <!--通告间隔秒数(心跳频率)--> authentication { <!--认证信息,每一个热备组保持一致--> auth_type PASS <!--认证类型--> auth_pass 1111 <!--密码字串--> } virtual_ipaddress { 192.168.100.253 <!--指定漂移IP地址(VIP),能够有多个--> } } virtual_server 192.168.100.253 80 { <!--改成VIP地址及所需端口--> delay_loop 6 <!--健康检查的间隔时间(秒)--> lb_algo rr <!--根据须要改一下负载调度算法,rr表示轮询--> lb_kind DR <!--设置工做模式为DR(直接路由)模式--> persistence_timeout 50 <!--链接保持时间--> protocol TCP <!--应用服务采用的是TCP协议--> real_server 192.168.100.10 80 { <!--一个web节点的配置,real_server 192.168.100.10 80 { ..... }是复制下面的。复制过来后,更改一下节点IP地址便可--> weight 1 <!--节点的权重--> TCP_CHECK { <!--健康检查方式--> connect_port 80 <!--检查的目标端口--> connect_timeout 3 <!--链接超时(秒)--> nb_get_retry 3 <!--重试次数--> delay_before_retry 3 <!--重试间隔(秒)--> } } real_server 192.168.100.20 80 { <!--一个web节点的配置,改动完成后,有几个节点就复制几份real_serve 192.168.100.20 80 { ..... }到该行的上方,最好别往下面粘贴,以防大括号丢失--> weight 1 <!--节点的权重--> TCP_CHECK { <!--健康检查方式--> connect_port 80 <!--检查的目标端口--> connect_timeout 3 <!--链接超时(秒)--> nb_get_retry 3 <!--重试次数--> delay_before_retry 3 <!--重试间隔(秒)--> } } } <!--如下还有不少配置项,我这里有98行,所有删除便可,若不删除时重启服务可能报错--> [root@centos04 ~]# systemctl restart keepalived <!--重启服务--> [root@centos04 ~]# systemctl enable keepalived <!--设置开机自启动-->
[root@centos05 ~]# yum -y install ipvsadm keepalived <!--安装ipvsadm和keepalived软件包--> [root@centos05 ~]# scp root@192.168.100.40:/etc/sysctl.conf /etc/ <!--将主调度器的/proc参数文件复制过来--> root@192.168.100.40 s password: <!--输入主调度器的用户密码--> sysctl.conf 100% 566 205.8KB/s 00:00 [root@centos05 ~]# sysctl -p <!--刷新--> net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@centos05 ~]# scp root@192.168.100.40:/etc/keepalived/keepalived.conf /etc/keepalived/ <!--拷贝主节点的keepalived主配置文件到从节点服务器上--> root@192.168.100.40's password: <!--输入密码--> keepalived.conf 100% 803 2.1MB/s 00:00 [root@centos05 ~]# vim /etc/keepalived/keepalived.conf <!--修改keepalived主配置文件--> <!--若两台服务器都是ens32网卡的话,那么所需该的只有如下三项(其余项保持默认)--> router_id LVS_HA_Backup <!--将route_id改成不同的,route_id必须是惟一的--> state BACKUP <!--状态改成BACKUP,注意大小写--> interface ens32 priority 99 <!--优先级要比主调度器小,而且不可与其余备份调度器优先级冲突--> [root@centos05 ~]# systemctl start keepalived <!--启动keepalived服务--> [root@centos05 ~]# chkconfig --level 35 keepalived on <!--设置开机自动启动-->
至此,主、从调度器也配置完成了,若须要部署多个从调度器,按照以上这个从(备份)调度器配置便可。
客户端测试访问VIP地址:192.168.100.253
为了测试,因此才在每一个web节点准备不一样的网页文件,以便测试是否有负载均衡的效果,如今效果已经有了,因此要搭建共享存储服务器,全部的web节点都从共享存储服务器读取网页文件向client提供,以便向client提供相同的网页文件。
接下来开始配置共享存储服务器
[root@centos03 ~]# yum -y install rpcbind nfs-utils <!--安装所需软件包--> [root@centos03 ~]# mkdir /web <!--建立共享网站根目录--> [root@centos03 ~]# echo "www.nfs.com" > /web/index.html <!--建立网站主页,写入测试数据--> [root@centos03 ~]# vim /etc/exports <!--修改nfs主配置文件共享/web目录--> /web 192.168.100.10(ro) 192.168.100.20(rw) [root@centos03 ~]# systemctl start rpcbind <!---启动相关服务-> [root@centos03 ~]# systemctl start nfs <!--启动相关服务--> [root@centos03 ~]# systemctl enable rpcbind <!--设置开机自动启动--> [root@centos03 ~]# systemctl enable nfs <!--设置开机自动启动--> [root@centos03 ~]# showmount -e 192.168.100.30 <!--查看共享目录--> Export list for 192.168.100.30: /web 192.168.100.20,192.168.100.10
[root@centos01 ~]# mount 192.168.100.30:/web /var/www/html/ <!--挂载共享目录到网站服务器的根目录--> [root@centos01 ~]# cat /var/www/html/index.html <!--查看是否挂载成功--> www.nfs.com [root@centos01 ~]# vim /etc/fstab <!--设置自动挂载--> 192.168.100.30:/web /var/www/html/ nfs defaults 0 0 [root@centos01 ~]# systemctl restart httpd <!--从新启动httpd服务-->
[root@centos02 ~]# mount 192.168.100.30:/web /var/www/html/ <!--挂载共享目录到网站服务器的根目录--> [root@centos02 ~]# cat /var/www/html/index.html <!--查看是否挂载成功--> www.nfs.com [root@centos02 ~]# vim /etc/fstab <!--设置自动挂载--> 192.168.100.30:/web /var/www/html/ nfs defaults 0 0 [root@centos02 ~]# systemctl restart httpd <!--从新启动httpd服务-->
此次,客户端不管怎么刷新,看到的页面永远都是www.nfs.com
1)VIP在哪一个调度器上,查询该调度器承载VIP地址的物理接口,便可看到VIP地址(VIP地址在备份调度器上查不到的):
[root@centos04 ~]# ip a show dev ens32 <!--查询承载VIP地址的物理网卡ens32或者使用ip a命令也能够查看VIP地址--> ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> ate UP groupn 1000 link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff inet 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32 valid_lft forever preferred_lft forever inet 192.168.100.253/32 scope global ens32 <!--VIP地址--> valid_lft forever preferred_lft forever inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute valid_lft forever preferred_lft forever
2)查询有哪些web节点
[root@centos04 ~]# ipvsadm -ln <!--查询web节点池及VIP--> IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.253:80 rr persistent 50 -> 192.168.100.10:80 Route 1 0 0 -> 192.168.100.20:80 Route 1 0 0
3)模拟第二台Web节点和主调度器故障,并在备份调度器上再次查询VIP以及web节点
[root@centos05 ~]# ip a show dev ens32 <!--能够看到VIP地址已经转移到了备份调度器上--> ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> ate UP groupn 1000 link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff inet 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32 valid_lft forever preferred_lft forever inet 192.168.100.253/32 scope global ens32 <!--VIP地址--> valid_lft forever preferred_lft forever inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@centos05 ~]# ipvsadm -ln <!--Web2节点宕机后,就查不到了。--> IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.253:80 rr -> 192.168.100.10:80 Route 1 0 0
4)查看调度器故障切换时的日志消息
[root@centos05 ~]# tail -30 /var/log/messages
—————— 本文至此结束,感谢阅读 ——————