LVS-Keepalived集群
Posted kiroct
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS-Keepalived集群相关的知识,希望对你有一定的参考价值。
理论部分
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地址,继续提供服务
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 #查看虚拟网卡是否配置成功
验证:
使用同网段的客机去访问192.168.206.99,然后隔50s后刷新会跳去另外一个节点(会话超时)
同时,主调度器206.100关闭keepalived服务,再次用客机去验证,同样可行(此时备用调度机206.101工作)
以上是关于LVS-Keepalived集群的主要内容,如果未能解决你的问题,请参考以下文章