一.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.png
vim /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,使从服务器变为主服务器工作

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png









网友评论