Keepalived 高可用群集 1、LVS Linux虚拟服务器(Linux Virtual Server)
LVS 实际上相当于基于IP地址的虚拟化应用, 为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法
2、Keepalived 1、支持故障自动切换(Failover) 2、支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当 master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。
3、Keepalived实现原理剖析 1、keepalived采用VRRP热备份协议实现Linux 服务器的多机热备功能
2、VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案。
3、由多台路由器组成一个热备份组,通过共用的虚拟IP地址对外提供服务
4、每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
5、若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
2、LVS+Keepalived 高可用群集部署 环境配置
主机 操作系统 IP地址 工具软件安装包 主负载均衡器 CentOS7 ens33:192.168.19.10 ipvsadm 备负载均衡器 CentOS7 ens33:192.168.19.26 ipvsadm NFS服务器 CentOS7 192.168.19.18 rpcbind、nfs-utils Web节点服务器1 CentOS7 ens33192.168.19.11 lo0(VIP)192.168.19.100 rpcbind、nfs-utils、httpd Web节点服务器2 CentOS7 ens33192.168.19.17 lo0(VIP)192.168.19.100 rpcbind、nfs-utils、httpd 客户端 win7 192.168.19.120 ------ 1、部署NFS共享服务器 注意:此次搭建在同一局域网内,设置网络时不用网关和DNS,注释即可。如果不在同一网段,需要配置网关。
1、部署共享存储 NFS服务器:192.168.19.18
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
yum -y install nfs-utils rpcbind
systemctl start rpcbind.service systemctl start nfs.service systemctl enable nfs.service systemctl enable rpcbind.service
mkdir optpxl mkdir optjingjing
chmod 777 optpxl chmod 777 optjingjing
vim etcexports opttest1 192.168.19.024(rw,sync) opttest2 192.168.19.024(rw,sync)
exportfs -rv
2、配置节点服务器 Web节点服务器1:ens33:192.168.19.11 lo0 (VIP):192.168.19.100 Web节点服务器2:ens33:192.168.19.17 lo0 (VIP):192.168.19.100 接下来是两台服务器相同的配置
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
(1)配置虚拟 IP 地址(VIP:192.168.19.100)
#此地址仅用做发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。 #因此使用虚接口 lo0 来承载 VIP 地址,并为本机添加一条路有记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
vim etcsysconfignetwork-scriptsifcfg-lo0 DEVICE=lo0 IPADDR=192.168.19.100 NETMASK=255.255.255.255 ONBOOT=yes
ifup lo0 ifconfig lo0
#设置临时的路由,重启失效;禁锢路由 route add -host 192.168.19.100 dev lo0 #查看路由 route -n
#开机自动添加路由,生产环境应该用这个 vim etcrc.local sbinroute add -host 192.168.19.100 dev lo0 chmod +x etcrc.drc.local
(2)调整内核的ARP 响应参数以阻止更新 VIP 的MAC 地址,避免发生冲突
vim etcsysctl.conf ...... net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求 net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
sysctl -p
yum install -y nfs-utils rpcbind httpd systemctl start rpcbind systemctl enable rpcbind systemctl start httpd.service systemctl enable httpd.service
下面两个服务器设置有点不一样了 Web节点服务器1:ens33:192.168.19.11 lo0 (VIP):192.168.19.100
showmount -e 192.168.19.18
mount.nfs 192.168.19.18optpxl varwwwhtml echo 'this is pxl web!' varwwwhtmlindex.html
Web节点服务器2:ens33:192.168.19.17 lo0 (VIP):192.168.19.100
showmount -e 192.168.19.18
mount.nfs 192.168.19.18optjingjing varwwwhtml echo 'this is jingjing web!' varwwwhtmlindex.html
showmount -e 192.168.19.18
mount.nfs 192.168.19.18optjingjing varwwwhtml echo 'this is jingjing web!' varwwwhtmlindex.html
3、配置负载调度器 (DR服务器)主负载均衡器ens33:192.168.19.26 (DR服务器)备负载均衡器ens33:192.168.19.10 (1)关防火墙,加载ip_vs模块
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
#加载ip_vs模块,并安装ipvsadm工具 modprobe ip_vs cat procnetip_vs yum install -y ipvsadm
(2)调整 proc 响应参数
vim etcsysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
(3)配置keeplived 主负载调度器1:192.168.19.26 备负载调度器2:192.168.19.10
yum -y install keepalived cd etckeepalived cp keepalived.conf keepalived.conf.bak
这里主备负载服务器上有轻微的差距
vim keepalived.conf ...... #定义全局参数 global_defs {
#10行修改,邮件服务指向本地 smtp_server 127.0.0.1
#12行修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02 router_id LVS_01
#14行修改;加注释;vrrp_strict:严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。 #vrrp_strict
} #定义VRRP热备实例参数 vrrp_instance VI_1 {
#20行修改;指定热备状态,主为MASTER,备为BACKUP state MASTER
#21行修改;指定承载vip地址的物理接口 interface ens33
#22行修改;指定虚拟路由器的ID号,每个热备组保持一致 virtual_router_id 10
#23行修改;指定优先级,数值越大优先级越高,主为100,备为90 priority 100 #通告间隔秒数(心跳频率) advert_int 1 #定义认证信息,每个热备组保持一致 authentication { #认证类型 auth_type PASS
#27行修改,指定验证密码,主备服务器保持一致 auth_pass 123456 }
#指定群集vip地址 virtual_ipaddress { 192.168.19.100 } }
#34行修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数 virtual_server 192.168.19.100 80 { #健康检查的间隔时间(秒) delay_loop 6 #指定调度算法,轮询(rr) lb_algo rr #37行修改,指定群集工作模式,直接路由(DR) lb_kind DR #连接保持时间(秒) persistence_timeout 0 #应用服务采用的是TCP协议 protocol TCP
#41行修改,指定第一个Web节点的地址、端口 real_server 192.168.19.11 80 { #节点的权重 weight 1
#43行删除,添加以下健康检查方式 TCP_CHECK { #添加检查的目标端口 connect_port 80 #添加连接超时(秒) connect_timeout 3 #添加重试次数 nb_get_retry 3 #添加重试间隔 delay_before_retry 4 } }
#添加第二个 Web节点的地址、端口 real_server 192.168.19.17 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } } #删除后面多余的配置
systemctl start keepalived #查看虚拟网卡vip ip addr show dev ens33
补充:修改好主负载服务器上的配置文件后,感觉要改的好多,其实主备之间配置就三点不一样,这时候就可以远程复制一波啦。(在主负载服务器上操作)
scp keepalived.conf root@192.168.19.10etckeepalived
都配置好后,使用“ip addr show dev ens33”查看虚拟网卡vip
4、客户机访问 访问192.168.19.100,隔一段时间进行刷新,轮询显示
将主调度服务器的 keepalived.service服务关闭,测试