理论部分

Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具

支持故障自动切换(Failover)

支持节点健康状态检查(Health Checking)
官方网站: http://www.keepalived.org/
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点。

一个合格的集群需要满足至少以下三个特点:

1.负载均衡
2.健康检查( 探针) 检查主备服务器的状态,检查后端节点服务器的状态(发送心跳ping/pong,检查tcp端口是否开启,检查http响应状态码),故障则隔离)
3.故障切换 主故障及时自动切换到备机

Keepalived实现原理剖析

VRRP (虚拟路由冗余协议)是针对路由器的一种备份解决方案

由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

1.png
2.png

Keepalived及其工作原理

Keepalived是--个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER) 和备份服务器(BACKUP) 两种角色的服务器,但是对外表现为- - 个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived体系主要模块及其作用:

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

core模块:为keepalived的核心, 负责主进程的启动、维护及全局配置文件的加载和解析。

vrrp模块:是来实现VRRP协议的。

check模块:负责健康检查,常见的方式有端口检查及URL检查。

实验: 构建LVS-keepalived服务器

环境:
192.168.206.0/24
两台调度器:206.100、206.101、102 安装ipvsadm
两台节点服务器:206.102、206.103 安装httpd服务
NFS节点共享服务器(不配了,懒,直接加index.html文件算了)
win7测试验证机:192.168.206.0/24 (任意网段内的不冲突IP)
VIP: 192.168.206.99
默认所有机子关闭防火墙、增强型服务
此外本地yum仓库配置完毕
ps:如果需要跨网段通讯就需要配路由器来当网关(网关服务器)


1、首先是搭建2台节点服务器 206.100、206.102/103
```html/xml
systemctl stop firewalld
setenforce 0
#首先是创建虚拟回环网卡(用于承载VIP)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
...........................
DEVICE=lo:0
IPADDR=192.168.206.99 #VIP
NETMASK=255.255.255.255 #使用32位掩码
ONBOOT=yes
.................................
ifup lo:0
route add -host 192.168.206.99 dev lo:0 #设置临时路由表

#永久添加路由表{开机自动添加路由,生产环境应该用这}
vim /etc/rc.local
route add -host 192.168.206.99 dev lo:0
...............................
/sbin/route add -host 192.168.206.99 dev lo:0
....................................
chmod +x /etc/rc.d/rc.local
route -n #查看路由表

#调整内核的ARP 响应参数以阻止更新 VIP 的MAC 地址,避免发生冲突
vim /etc/sysctl.conf
....................................................
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
.......................................................

#安装阿帕奇服务,并添加文件(启动阿帕奇)
yum install -y httpd

systemctl start httpd

echo 'test web 1 ! ' > /var/www/html/index.html

echo 'test web 2 ! ' > /var/www/html/index.html

![1.png](https://s2.51cto.com/images/20220121/1642770684493651.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![2.png](https://s2.51cto.com/images/20220121/1642770686437785.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![3.png](https://s2.51cto.com/images/20220121/1642770690295470.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![3.1.png](https://s2.51cto.com/images/20220121/1642770695773365.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![4.1.png](https://s2.51cto.com/images/20220121/1642770698946015.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![4.2.png](https://s2.51cto.com/images/20220121/1642770701701708.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![5.png](https://s2.51cto.com/images/20220121/1642770704112580.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![5.1.png](https://s2.51cto.com/images/20220121/1642770707826085.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

2、下面是配置负载调度器
```html/xml
2\配置负载调度器

systemctl stop firewalld

setenforce 0

modprobe ip_vs              #开启IP_vs模块
cat /proc/net/ip_vs         #查看IP_vs模块信息
yum install -y ipvsadm        #ipvsadm管理工具
vim /etc/sysctl.conf
.......................................
net.ipv4.conf.all.send_redirects = 0             #调整proc的响应参数
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
.................................
sysctl -p          #使配置生效

ipvsadm-save > /etc/sysconfig/ipvsadm  #保存IPvsadm策略
systemctl start ipvsadm.service     #开启ipvsadm管理工具

ipvsadm -C             #清空IPvsadm  策略
ipvsadm -A -t 192.168.206.99:80 -s rr
ipvsadm -a -t 192.168.206.99:80 -r 192.168.206.102:80 -g   #-g用的是DR模式
ipvsadm -a -t 192.168.206.99:80 -r 192.168.206.103:80 -g   #-g用的是DR模式
#就是VIP对应节点服务器的真实IP
ipvsadm
ipvsadm -ln    #查看ipvsadm的策略

yum install -y keepalived   #安装keepalived工具
cd /etc/keepalived           #去keepalived目录
cp keepalived.conf keepalived.conf.bak    #备份
vim keepalived.conf
.................................
smtp_server 127.0.0.1   #服务指向回环ip
router_id LVS_01   #主调度,副调度使用LVS_02
#vrrp_strict       # 前面注释了,不然VRRP协议会与keepalive冲突
state MASTER        # 这是主,副请用BACKUP
interface ens33     #指定承载VIP网卡,我的是ens33
virtual_router_id 10  # 虚拟路由器ID号,主副、一致
priority 100          #优先级,我主设置100,副建议90,反正比100小就行
auth_pass 111111       #两个调度器间的验证密码,要都一致

virtual_ipaddress {     #群集vip地址,两台都要设置
192.168.206.99
}

virtual_server 192.168.206.99 80   #设置VIP、端口
delay_loop 6    #健康检查的间隔时间
lb_algo rr  #指定调度算法,rr是轮询
lb_kind DR     #记得选择DR模式,高可用集群是用dr的
persistence_timeout 50     连接保持时间,默认50s

real_server 192.168.206.102  80 {
weight 1            #节点的权重
 TCP_CHECK {
     connect_port 80        #端口
     connect_timeout 3      #连接超时
     nb_get_retry 3     #重连次数
     delay_before_retry 4   #添加重连间隔
    }
}

real_server 192.168.206.103 80 {        #添加第二个 Web节点的地址、端口
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
    }
}
}
#注意,这里有3个"}"哦!!!

#然后把下面的都删了,不留!!

................................
systemctl restart keepalived
ip addr show dev ens33  #查看虚拟网卡是否配置成功

1.png
2.png

3.png
4.png5.png6.png7.1.png7.2.png7.3.png7.4.png
验证:
使用同网段的客机去访问192.168.206.99,然后隔50s后刷新会跳去另外一个节点(会话超时)
验证1.png验证2.png
同时,主调度器206.100关闭keepalived服务,再次用客机去验证,同样可行(此时备用调度机206.101工作)