一、Keepalived案例分析
1、Keepalived工具介绍
(1)专为LVS和HA设计的一款健康检查工具
①支持故障自动切换
②支持节点健康检查
③官方网站:https://www.keepalived.org/
2、Keepalived原理实现
(1)Keepalived采用ARRP热备份协议实现Linux服务器的多机热备功能
(2)VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
①由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
②VRRP协议为每一个路由设备定义一个虚拟路由ID(VRID)以及优先级
③每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
④若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
(3)双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
(4)实现基于Web服务的双机热备
①VIP漂移地址:192.168.10.200
②主服务器:192.168.10.128
③备服务器:192.168.10.129
④提供的应用服务:Web
3、配置Keepalived服务器
(1)Keepalived配置目录位于/etc/Keepalived
(2)Keepalived是主配置文件
①global_defs {…} 区段指定全局参数
②vrrp_instance 实例名称 {…} 区段指定VRRP热备参数
③注释文字以“!”符号开头
④目录samples,提供了许多配置样例作为参考
二、案例:搭载负载均衡+高可用群集
虚拟机编号 | 设备名称 | IP地址 | 备注 |
第一台 | lvs-master | ens33=192.168.10.128/24 nat模式 | |
第二台 | lvs-backup | ens33=192.168.10.129/24 nat模式 | |
第三台 | web01 | ens33=192.168.10.130/24 nat模式 lo:0=192.168.10.200/32 | lo:0子网掩码255.255.255.255 |
第四台 | web02 | ens33=192.168.10.131/24 nat模式 lo:0=192.168.10.200/32 | lo:0子网掩码255.255.255.255 |
第五台 | nfs | ens33=192.168.10.135/24 nat模式 |
1、五台虚拟机配置IP地址
2、五台虚拟机配置yum源,关闭防火墙和内核安全机制
[root@localhost ~]# yum clean all && yum makecache
[root@localhost ~]# systemctl disable firewalld --now
[root@localhost ~]# setenforce 0
3、五台虚拟机修改主机名
[root@localhost ~]# hostnamectl set-hostname lvs-master
[root@localhost ~]# hostnamectl set-hostname lvs-backup
[root@localhost ~]# hostnamectl set-hostname web01
[root@localhost ~]# hostnamectl set-hostname web02
[root@localhost ~]# hostnamectl set-hostname nfs
[root@localhost ~]# bash
4、五台虚拟机配置hosts文件
[root@localhost ~]# cat >> /etc/hosts << EOF
192.168.10.128 lvs-master
192.168.10.129 lvs-backup
192.168.10.130 web01
192.168.10.131 web02
192.168.10.135 nfs
EOF
2、双机热备搭建
(1)搭建lvs-master(第一台)
[root@lvs-master ~]# yum -y install keepalived ipvsadm
补充
[root@lvs-master ~]# rpm -qc keepalived #查看rpm包的文件路径
[root@lvs-master ~]# cd /etc/keepalived/
[root@lvs-master keepalived]# cp keepalived.conf{,.bak}
[root@lvs-master keepalived]# vim keepalived.conf
1 ! Configuration File for keepalived #这是keepalived的注释信息
#global_defs模块下(4-16行)只保留第12行“router_id LVS_DEVEL”内容,其余删除
3 global_defs { #全局配置项
4 router_id LVS_01 #修改服务器名称
5 }
6
7 vrrp_instance VI_1 { #定义虚拟路由冗余协议
8 state MASTER #热备状态,master代表主服务器
9 interface ens33 #绑定VIP地址的接口的网卡
10 virtual_router_id 51 #设备的身份标识,0-255,同一个热备组保持一致
11 priority 100 #虚拟路由器的优先级,范围1-254,数值越大优先级越高
12 advert_int 1 #vrrp通告间隔时间,默认为1s
13 authentication { #认证
14 auth_type PASS #认证类型,同一个热备组保持一致
15 auth_pass 1111 #认证密码,同一个热备组保持一致
16 }
17 virtual_ipaddress {
18 192.168.10.200 #虚拟VIP,可以有多个,不指定prefix,默认32
19 }
20 }
22 virtual_server 192.168.10.200 80 { #虚拟服务器VIP地址与端口
23 delay_loop 15 #检查后端服务器的时间间隔
24 lb_algo rr #负载调度算法,使用的是轮询算法
25 lb_kind DR #负载均衡集群的工作类型
26 !persistence_timeout 50 #添加注释。会话连接时长,lvs在多少时间内没有与后端服务器进行通讯,就会自动断开
27 protocol TCP #指定协议类型
28
29 real_server 192.168.10.130 80 { #后端服务器ip地址与端口
30 weight 1 #权重值
#删除31-39行内容,然后再30行下方添加两行
31 TCP_CHECK { #使用TCP协议检查
32 connect_port 80 #客户端请求端口
33 connect_timeout 3 #客户端请求的超时时间
34 nb_get_retry 3 #重试连接次数
35 delay_before_retry 4 #重试连接的间隔时间(秒)
36 }
37 }
#复制28-37行内容到37行下方
38
39 real_server 192.168.10.131 80 { #将复制后的地址改为131
40 weight 1 #轮询算法权重值相同
41 TCP_CHECK {
42 connect_port 80
43 connect_timeout 3
44 nb_get_retry 3
45 delay_before_retry 3
46 }
47 }
48 }
#删除49行以下内容
[root@lvs-master keepalived]# systemctl start keepalived #启动
[root@lvs-master keepalived]# ip add show dev ens33 #发现VIP地址在当前主master上
inet 192.168.10.200/32 scope global ens33
(2)搭建lvs-backup(第二台)
[root@lvs-backup ~]# yum -y install keepalived ipvsadm
[root@lvs-backup ~]# cd /etc/keepalived/
[root@lvs-backup keepalived]# cp keepalived.conf{,.bak}
#在lvs-master第一台上输入命令将配置文件传输到此虚拟机上
(在lvs-master虚拟机输入命令)[root@lvs-master keepalived]# scp keepalived.conf root@192.168.10.129:`pwd`
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.10.129's password: 123456
keepalived.conf 100% 812 594.8KB/s 00:00 #将配置文件传输到lvs-backup虚拟机上
[root@lvs-backup keepalived]# vim keepalived.conf #进入配置文件,与lvs-master相同
4 router_id LVS_02 #将“01”改为“02”
8 state BACKUP #将“MASTER”改为“BACKUP”
11 priority 99 #将“100”改为“99”,优先级小于主服务器
[root@lvs-backup keepalived]# systemctl start keepalived
(3)验证双机热备是否搭建成功
①在lvs-master(第一台)停止keepalived服务
[root@lvs-master keepalived]# systemctl stop keepalived
②在lvs-backup(第二台)输入命令查看
[root@lvs-backup keepalived]# ip add show dev ens33
inet 192.168.10.200/32 scope global ens33 #地址漂移到lvs-backup服务器上
③启动lvs-master(第一台)的keepalived服务
[root@lvs-master keepalived]# systemctl start keepalived
[root@lvs-master keepalived]# ip add show dev ens33
inet 192.168.10.200/32 scope global ens33 #漂移地址又回到lvs-master服务器上
3、第三、四台虚拟机搭建DR模式的Web节点配置
(1)设置本地回环地址
[root@web01 ~]# cd /etc/sysconfig/network-scripts/
[root@web01 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web01 network-scripts]# cat > ifcfg-lo:0 << EOF
DEVICE=lo:0
IPADDR=192.168.10.200
NETMASK=255.255.255.255
ONBOOT=yes
EOF
[root@web01 network-scripts]# systemctl restart network
[root@web01 network-scripts]# ifconfig #查看lo:0网卡配置
(2)添加VIP本地路由
[root@web01 ~]# route add -host 192.168.10.200 dev lo:0
[root@web01 ~]# echo 'route add -host 192.168.10.200 dev lo:0' >>/etc/rc.local #将策略写入开机自启动脚本里
[root@web01 ~]# route -n #查看网络策略
(3)调整 proc 响应参数
[root@web01 ~]# vim /etc/sysctl.conf
#在末尾添加
net.ipv4.conf.all.arp_ignore = 1 #忽略arp广播数据包,不允许RIP接收请求包
net.ipv4.conf.all.arp_announce = 2 #匹配精确RIP地址回包
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
#详情请查看:https://www.jianshu.com/p/a682ecae9693内容
[root@web01 ~]# sysctl -p #生效配置文件
(4)web网站节点的配置
[root@web01 ~]# yum -y install httpd
[root@web01 ~]# vim /var/www/html/index.html #写测试网页
#web01(第一台虚拟机)添加内容
<h1>web01</h1>
#web02(第二台虚拟机)添加内容
<h1>web02</h1>
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# systemctl enable httpd
浏览器输入192.168.10.130和192.168.10.131查看网页
4、搭建nfs共享服务
(1)在nfs(第五台)上安装nfs-utils和rpcbind软件包,并发布nfs共享目录
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# systemctl enable nfs
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# mkdir -p /opt/wwwroot #创建网站发布共享目录
[root@nfs ~]# vim /etc/exports #nfs共享配置文件
/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# netstat -anpt | grep rpcbind #查看端口号为111
[root@nfs ~]# showmount -e #查看本机发布的nfs共享目录
Export list for nfs:
/opt/wwwroot 192.168.10.0/24
(2)在两个web节点(第三、四台)中分别挂载nfs共享资源
[root@web01 ~]# yum -y install rpcbind
[root@web01 ~]# systemctl enable rpcbind
[root@web01 ~]# systemctl start rpcbind
#补充:最小化安装使用showmount命令需要安装 yum -y install nfs-utils
[root@web01 ~]# showmount -e 192.168.10.135 #查看共享目录需带上IP地址
Export list for 192.168.10.1351:
/opt/wwwroot 192.168.10.0/24
[root@web01 ~]# mount 192.168.10.135:/opt/wwwroot /var/www/html #挂载
[root@web01 ~]# tail -1 /etc/mtab #查看挂载目录(mount命令也可以)
[root@web01 ~]# vim /etc/fstab #设置开机自动挂载
#文档末尾添加
192.168.10.135:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0
#_netdev:设备需要网络
[root@web01 ~]# mount -a #将/etc/fstab的所有内容重新加载
5、nfs节点(第五台虚拟机)上传网页数据
[root@nfs ~]# vim /opt/wwwroot/index.html
<h1>Apache test</h1> #添加内容
分别到web站点查看数据,若数据内容相同,则表示数据同步成功
[root@web01 ~]# cat /var/www/html/index.html
<h1>Apache test</h1> #nfs搭建成功
6、浏览器输入192.168.10.200,查看网页
8、在web节点测试访问
[root@web01 ~]# tailf /var/log/httpd/access_log #web01、web02动态查看日志文件
多次刷新网页,可以轮询看到产生的日志
[root@lvs ~]# ipvsadm -ln #lvs(第一台虚拟机)查看负载均衡的分配情况
补充
1、在keepalived高可用集群中,同时出现了两个虚拟VIP地址信息的原因
(1)心跳线出现问题
(2)网卡配置有问题
(3)交换设备有问题
(4)有防火墙软件阻止问题
(5)virtual_router_id配置数值不正确
2、利用shell脚本实现监控VIP管理
把脚本放在从节点上
#!/bin/bash
check_info=$( ip a |grep -c 192.168.10.200) #VIP地址
if [ $check_info -ne 0 ]
then
echo "keepalived server error!!!"
fi