目录
[(3)HTTP URL检查](#(3)HTTP URL检查)
[(7)调整 proc 响应参数](#(7)调整 proc 响应参数)
一、概述
(一)群集特性
一个合格的集群应该具备的特性:
1.负载均衡
LVS Nginx HAProxy F5等
2.健康检查(探针)
for调度器/节点服务器 Keepalived Heartbeat
3.故障转移
通过VIP漂移实现主备切换
(二)Keepalived
专为LVS和HA设计的健康检测工具
1.作用
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
(1)支持故障自动转移
(2)支持节点健康状态检查
2.工作原理
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
3.Keepalived体系主要模块及其作用
keepalived体系架构中主要有三个模块,分别是core、check和vrrp
(1)core模块
为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
(2)check模块
负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
(3)vrrp模块
是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
4.健康检查(探针)的方式
(1)发送心跳消息
(2)TCP端口检查
向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查探测成功,否则认为健康检查探测失败
(3)HTTP URL检查
向目标主机的 http://IP:PORT/URL路径 发送 HTTP GET 请求方法,如果响应消息是2XX 3XX状态码则认为健康检查探测成功
(三)脑裂故障
1.现象
主服务器和备服务器同时拥有VIP
2.原因
因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP通告消息,备服务器误认为主服务器故障了并通过IP命令生成VIP
3.解决
关闭主服务器或备服务器其中一个的keepalived服务
4.预防方法
(1)主服务器和备服务器之间添加双链路通信
(2)在主服务器上添加脚本进行判断与备服务器通信链路是否中断,如果确实是链路中断则自行关闭keepalived服务
(3)利用第三方应用或监控系统检测是否发送脑裂故障,如果发送脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务
(四)keepalived的抢占与非抢占模式
1.抢占模式
MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。
2.非抢占模式
MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
3.注意点
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。
二、部署LVS+Keepalived
(一)部署负载调度服务器
1.部署主keepalived服务器
(1)关闭防火墙和安全机制
bash
systemctl stop firewalld
#关闭防火墙
setenforce 0
#关闭安全机制
(2)安装服务
bash
yum install ipvsadm keepalived -y
(3)修改配置文件
bash
cd /etc/keepalived/
#切换目录
cp keepalived.conf keepalived.conf.bak
#备份keepalived.conf并改名为keepalived.conf.bak
vim keepalived.conf
#修改配置文件
bash
......
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 51
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 1111
}
virtual_ipaddress { #指定群集vip地址
192.168.233.200
(4)启动服务、查看虚拟网卡vip
bash
systemctl start keepalived
#开启服务
(5)调整proc响应参数
关闭Linux内核的重定向参数响应
bash
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
#关闭Linux内核的重定向参数响应
(6)刷新
bash
sysctl -p
#刷新
2.部署备keepalived服务器
备keepalived服务器与主keepalived服务器部署一致不再赘述
(二)部署节点服务器
1.部署web服务器1
(1)关闭防火墙和安全机制
bash
systemctl stop firewalld
#关闭防火墙
setenforce 0
#关闭安全机制
(2)安装并开启服务
bash
yum -y install httpd
systemctl start httpd
(3)配置站点文件
bash
echo 'this is web01 page!' > /var/www/html/index.html
#web1节点服务器的站点文件
echo 'this is web02 page!' > /var/www/html/index.html
#web2节点服务器的站点文件
(4)配置虚拟vip
bash
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.233.200
NETMASK=255.255.255.255
(5)重启网络服务,开启虚拟网卡
bash
systemctl restart network
#重启网络
ifup lo:0
ifconfig lo:0
#开启虚拟网卡
(6)设置路由
bash
route add -host 192.168.80.188 dev lo:0
(7)调整 proc 响应参数
bash
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
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
(8)刷新
bash
sysctl -p
2.部署web服务器2
web服务器2的部署与web服务器1一致,不再赘述
(三)客户机测试
1.客户机访问测试
2.主keepalived服务器
此时VIP在主服务器上
3.备keepalived服务器
此时VIP不在备服务器上
3.断开主keepalived服务器
此时VIP不在主服务器上
bash
systemctl stop keepalived.service
#关闭主服务器