文章目录
一、 Keepalived 工具介绍
- 专为 LVS 和 HA 设计的一款健康检查工具
- 支持故障自动切换( Failover )
- 支持节点健康状态检查( Health Checking )
- 官方网站:http://www.keepalived.org/
1.1 Keepalived
一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以解决静态路由出现的单点故障问题。
一个 LVS 服务器集群中通常有主服务器( Master )和备用服务器( Backup )两种角色的服务器,但对外表现为一个虚拟 IP ,主服务器会发送 VRRP 通告信息给备份服务器,当备份服务器收不到 VRRP 消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟 IP ,继续提供服务,从而保证了高可用性。
1.2 Keepalived 体系主要模块及其作用
- Keepalived 体系架构中主要有三个模块,分别是
core
、check
和vrrp
。- core 模块:为 keepalived 的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp 模块:是来实现 VRRP 协议的。
- check 模块:负责健康检查,常见的方式有端口检查及 URL 检查。
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
1.3 群集要满足的三个特点
- 负载均衡
- 健康检查
- 故障切换
对于节点服务器:健康检查如果发现有故障的节点就会其隔离或者剔除集群,待其恢复后再重新加入的群集当中
负载均衡器:健康检查会定时检查主机的状态(包括主机和服务的状态),如果出故障就会自动切换到备用主机上
待主的恢复重新让主承载业务请求
二、 Keepalived 原理剖析
2.1 VRRP (虚拟路由冗余协议)
-
针对路由器的一种备份解决方案
-
由多台路由器组成一个热备组,通过共用的虚拟 IP 地址对外提供服务。
-
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态。
-
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟 IP 地址,继续提供服务。
vrrp 会把多台路由组成一个虚拟路由组 vrid,VRRP 会生成一个虚拟路由(包含虚拟IP和虚拟 MAC,在局域网内,用户不关心哪一个是主,哪一个是备;他们只用虚拟路由器的虚拟IP作为他们的网关)。 实际上虚拟IP是承载在 master 路由器,也就是说实际的数据通过 master 进行转发。 backup 是通过优先级来决定哪一个是Master 路由,优先级最大的那台就是master。 backup 只是用来监听 master 定时发来的 vrrp 报文,如果超时未收到 master 发来的 vrrp 报文,backup 就会抢占 master 虚拟 IP 也会一起飘移到 backup 上。
三、 配置 Keepalived master 服务器
- Keepalived 可实现多机热备,每个热备可有多台服务器。
- 双机热备的故障切换是由虚拟P地址的漂移来实现,适用于各种应用服务器。
- Keepalived 配置目录位于 /etc/keeplived/
3.1 keepalived.conf 是主配置文件
- global_defs{…} 区段指定全局参数
- vrrp_instance 实例名称 {…} 区段指定 VRRP 热备参数
- 注释文字以“ ! ” 符号开头
- 目录 samples,提供了许多配置样例作为参数
3.1.1 常用配置选项
配置 | 说明 |
---|---|
router_id HA_TEST_R1 | 本路由器(服务器)的名称 |
vrrp_instance VI_1 | 定义 VRRP 热备实例 |
state MASTER | 热备状态,MASTER 表示主服务器 |
interface ens33 | 承载 VIP 地址的物理接口 |
virtual_router_id 1 | 虚拟路由器的 ID 号,每个热备组保持一致 |
3.2 Keepalived备份服务器的配置与master的配置有三个选项不同
router_id:设为自有名称
state:设为BACKUP
priority:值低于主服务器
其他选项与master相同
3.3 测试双机热备的效果
router_id:设为自有名称
state:设为BACKUP
priority:值低于主服务器
四、搭建 LVS+Keepalived 高可用群集
主 DR 服务器:ens33(192.168.10.13)ipvsadm、keepalived(热备)
备 DR 服务器:ens33(192.168.10.14)ipvsadm、keepalived
Web 服务器1:192.168.10.15
Web 服务器2:192.168.10.16
lo:0(VIP):192.168.10.100
VIP:192.168.10.188
客户端:192.168.10.17
4.1 配置负载调度器(主 DR :192.168.10.13)
配置Keepalived master服务器
1. 关闭防火墙
systemctl stop firewalld.service
setenforce 0
systemctl enable firewalld.service
2. 安装服务
yum -y install ipvsadm keepalived
3. 修改配置文件keeplived.conf
cd /etc/keepalived/
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
}
vrrp_instance VI_1 { ——定义VRRP热备实例参数
20行——修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
21行——修改,指定承载vip地址的物理接口
interface ens33
22行——修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
23行——修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 100
advert_int 1 ——通告间隔秒数(心跳频率)
authentication { ——定义认证信息,每个热备组保持一致
auth_type PASS ——认证类型
priority 100
advert_int 1
authentication {
auth_type PASS
27行——修改,指定验证密码,主备服务器保持一致
auth_pass 123123
}
virtual_ipaddress { ——指定群集vip地址
192.168.10.200
}
}
36行——修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.10.200 80 {
delay_loop 6 ——健康检查的间隔时间(秒)
lb_algo rr ——指定调度算法,轮询(rr)
virtual_server 192.168.10.200 80 {
delay_loop 6
lb_algo rr
39行——修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 0 ——连接保持时间(秒)
protocol TCP ——应用服务采用的是 TCP协议
lb_kind DR
persistence_timeout 0
protocol TCP
43行——修改,指定第一个Web节点的地址、端口
real_server 192.168.10.12 80 {
weight 1 ——节点的权重
real_server 192.168.10.12 80 {
weight 1
45行——删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 ——添加检查的目标端口
connect_timeout 3 ——添加连接超时(秒)
nb_get_retry 3 ——添加重试次数
delay_before_retry 3 ——添加重试间隔
}
}
real_server 192.168.10.17 80 { ——添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
删除后面多余的配置
4. 配置虚拟ip
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
IPADDR=192.168.10.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
systemctl restart network
5. 启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
6. 调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
7. 刷新一下
sysctl -p
配置ipvsadm
8. 配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
9. 清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.10.200:80 -s rr
ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.12:80 -g
ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.17:80 -g
10. 保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
- 关闭防火墙
-
安装服务
-
备份及修改配置文件