1.实现高可用
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active <--> HEARTBEAT <--> active
2.VRRP
虚拟路由冗余协议,解决静态网关单点风险
通告:心跳,优先级等;
周期性 工作方式:抢占式,非抢占式
安全认证:
无认证 ;简单字符认证:预共享密钥 MD5
工作模式:
主/备:单虚拟路由器 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
3.keepalived部署
3.1简介
基于vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
3.2keepalived架构
checkers:监测real server
system call:实现 vrrp 协议状态转换时调用脚本的功能
vrrp stack:VIP消息通告
SMTP:邮件组件
IPVS wrapper:生成IPVS规则 为LVS准备的套件,挂掉的主机会配提出策略
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
3.3keepalived实验环境配置
准备四台红帽七的虚拟机
两台KA,两台RS
KA1IP:172.25.254.10
KA2IP:172.25.254.20
RS1IP:172.25.254.110
RS2IP:172.25.254.120
在两台RS上安装httpd,并将各自ip写进发布目录,然后测试在kA上是否连接成功
[root@ka1 ~]# curl 172.25.254.120 realserver2-172.25.254.120
4.虚拟路由的配置
4.1基本配置
安装keepalive
yum install keepalived -y
在ka1和ka2中安装keepalived
配置文件:/etc/keepalived/keepalived.conf
配置文件组成
GLOBAL CONFIGURATION
Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
VRRP instance(s): 定义每个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s): LVS集群的VS和RS
4.2全局配置
进入配置文件
vim /etc/keepalived/keepalived.cong
vrrp_strict:强制使用vrrp协议
vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一 个报文是同一 #个路由器,则跳过检查,默认 值为全检查
vrrp_garp_interval 0 #报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #消息发送延迟
vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:
4.3配置虚拟路由
master端
interface eth0 :绑定为当前虚拟路由器使用的物理接口
virtual_router_id 100:每个虚拟路由器惟一标识,范围:0-255,要确认在同一网络中此值必须唯一
priority 100 :当前物理节点在此虚拟路由器的优先级,范围:1-254
advert_int 1 :vrrp通告的时间间隔,默认1s
authentication:认证机制
uth_pass 1111 :预共享密钥
label eth0:1:设定网卡的子接口,一块网卡可以设定很多子接口
backup端
scp /etc/keepalived/keeplived.conf root@172.25.254.20:/etc/keepalived/keeplived.conf
将master端的配置文件复制到backup端,节省时间,但需要进入配置文件中修改角色,以及降低backup的优先级
[root@KA2 ~]# tcpdump -i eth0 -nn host 224.0.0.18#抓包命令查看数据包的传输情况
-i:eth0接收的数据
-nn:不做解析
host:观察哪个ip
4.4虚拟路由的通讯
vip的访问功能默认会禁掉
如果想能ping通需要进入keepalived主配置文件在global_defs中的最后一行加入vrrp_iptables,以及打开vrrp_srtick或者将这两个都禁掉,且这两台KA都需要加
重启服务
iptables -nL会发现丢弃数据策略就没有了
4.5keepalived日志分离
默认情况下keepalived的日志和其他的日志是混在一起的
[root@KA1 ~]# vim /etc/sysconfig/keepalived#编辑这个文件在里面加入KEEPALIVED_OPTIONS="-D -S 6"
重启keepalived
[root@ka1 ~]#vim /etc/rsyslog.conf
此处的local6.*的数字要与在上面编辑文件中的数字保持一致且范围是0-7
重启服务,就会生成日志
4.6独立子配置文件
当生产环境复杂时主配置文件中内容过多,不易管理,我们通过子配置文件将配置文件独立出来,我们需要指定一条路径
进入主配置文件写在global_defs下面
include /etc/keepalived/conf.d/*.conf#相关子配置文件
mkdir -p /etc/keepalived/conf.d
5.非抢占模式和延迟抢占
问题引入:ka1挂掉后vip会移到ka2,当ka1恢复运行会将vip抢回去,这样就会导致vip在ka1和ka2中来回漂移,造成网络抖动
5.1非抢占模式
两台主机都要加非抢占模式,且角色都是backup,优先级不需要修改
重启服务
5.2延迟抢占模式
延迟抢占模式,不会立即将vip抢过去会在指定的时间抢回来
设置抢占时间为5s,两台机子都需要设置抢占时间且都为backup
6.keepalived-vip单播设定
主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
注意:启用 vrrp_strict 时,不能启用单播
进入主配置文件
在那台配置源就写哪台在20上与10上写的时相反的
7.keepalived-邮件通知
安装 yum install mailx -y
7.1.设置邮件代理
进入qq邮箱,进入账号与安全,生成授权码
[root@KA1 ~]# vim /etc/mail.rc #客户端邮件配置文件
#######mail set##########
set from=1551145187@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1551145187@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
KA2中做相同配置
7.2.写一个邮件通知的脚本
vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='1551145187@qq.com'
mail_send()
{
mail_subj="$HOSTNAME to be $1 vip move"//邮件标题
mail_msg="date +%F\ %T
: vrrp 转移,$HOSTNAME 变为 $1"//邮件正文
echo "$mail_mess" | mail -s "$mail_subj" $mail_dest//用echo命令发邮件
}
case $1 in
master)
mail_send master
;;
backup)
mail_send backup
;;
fault)
mail_send fault
;;
*)
exit 1
;;
esac
给脚本执行权限[root@KA1 +KA2 ~]# chmod +x /etc/keepalived/mail.sh
在配置文件写触发命令,两台主机都要写
重启服务
8.keepalived-双主模式
问题引入:单主结构在同一时间只有一台keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低,而双主结构可以解决这一问题,所以西要两个vip
进入ka1的主配置文件加一个配用
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 200
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.200 dev et0 label eth0:2
}
unicast_src_ip 172.25.254.10
unicast_peer{
172.25.254.20
}
}
重启服务
进入ka2的主配置文件加一个主
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 200
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.200 dev et0 label eth0:2
}
unicast_src_ip 172.25.254.20
unicast_peer{
172.25.254.10
}
}
重启服务
9.实现IPVS的高可用
keepalived也可以提供后端检测
LVS-DR模式
在两台rs中加两个ip为100的环回,并且关闭他们的arp请求
如果要永久关闭将其写入vim /etc/sysctl.d/arp.conf中,然后让系统重新识别sysctl --system
在Keepalived中安装ipvsadm软件
yum install ipvsadm -y
进入主配置文件配置两台主机
重启服务
ipvsadm -Ln//查看策略
lvs不提供后端检测,结合keepalived之后当一台挂断后,会自动在策略中将其踢除,当开启后也会自动加回来,此时ka2的策略不生效,因为vip不在ka2
此时如果将ka1关闭,vip会移到ka2上,但客户端不会出现影响,保证客户顺畅的访问
10.vrrp脚本控制VIP
问题引入:如何通过haproxy的状态来完成vip的漂移,解决方案在keepalived中haproxy的状态,如果存活则不动,如果挂了则降低自身优先级来完成vip的漂移
10.1编辑脚本
vim /ect/keepalived/test.sh
[ ! -f /mnt/zee ]
echo $?#查看返回值
chmod +x /ect/keepalived/test.sh#给执行权限
10.2更改主配置文件
11.keepalived+haproxy的高可用
两台主机安装haproxy
yum instaall haproxy -y
在两个ka1和ka2中启用内核参数
[root@rhel7-ka1 & ka2 ~]# vim /etc/sysctl.conf net.ipv4.ip_nonlocal_bind = 1 当本机没有vip时可以做到远程监控,要不然haproxy起不来
[root@rhel7-ka1 & ka2 ~]# sysctl -p
进入haproxy的主配置文件,两台主机都要写
开启haproxy服务
systemctl enable --now haproxy
要关闭这两台rs的环回,以及开启arp响应,以及关闭keeplived的策略,因为keepalived和haproxy的策略不能同时存在
进入keepalived的主配置文件注释掉这些策略
此时haproxy挂掉后,vip没有飘到另一台主机上,于是我们需要通过检测hapoxy的状态来降低haproxy挂掉主机的优先级,使vip飘到另一台主机上
killall -o haproxy#检测haoproxy的状态
将检测命令写入脚本
vim /etc/keepalived/test.sh
#!/bin/bash killall -0 haproxy
进入keepalived主配置文件