一.keepalived介绍
1.keepalived的功能
实现集群服务的高可用性(HA),在实际工作中当lvs调度器发生故障时需要这种机制实现工作的高可用性,就是说当一个调度器出现故障时,可以由另一个服务器继续接管继续工作。
2.常用的高可用集群的实现方案
vrrp:Virtual Router Redundancy Protocol——虚拟路由冗余协议
3.常见的keepalived配置术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全工作: 认证: 无认证 简单字符认证:预共享密钥 MD5
工作模式:
主/备:单虚拟路径器
主/主:主/备(虚拟路径器1),
备/主(虚拟路径器2)
*注意:vrrp协议的软件实现,原生设计目的为了高可用ipvs服务.换句话说该协议软件的实现就是搭配lvs使用,达到高可用的目的,彼此为绝配的关系
双方的搭配模式主要的功能:
vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口通过执行脚本完成脚本中定义的功能, 进而影响集群事务,以此支持nginx、haproxy等服务
4.keepalived的组成
(1)组件:
核心组件: vrrp stack ipvs wrapper checkers
控制组件:配置文件分析器 IO复用器 内存管理组件
二.keepalived的实现
1.HA Cluster 配置准备的准备工作
(1)集群环境的时间同步,也就说各个节点的时间必须相同
使用的服务是ntp和chrony(在7上使用)
首先使用ntpdate 172.18.0.1(假设为互联网时间),与互联网时间同步
上述方法是暂时同步时间,过一段时间后还是会出现差别
然后vim /etc/ntp.conf
image.png
该方法可以实现与互联网时间的实时同步,为了方便直接设置为开机自启chkconfig ntpd on
然后service ntpd start
这样只需要其他服务在ntp.conf或是chrony.conf配置文件中和该主机时间同步即可
image.png
(2)清除各主机之间的防火墙策略和selinux策略,以防影响实验结果
(3)各节点之间以主机名的方式实现互相通讯
在各个节点中设置:
hostname set-hostname node1
image.png
hostname set-hostname node2
image.png
然后在/etc/hosts文件中写下对方的主机名,实现解析通讯
image.png
image.png
(4)实现基于Key的ssh服务验证,相互信任,防止黑客的干扰
实现方法:
执行ssh-keygen命令会生成
image.png
ssh-copy -i id_rsa.pub node2:
image.png
三.keepalived的具体应用
1.实现简单的主备工作模式
拓扑结构图
image.png
(1)yum install keepalived
vim /etc/keepalived/keepalived.conf
image.png
在另一主机上,设置为主服务器,将配置文件中的优先级调为100,比备用主机数值大即可,state为MASTER
其他不变
配置完成,可以通过tcpdump -i eth0 -nn host 224.99.99.62来测试效果
image.png
此时的虚拟vip地址也被绑定在主服务器上,备用服务器没有该地址
image.png
此时即使将备服务器的keepalived开启也无法工作,因为它的优先级小于主服务器,所以无法参与工作。但是此时如果将主服务关掉,那么备用服务器会开始工作
image.png
此时虚拟vip也切换到备用服务器上
image.png
主从模式配置成功
记录日志
vim /etc/sysconfig/keepalived
image.pngvim /etc/rsyslog.conf
image.png
设置完成后,重启日志服务和keepalived
查看日志 ll /var/log/keepalived.log
image.png- mail设置
通过mail设置可以实现rs服务器的上线下线通知功能,并且通过触发脚本来实现主备的切换
具体实现:
在 /etc/keepalived/下编写notify.sh通知脚本
1 #!/bin/bash
2 #
3 contact='root@localhost'
4 notify() {
5 mailsubject="$(hostname) to be $1, vip floating"
6 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
7 echo "$mailbody" | mail -s "$mailsubject" $contact
8 }
9 case $1 in
10 master)
11 notify master
12 ;;
13 backup)
14 notify backup
15 ;;
16 fault)
17 notify fault
18 ;;
19 *)
20 echo "Usage: $(basename $0) {master|backup|fault}"
21 exit 1
22 ;;
23 esac
写完后执行 ./notify master 观察mail
image.png
./notify backup
image.png
因此在keepalived.conf加入出发脚本
image.png
主要功能就是通过邮件进行通知主服务器与备用服务器的切换,当之前的主服务出现故障后,配置文件会触发通知脚本告知另一个备用服务器变为主服务器
- 注意在备用服务器上也要进行相同的设置
2.实现主主模式
image.png
解释:
针对route_id为80,虚拟vip为192.168.136.62这个地址,node1位master,node2为backup
针对route_id为70,虚拟vip为192.168.136.63这个地址,node1为backup,node2为master
总体来说仍然是主备模式,只是针对不同的vip地址而定义了相对的主主模式
- 具体实现步骤:
vim /etc/keepalived/keepalived.conf
再写一个实例
vrrp_instance VI_2 {
state BACKUP——由原来的MASTER变为BACKUP
interface eth0
virtual_router_id 70——设置一个新的id号
priority 90——优先级要变低
advert_int 1
authentication {
auth_type PASS
auth_pass 6ceadb21——设置新的密码
}
virtual_ipaddress {
192.168.136.63/24——配置新的vip地址
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
在备用服务器上设置同样内容
vrrp_instance VI_2 {
state MASTER——由原来的BACKUP变为MASTER
interface ens33
virtual_router_id 70——设置一个新的id号
priority 100——优先级要变高
advert_int 1
authentication {
auth_type PASS
auth_pass 6ceadb21——设置新的密码
}
virtual_ipaddress {
192.168.136.63/24——配置新的vip地址
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
配置完成后进行测试
image.png
3.结合后端RS服务器的高可用性的实现(与Lvs的结合应用)
(1)结合ipvs的主从服务调度(DR调度模式)
拓扑图 基于结合lvs的主从模式的高可用的工作模式
image.png
(2)在rs服务器端上执行lvs脚本
image.png
(3)在主备服务器上设置keepalived.conf脚本
image.png
image.png
将该脚本复制到另一个备用服务器上
scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf
配置完成后,重启服务查看是否具有ipvs规则
ipvsadm -Ln
image.png
在备用服务器上同样具有ipvs规则
image.png
配置成功
(4)在客户端上进行访问,测试结果
image.png
结果正确
(5)测试如果主服务器出现故障,在客户端进行测试,观察结果
image.png
利用tcpdump命令查看主从是否切换
image.png
(6)健康性检查的测试,当其中的一个RS服务器故障后,在客户端测试观察结果
image.png
4.实现主主模式的集群调度
调度拓扑图
image.png正常情况下lvs2应该选择新的另外两个服务器进行测试,并且后面的也要建立两个新的rs服务器,但是本实验为了节省资源就都在同样的两台机上做实验,实现互为主从的调度实验
设置两个vip
vip1:192.168.136.62
vip2:192.168.136.63
当访问vip1时170为主
当访问vip2时183为主
实验目的明确,接下来实现具体的配置步骤
(1)首先在各自的rs服务器上执行lvsj脚本
image.png
执行脚本后观察
image.png
(2)vim /etc/httpd/conf/httpd.conf在rs服务器上设置虚拟主机
image.png
ip a a 192.168.136.133 dev eth0
mkdir /app/web1
mkdir /app/web2
echo images 134 > /app/web1/index.html
echo app 133 > /app/web2/index.html
(3)在lvs调度器上
vim /ect/keepalived/keepalived.conf
image.png
另一个同上
配置完后,重启服务观察ipvs
image.png
(4)在rs服务器端上测试
image.png
显示成功,但是在客户端去测试无法正确显示,因此建议不要在统同一主机配置
(5)一个vip只往一个rs服务器端上调度
image.png
减少服务器数量
只要访问63就往173上调度
只要访问62就往134上调度
5.实现keepalived的nginx的高可用集群调度
(1)在keepalived的配置文件中配置脚本
image.png
image.png
(2)另一台调度器执行相同操作
该脚本的含义是:先设置脚本,然后对脚本进行检查,如果判断出down文件存在,就将优先级高的调度器的数值减少20,使另一个调度器优先级变高成为主服务器,进行继续的工作。当down文件删除后,又恢复原来的主备模式
(3)对脚本进行测试
image.png
在/etc/keepalived/下创建一个down文件
就会实现主从切换
image.png
删除down文件后又重新恢复
image.png
(4)对此可以使用脚本来实现nginx的高可用集群调度
在/etc/nginx/nginx.conf中进行配置
image.png
image.png
开启了反向代理功能
关闭httpd 服务打开nginx服务
(5)对nginx服务做健康性检查,在keepalived.conf的脚本中进行设置
image.png
image.png
另一个调度器同上
(6)关闭keepalived服务,使用tcpdump命令测试,先开启一个keepalived服务
image.png
(7)另一个也开启,并杀死之前的keepalived服务
image.png
显示正确,主服务器减少20,使从服务器变为主服务器工作
网友评论