1、环境
两台虚拟机40,41安装Nginx
2、keepalived简介
Keepalived我的理解是能够为服务器创建虚拟IP,简称VIP。并且能够配置主从模式,如果主机的vip挂掉,那么从节点的vip会立马启动起来,保证vip可用。
2.1、安装
#两台机器同时解压
tar -zxvf keepalived-2.0.0.tar.gz
#进入keepalived目录下
cd keepalived-2.0.0/
#配置安装目录和配置文件目录
./configure --prefix=/usr/local/keepalived --sysconf=/etc
#安装
make && make install
2.2、修改配置文件
#keepalive目录启动时会默认读取 /etc/keepalived/keepalived.conf 配置文件
vim /etc/keepalived/keepalived.conf
#可以删除原文件所有内容加入以下配置。
#主节点
global_defs { #全局配置
router_id VI_1 #表示运行Keepalived服务器的一个标识,唯一的
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # ip addr命令可以查看当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一致
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
virtual_ipaddress {
192.168.92.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
#从节点
global_defs { #全局配置
router_id VI_1 #表示运行Keepalived服务器的一个标识,唯一的
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # ip addr 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一致
priority 50 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
virtual_ipaddress {
192.168.92.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
2.3、启动keepalived
#两台机器都启动。
/usr/local/keepalived/sbin/keepalived
2.4、查看nginx运行结果
#主节点
ip addr
#运行虚拟ip
http://192.168.92.100/
#在从节点上执行命令 ip addr会发现从节点上没有VIP的
#主节点查看keepalived进程并且kill掉
ps -ef | grep keepalived
kill -9 进程名
#到从节点运行命令ip addr 会发现虚拟IP在从节点上
1)主节点运行(40节点) ip addr命令:
2)访问虚拟IP http://192.168.92.100/:
3)Kill后用ip addr查看从节点(41节点):
4)继续访问虚拟IP:http://192.168.92.100/:
5)启动主节点(40节点),VIP又回到了主节点:
/usr/local/keepalived/sbin/keepalived
2.5、keepalived+shell
防止nginx挂了,服务器没挂,那么keepalived代理虚拟IP存在
#进入目录
cd /usr/local/nginx/sbin
#编辑shell脚本
vim check_nginx.sh
#给权限
chmod +777 check_nginx.sh
#!/bin/bash
#查询nginx的进程数目
A=`ps -C nginx --no-header |wc -l`
#如果进程数目为0
if [ $A -eq 0 ];then
#重启nginx
/usr/local/nginx/sbin/nginx
#nginx重启失败,则停掉keepalived服务,进行VIP转移
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
#杀掉,vip就漫游到另一台机器
killall keepalived
fi
fi
1)修改主从节点的keepalived配置文件:
vim /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id VI_1 #表示运行Keepalived服务器的一个标识,唯一的
}
vrrp_script chk_nginx {
script "/usr/local/nginx/sbin/check_nginx.sh" #心跳执行的脚本
interval 2 #(检测脚本执行的间隔,单位是秒)
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # ip addr 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一致
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_nginx #(调用检测脚本)
}
virtual_ipaddress {
192.168.92.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
2)重启keepalived:
#查看进程
ps -ef | grep keepalived
#杀死进程
Kill -9 xxxx
#重新启动
/usr/local/keepalived/sbin/keepalived
#进入nginx 无论停止掉多少次,nginx依旧会被启动,会发现nginx关不掉了
./nginx -s stop
./nginx -s stop
./nginx -s stop
3)停止nginx命令:
4)效果: