Keepalived原理与实战
编辑高可用集群架构 Keepalived 双机主备原理
Nginx高可用HA(High Availability):当主节点故障,备用机充当主节点,用户请求会访问到nginx备用机,但是同一个时刻只有一个节点提供服务
Keepalived
- 解决单点故障
- 组件免费
- 可以实现高可用HA机制
- 基于VRRP协议
虚拟路由冗余协议VRRP:协议全称Virtual Router Redundancy Protocol
,是用于解决内网单机故障的路由协议,构建有多个路由器MASTER-BACKUP ,虚拟IP-VIP(virtual ip address)
Keepalived双机主备原理
主节点会定时向备用机发送心跳,当备用机没有收到心跳说明主节点故障,那么此时Nginx备用机会绑定到虚拟IP,切换到备用Nginx节点提供服务,当主节点恢复正常,那么会重新接管备用机的任务对外提供服务
注意主备的主机硬件配置需要一样,不然当主nginx异常备用机无法负载会影响正常提供服务;
安装 keepalived
-
下载keepalived 官方地址
-
上传到服务器
-
解压
tar -zxvf keepalived-2.0.18.tar.gz
; -
解压后进入到解压出来的目录,看到会有configure,那么就可以做配置了(配置安装和nginx一模一样)
-
使用configure命令配置安装目录与核心配置文件所在位置:
./configure --prefix=/usr/local/keepalived --sysconf=/etc
- prefix:keepalived安装的位置
- sysconf:keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,/var/log/messages中会报错
5.1 配置过程中可能会出现警告信息,如下所示:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
5.2 安装libnl/libnl-3依赖 yum -y install libnl libnl-devel
5.3 重新configure一下,此时OK。
6. 安装keepalived make && make install
**7.**进入到/etc/keepalived
,该目录下为keepalived核心配置文件
如果忘记安装配置的目录,则通过如下命令找到:
Keepalived 核心配置文件- keepalived.conf
核心配置文件在/etc/keepalived/keepalived.conf
配置keepalived-主节点
双机主备原理:
两台配置相同的主机,分别配置Nginx主备和keepalive主备,在keepalive主节点异常关闭的时候,则虚拟IP绑定到备用keepalive节点通过备用Nginx对外提供服务,如果keepalive检测脚本检测到nginx异常关闭,则脚本尝试重新启动Nginx,如果启动失败,则关闭keepalive主节点,备用节点生效;
1. 编辑主配置文件 vim keepalived.conf
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_dev
}
vrrp_instance VI_1 {
# 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡
interface eth0
# 保证主备节点一致即可
virtual_router_id 66
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒
advert_int 2
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.43.111
#192.168.43.112
}
}
- 查看网卡名称:
2. 启动 Keepalived
在sbin目录中进行启动(同nginx),然后检查进程是否启动成功ps -ef|grep keepalived
3. 查看vip
在keepalived启动成功之后,在网卡eth0
下,多了一个192.168.43.111,这个就是虚拟ip
把Keepalived 注册为系统服务
重新加载keepalies配置文件:需要先关闭再启动
但是,这种方式不太好,操作麻烦且太过粗暴不够优雅,可以将keepalived注册为系统服务
1. 打开keepalived解压目录,进入如下子目录 cd /home/parallels/Desktop/keepalived-2.0.20/keepalived/etc/
,目录结构如下:
2. 执行如下操作将配置文件导入系统服务配置目录,如果已经存在直接覆盖即可
[root@localhost etc]# cp init.d/keepalived /etc/init.d/
[root@localhost etc]# cp sysconfig/keepalived /etc/sysconfig/
3. 重新刷新一下系统服务配置 systemctl daemon-reload
完成上述操作即可通过系统服务命令管理keepalived服务了
systemctl start|stop|restart|status keepalivied.service
service keepalived status|start|stop|restart|reload
Keepalived实现双机主备高可用
一.在备用机上安装keepalived然后如下配置
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一,和主节点一致
router_id keep_dev
}
vrrp_instance VI_1 {
# 备用机设置为BACKUP
state BACKUP
# 该实例绑定的网卡
interface eth0
# 保证主备节点一致即可
virtual_router_id 66
# 备用机权重要低于MASTER
priority 80
# 主备之间同步检查时间间隔,单位秒,这个要和主节点一致,实际部署过程中发现:主节点为2,备用为1无法实现切换
advert_int 2
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.43.111
#192.168.43.112
}
}
二.启动keepalivied
# 启动keepalived
systemctl start keepalived
# 停止keepalived
systemctl stop keepalived
# 重启keepalived
systemctl restart keepalived
三.查看进程
ps -ef|grep keepalived
四.测试主备切换
- 当主备节点的keepalived都启动之后,正常情况下虚拟ip绑定在主节点
- 此时模拟主节点异常退出,在主keepalived节点所在主机执行
systemctl stop keepalived
- 此时通过浏览器访问虚拟ip或者虚拟ip绑定的虚拟域名
www.vip.com
会访问到备用节点 - 通过
ip addr
查看备用机ip信息,会发现虚拟ip绑定到了备用节点;
Keepalived配置Nginx自动重启,实现7x24不间断服务
一.增加Nginx重启检测脚本vim /etc/keepalived/check_nginx_alive.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
#重新启动nginx
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
- 增加运行权限
chmod +x /etc/keepalived/check_nginx_alive.sh
二.配置keepalived监听nginx脚本
global_defs {
...
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行成功,则升级权重+10
# weight -10 # 如果脚本运行失败,则升级权重-10
}
vrrp_instance VI_1 {...}
三.在vrrp_instance中新增监控的脚本
global_defs {
...
}
vrrp_script check_nginx_alive {
...
}
vrrp_instance VI_1 {
...
track_script {
# 追踪 nginx 脚本
check_nginx_alive
}
}
四.重启Keepalived使得配置文件生效
systemctl restart keepalived
高可用集群架构 Keepalived 双主热备原理
鉴于双机主备会存在很严重的资源浪费问题,因为正常情况下只有一台服务器对外提供服务,另一台配置需要相同,但是却长期闲置;所以需要充分利用硬件资源,用到让两台主机互为主备的双主热备方案
云服务的DNS解析配置与负载均衡
首先添加域名解析,主机记录为www
,记录类型为A
,分别解析到不同的主机下面,并且设置负载均衡的策略,这样通过DNS服务器按照设置的负载均衡策略解析到对应的的ip,访问服务器的内容然后响应给客户端
实现keepalived双主热备
规则:以一个虚拟ip分组归为同一个路由,virtual_router_id
需要主备一致
global_defs {
router_id keep_dev1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.111
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 80
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.112
}
}
备用节点配置
global_defs {
router_id keep_dev2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 80
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.111
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 77
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.112
}
}
分别重启两条Keepalived
systemctl restart keepalived
测试双主热备
- 因为局域网下无法配置dns服务器,所以只有通过虚拟主机访问,两个虚拟IP分别对应
www.vip.com
和www.vip2.com
,直接访问分别可以访问到两个路由的主nginx; - 关闭第一台主机(对应nginx1和keepalived1)的keepalived服务,
service keepalived stop
- 通过
ip addr
命令查看另一台主机(对应Nginx2和keepalived2)的IP的信息,发现两个虚拟ip都绑定到了另一台主机的网卡上,此时,通过该两个虚拟ip都会访问到第二台主机
注意:需要各个节点内网互通,先测试单节点的Nginx服务,然后再添加到集群环境启动keepalived服务,另外,需要注意如果设置了开机自启防火墙,重启主机之后需要关闭防火墙或者添加防火墙规则,不然虚拟ip无法访问;
- 0
- 0
-
分享