1 下载两个小玩意
yum -y install keepalived
yum install psmisc -y
2 配置nginx1,2自启脚本
vim /root/shell/check-nginx.sh 我的脚本放在root/shell里
#!/bin/bash
#获取nginx正在运行的进程数
npsnum=`ps -C nginx --no-header | wc -l`
if [ $npsnum == 0 ]; then
#等0说明nginx没启动
/usr/local/nginx/sbin/nginx
#再次判断nginx是否活着
if [ `ps -C nginx --no-header | wc -l` == 0 ]; then
#等0说明nginx启动失败
killall keepalived
fi
fi
chmod +x /root/shell/check-nginx.sh
3 测试脚本是否能用
ll /root/shell/check-nginx.sh
ps -ef |grep nginx |grep -v grep (有的话杀死)
kill -9 1304 kill -9 1306 (我的有我杀)
ps -ef |grep nginx |grep -v grep 再次查看
./check-nginx.sh 启动 (进脚本目录可以这样,没进去全路径)
ps -ef |grep nginx |grep -v grep 再次查看
4 nginx-1keepalived配置
vim /etc/keepalived/keepalived.conf 如果错了cat /var/log/messages可以看
! Configuration File for keepalived
global_defs {
#唤醒邮箱配置
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
#配置邮件服务器连接超时时间
smtp_connect_timeout 30
#路由id,唯一的,当前机子
router_id LVS_27
}
#vrrp脚本 名字与下面track_script里面的名字一致
vrrp_script aaa {
script "/root/shell/check-nginx.sh"
#调用脚本间隔时间 秒 不配默认1秒
interval 2
weight -1
}
vrrp_instance VI_1 {
#服务器状态
state MASTER
#当前实例绑定的网卡接口
interface ens33
#虚拟路由id,主备必须相同,相同为一组
virtual_router_id 51
#优先级取值1-255,master一般比backup高50
priority 100
#主备心跳间隔时间 单位是秒
advert_int 1
#认证 主备切换时,进行认证 主备必须相同
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟ip配置 LVS=IPVS keepavlied虚拟出的ip
virtual_ipaddress {
#虚拟IP 必须和要和保活的软件所在的主机的IP的网段一致
192.168.58.188
}
#追踪脚本
track_script {
aaa
}
}
service keepalived start 启动
5 nginx-2 keepalived配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#唤醒邮箱配置
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
#配置邮件服务器连接超时时间
smtp_connect_timeout 30
#路由id,唯一的,当前机子
router_id LVS_28
}
#vrrp脚本 名字与下面track_script里面的名字一致,脚本路径
vrrp_script aaa {
script "/root/shell/check-nginx.sh"
#调用脚本间隔时间 秒 不配默认1秒
interval 2
weight 1
}
#服务器状态
state BACKUP
#当前实例绑定的网卡接口
interface ens33
#虚拟路由id,主备必须相同,相同为一组
virtual_router_id 51
#优先级取值1-255,master一般比backup高50
priority 50
#主备心跳间隔时间 单位是秒
advert_int 1
#认证 主备切换时,进行认证 主备必须相同
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟ip配置 LVS=IPVS keepavlied虚拟出的ip
virtual_ipaddress {
#虚拟IP 必须和要和保活的软件所在的主机的IP的网段
一致
192.168.58.188
}
#追踪脚本
track_script {
aaa
}
}
service keepalived start 启动
6 配置后
黑窗口 arp -a 192.168.58.188 查看虚拟ip在nginx-1机子上 00-0c-29-d4-55-dc
ping -t 192.168.58.188 可以一直ping
nginx-1 killall keepalived 黑窗口会出现连接超时,然后 继续ping
结束这次ping
再次 黑窗口 arp -a 192.168.58.188 查看虚拟ip在nginx-2机子上 00-0c-29-e9-a0-36
再次 ping -t 192.168.58.188
service keepalived start 启动 再次出现
结束这次ping
黑窗口 arp -a 192.168.58.188 查看虚拟ip在nginx-1机子上 00-0c-29-d4-55-dc
7 keepalived 作用 目的
高可用 和 负载均衡
Keepalived的作用是检测服务器(目前保活的是nginx,可以保活其他软件)的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性设施 。底层基于VRRP( Virtual Router Redundancy Protocol,简称VRRP)协议编写。VRRP作用:它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱。