1.keepalived工作原理
-
Keepalived 是一个基于VRRP协议来实现的IVS服务高可用方案,可以解决静态路由出现的单点故障问题。
-
判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。
1.1一个合格的集群应该具备几种特征
- 负载均衡 使用lvs、nginx、haproxy、f5来实现
- 健康检查 使用调度器和节点服务器 keepalived、heartbeat实现
- 故障转移 实现高可用的主备切换
1.2keepalived的原理解析
- 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

1.3 keepalived体系中的主要模块
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
- check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
1.4 keepalived的抢占与非抢占模式
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup,且必须配置nopreempt。 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。
2.脑裂现象
2.1产生的现象
主服务器和备服务器同时拥有vip地址
2.2脑裂的原因
因为主服务器和备服务器之间的通信链路中断,导致备服务器无法正常收到主服务器发送的vrrp心跳报文。
2.3 脑裂的解决
关闭主服务器或者备服务器其中一个的keepalived服务
2.4 脑裂的预防
1)主服务器与备服务器之间添加双通信链路
2)在主服务器上定义运行脚本判断与备服务器通信链路是否中断,如果中断则自行关闭keepalived服务
3)利用第三方监控软件检测是否发生脑裂故障,如果发生则通过监控软件关闭主或者备服务器上的keepalived服务
3.lvs与keepalived部署的具体操作
1.先设置两个节点nginx服务器的文件共享


2.配置/etc/sysctl 文件,设置arp协议的配置
ini
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

3.配置虚拟网卡设置vip路径,两台节点服务器都要设置
ini
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.223.200
#vip的ip地址
NETMASK=255.255.255.255

4.添加路由信息,并检查是否有路由信息

5.去我们的两台调度器上安装ipvsadm与keepalived软件,并启动他们


6.加载lvs模块

7.修改keepalived的配置文件之前先备份

8.之后去修改keepalived配置文件

9.重启keepalived 再用ipvsadm -ln去检查lvs是否设置完成

10.将主的keepalived的配置文件发送给自己的备配置文件

11.去修改备服务器上面的配置,这边默认抢占模式

12.启动ipvsadm和keepalived并查看lvs是否配置完毕

13.设置关闭两台调度器的重定向内核参数
ini
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

14.去浏览器测试是否可以运行


15.测试当主调度器时,备调度器是否可以正常运行,先将主服务器的关机,查看备服务器是否成功获取vip地址


16.再去浏览器中查看是否可以正常查看


4.nginx与keepalived的联动部署
4.1 操作内容
使用7-3为nginx高可用主服务器7-4为nginx备服务器与keepalived联动实现高可用服务,7-1与7-2为nginx节点服务器
4.2具体操作
1.先在7-3与7-4上面安装nginx并开启


2.之后直接去修改nginx的配置文件,布置四层代理
ini
stream {
upstream backend {
server 192.168.223.101:80;
server 192.168.223.102:80;
}
server {
listen 8080;
proxy_pass backend;
}
}

3.去浏览器上检测一下自己的四层代理是否没有问题,再去做下面的操作


4.将我配置好的nginx配置文件传输给我的备服务器

5.使用7-4的ip地址加端口号测试是否也能打开页面

6.将这两台服务器安装keepalived软件做高可用,首先我们要写一个脚本来判断nginx是否正常启动,如果没有正常启动则立刻关闭keepalived服务,防止主备之间发生脑裂状况,并给脚本加上执行权限
bash
#!/bin/bash
if ! killall -0 nginx
#表示如果nginx没有在启动则启用下面的命令
then
systemctl stop keepalived
关闭keepalived
fi

7.测试一下脚本是否有用,可以先将keepalived和nginx都打开,然后关闭nginx,再启动脚本,查看keepalived是否关闭

8.修改keepalived的配置文件
perl
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 acassen@firewall.loc
6 failover@firewall.loc
7 sysadmin@firewall.loc
8 }
9 notification_email_from Alexandre.Cassen@firewall.loc
10 smtp_server 127.0.0.1
#这边改成回环网卡地址
11 smtp_connect_timeout 30
12 router_id NGINX_01
#这里修改成nginx_01
13 }
14 vrrp_script check_nginx {
#添加一个脚本
script "/etc/keepalived/check_nginx.sh"
#脚本路径
interval 2
#监视次数
weight 2
#设置权重
}
15 vrrp_instance VI_1 {
16 state MASTER
17 interface ens33
#修改成自己的网卡名
18 virtual_router_id 51
19 priority 100
20 advert_int 1
21 authentication {
22 auth_type PASS
23 auth_pass 1111
24 }
25 virtual_ipaddress {
26 192.168.223.200
#改成自己设置的vip地址
27 }
track_script {
#设置执行脚本
check_nginx
}
28 }
#删除下面其他没用的东西

9.将配置文件和脚本文件一起传送给备服务器

10.配置备服务器的keepalived配置

11.使用ip a命令去查看自己设置的vip地址是否成功

12.使用浏览器去测试是否成功,ip与端口号使用我们刚才设置的192.168.223.200:8080


13.测试当主服务器的nginx关闭时 ,备服务器是否能顶上

