准备两台linux服务器 例:主:192.168.1.17 备:192.168.1.18 虚拟ip:192.168.1.101 安装配置 nginx 的略过不提,有需要请查阅 nginx 相关文档
1.准备 keepalived的安装环境 安装keepalived
1.1、安装popt 上传keepalived-1.1.20.tar.gz、daemon-0.6.4.tar.gz和 popt_1.18.orig.tar.gz
解压压缩文件
# tar -zxvf popt_1.18.orig.tar.gz
进入目录
# cd popt-1.18/
离线安装
# ./configure
# make && make install
1.2、安装daemon-0.6.4.tar
解压压缩文件
# tar -zxvf daemon-0.6.4.tar.gz
# cd daemon-0.6.4
# ./configure
# make && make install
1.3、安装 keepalived
解压压缩文件
# tar -zxvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20/
# ./configure --prefix=/usr/local/keepalived --sysconf=/etc
# make && make install
1.4、查看是否安装成功 查看版本号
# keepalived -v
1.5、配置环境、启动脚本等
# 将keepalived主程序加入到环境变量(安装目录下)
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
# 去keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
# cp /root/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
# 如果/usr/local/sbin/已存在可以忽略
# cp /usr/local/keepalived/sbin/keepalived /usr/local/sbin/
查看/etc/rc.d/init.d/functions文件和文件夹是否存在 没有的话创建这个路径和文件夹 运行下面指令 否则启动时会出错
# ln -s /lib/lsb/init-functions /etc/rc.d/init.d/functions
1.6 查看启动文件配置 修改配置文件为具体路径 避免启动出错
# 查看启动配置
vim /etc/sysconfig/keepalived
# 注释掉原有的 KEEPALIVED_OPTIONS="-D"
#KEEPALIVED_OPTIONS="-D"
# 添加 配置文件路径
KEEPALIVED_OPTIONS="-f /etc/keepalived/keepalived.conf.sample -D -d -S 0"
1.7 keepalived 启动日志路径
# 常用Liunx环境下
# tail -555f /var/log/messages
# 银河麒麟国产环境下
# tail -555f /var/log/syslog
2.keepalived 常用指令
# 启动
# systemctl start keepalived.service
# 停止
# systemctl stop keepalived.service
# 状态
# systemctl status keepalived.service
到此可以启动一下 查看状态是否可以启动成功
3. keepalived 配置文件
1.打开配置文件路径 修改配置
# /etc/keepalived/keepalived.conf
2.主 192.168.1.17 配置文件
# 可直接复制替换所有内容
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
# nginx 监听脚本 如果nginx 挂掉 会停止 当前服务器的 keepalived 切换到另一台服务器
vrrp_script chk_nginx{
script "/etc/keepalived/nginx_check.sh"# 执行脚本所在的位置
interval 2 # 检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
weight 2
}
vrrp_instance VI_1 { # 定义一个实例
state MASTER # 主服务 必须要是 MASTER
interface eth0 # 指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。 改为自己本地IP 所用的 网口 # ip addr 来查看网口
virtual_router_id 101 # 虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。
priority 100 # 指定这个实例优先级 主备值差不要超过 10
# unicast_src_ip 192.168.1.17 # 配置单播的源地址
# unicast_peer {
# 192.168.1.18 # 配置单播的目标地址
# }
advert_int 1 # 心跳报文发送间隔
authentication {
auth_type PASS # 设置验证类型,主要有PASS和AH两种
auth_pass test123 # 设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
}
virtual_ipaddress { # 设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.1.101 # 自定义的 虚拟ip VIP 也是测试时需要访问的ip
}
track_script {
chk_nginx
}
}
3.备 192.168.1.18 配置文件
# 可直接复制替换所有内容
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL2
}
# nginx 监听脚本 如果nginx 挂掉 会停止 当前服务器的 keepalived 切换到另一台服务器
vrrp_script chk_nginx{
script "/etc/keepalived/nginx_check.sh"# 执行脚本所在的位置
interval 2 # 检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
weight 2
}
vrrp_instance VI_1 { # 定义一个实例
state BACKUP # 备服务 必须要是 BACKUP
interface eth0 # 指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。 改为自己本地IP 所用的 网口
virtual_router_id 101 # 虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。
priority 90 # 指定这个实例优先级 主备值差不要超过 10
# unicast_src_ip 192.168.1.18 # 配置单播的源地址
# unicast_peer {
# 192.168.1.17 # 配置单播的目标地址
# }
advert_int 1 # 心跳报文发送间隔
authentication {
auth_type PASS # 设置验证类型,主要有PASS和AH两种
auth_pass test123 # 设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
}
virtual_ipaddress { # 设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.1.101 # 自定义的 虚拟ip VIP 也是测试时需要访问的ip
}
track_script {
chk_nginx
}
}
4.nginx_check.sh 脚本文件
# 在/etc/keepalived/路径下创建 nginx_check.sh 文件
# 加入以下内容
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #Nginx启动命令的位置
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
4.启动 keepalived 服务
1.启动主服务器keepalived 服务
# 打开启动日志
# tail -555f /var/log/messages
# systemctl start keepalived
# 出现以下内容
Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on enp11s0 for 192.168.109.101
# Entering MASTER STATE 代表以 主服务器 启动
# 执行 ip addr 查看是否生成 虚拟ip
# 如果 **有** 自定义的 VIP 虚拟ip 代表配置成功
# ip addr
inet 192.168.1.101/32 scope global enp11s0
2.启动备服务器keepalived 服务
# 打开启动日志
# tail -555f /var/log/messages
# systemctl start keepalived
# 出现以下内容
Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
# Entering BACKUP STATE 代表以 备服务器 启动
# 执行 ip addr 查看是否生成 虚拟ip
# 如果 **没有** 自定义的 VIP 虚拟ip 代表配置成功
inet 192.168.1.101/32 scope global enp11s0
5.测试 keepalived 主备 切换
# 执行 主服务 keepalivde 的停止命令
# systemctl stop keepalived
# 查看 17 主服务的 192.168.1.101 是否还存在
# ip addr
# 如果 inet 192.168.1.101/32 scope global enp11s0 不存在 为正常
# 查看 18 备服务器 192.168.1.101 是否存在
# ip addr
# 如果 inet 192.168.1.101/32 scope global enp11s0 存在 标识切换成功
# 也可以查看 18 备服务器日志
# tail -555f /var/log/messages
# 如果 18 备服务器日志出现
Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
# 也代表 主备切换成功
6. nginx 测试 以 https 443 接口为例
# 17服务器 https://192.168.1.17:443/
# 18服务器 https://192.168.1.17:443/
# 测试keepalived访问 http://192.168.1.101:443/
# 如果访问可以通过 标识keepalived+nginx 正常
# systemclt stop keepalived 停掉 17 主服务器
# 测试keepalived访问 http://192.168.1.101:443/
# 内容为 18服务器 https://192.168.1.17:443/
|