keepalived安装使用
1. keepalived安装
1.1 官网下载地址.
1.2 安装依赖
yum -y install libnl libnl-devel
1.3 解压,配置,安装
tar -zxvf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
2. keepalived双机主备配置
2.1 配置主节点
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#路由id:当前安装节点的标识符,全局唯一
router_id keep_101
}
# 计算机节点
vrrp_instance VI_1 {
# 当前节点为主节点 MASTER/BACKUP
state MASTER
interface ens33
# 虚拟的路由id,保证主备一致
virtual_router_id 51
# 权重,谁的优先级高,在MASTER挂掉后成为MASTER
priority 100
#主备之前同步检查时间间隔 默认1s
advert_int 1
# 权限主备之间一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟ip
virtual_ipaddress {
192.168.191.99
}
}
启动主节点keepalived
/usr/local/keepalived/sbin/keepalived
看下进程是否启动成功
ps -ef |grep keepalived
2.2 配置备节点
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#路由id:当前安装节点的标识符,全局唯一
router_id keep_102
}
# 计算机节点
vrrp_instance VI_1 {
# 当前节点为主节点 MASTER/BACKUP
state BACKUP
interface ens33
# 虚拟的路由id,保证主备一致
virtual_router_id 51
# 权重,谁的优先级高,在MASTER挂掉后成为MASTER
priority 100
#主备之前同步检查时间间隔 默认1s
advert_int 1
# 权限主备之间一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟ip
virtual_ipaddress {
192.168.191.99
}
}
启动主节点keepalived
/usr/local/keepalived/sbin/keepalived
看下进程是否启动成功
ps -ef |grep keepalived
2.3 查看主备IP地址
ip addr
主节点,本机ip地址:192.168.191.101,虚拟ip :192.168.191.99
备节点,本机ip:192.168.191.102,没有虚拟ip
2.4 验证keepalived虚拟ip切换
将主节点的keepalived的进程杀死,再查看IP地址情况
虚拟ip已经切换到备节点机器,再将主节点机器keepalived程序启动,则虚拟ip会回到主节点机器
3. keepalived双机热备
3.1 主节点配置文件
主节点配置:
global_defs {
router_id keep_171
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.191.99
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.191.98
}
}
3.2 备节点配置文件
备用节点配置
global_defs {
router_id keep_172
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.191.99
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.191.98
}
}
4. 将keepalived 注册为系统服务
cd /opt/soft/keepalived/keepalived-2.0.18/keepalived/etc
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
systemctl daemon-reload
systemctl enable keepalived
5. 配置nginx自动重启
5.1 检查nginx的脚本
vi /etc/keepalived/check_nginx_alive_or_not.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
/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_or_not.sh
5.2 keepalived 的配置文件
! Configuration File for keepalived
global_defs {
#路由id:当前安装节点的标识符,全局唯一
router_id keep_101
}
# 执行的脚本
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行失败,则升级权重+10
}
# 计算机节点
vrrp_instance VI_1 {
# 当前节点为主节点 MASTER/BACKUP
state MASTER
interface ens33
# 虚拟的路由id,保证主备一致
virtual_router_id 51
# 权重,谁的优先级高,在MASTER挂掉后成为master
priority 100
主备之前同步检查时间间隔 默认1s
advert_int 1
# 主备之间一致
authentication {
auth_type PASS
auth_pass 1111
}
# 追踪 nginx 脚本
track_script {
check_nginx_alive
}
#虚拟ip
virtual_ipaddress {
192.168.191.99
}
}
6. 整合fdfs
6.1 安装fdfs和nginx中添加fdfs模块
6.2 修改检查nginx脚本
#!/bin/bash
#查询ngxin进程的数量
ngc=`ps -C nginx --no-header |wc -l`
#nginx的pid所在目录
ngd="/var/run/nginx"
#nginx的pid文件路径
ngp="/var/run/nginx/nginx.pid"
#查询 fdfs_trackerd 进程的数量
fdfsc=`ps -C fdfs_trackerd --no-header |wc -l`
#虚拟机重启会删除/var/run/nginx 这个目录,导致nginx.pid丢失,需要重新创建
#判断nginx的pid所在目录是否存在,不存在则创建
if [[ ! -d "$ngd" ]]; then
echo "nginx的pid目录不存在"
mkdir /var/run/nginx
fi
#判断nginx的pid是否存在,不存在则创建
if [[ ! -f "$ngp" ]]; then
echo "nginx的pid文件不存在"
touch /var/run/nginx/nginx.pid
fi
#nginx集成fdfs后,需要依赖fdfs服务,否则启动nginx会只有master没有worker,无法正常使用
#判断fdfs是否存在,不存在则不执行
if [ $fdfsc -gt 0 ];then
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $ngc -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
else
echo "fdfs_trackerd 服务不存在"
fi