相关资源下载地址:资源包+教程
1、keepalived是什么
我们知道当tomcat宕机后nginx会自动排除宕机服务器,采用正常的tomcat访问。nginx宕机呢?
方案:提供主备nginx两台服务器,用keepalived做路由提供访问。当主nginx服务器宕机后会自动切换到备用nginx服务器上。

2、环境准备
三台服务器
IP 192.168.17.104 Windows7 用来测试
IP 192.168.17.129 Linux 主机
IP 192.168.17.131 Linux 从机
虚拟IP 192.168.17.50
注:实施现场虚拟ip必须保证交换机开放该ip
3、安装keepalived
3.1 离线安装
- 解压缩
tar -zxvf keepalived-2.0.20.tar.gz - 进入到解压完的目录
cd keepalived-2.0.20 ./configure --prefix=/usr/local/keepalived- 编译与安装
make && make install - 完成后生成 bin etc sbin share 4个文件夹,keepalived.conf配置文在/usr/local/keepalived/etc/keepalived下
- 创建拷贝配置文件到/etc/keepalived/中,因为keepalived默认读取该位置的配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
注:不同版本离线文件有的缺少依赖包比较麻烦,能yum最好yum
3.2 yum 安装
yum install keepalived -y
默认安装位置为:/etc/keepalived
4、配置高可用
修改192.168.17.129 服务器的/etc/keepalived/keepalived.conf文件
global_defs {#notification_email {# root@networkquestions.org #定义报警邮件#}#notification_email_from warn@networkquestions.org #定义发件人#smtp_server localhost #指定smtp服务器,这里直接改为localhost#smtp_connect_timeout 30 #smtp连接超时时间router_id 192.168.17.129 #标识id,通常为 hostname,或者当前部署机器的IP#vrrp_skip_check_adv_addr#vrrp_garp_interval 0#vrrp_gna_interval 0}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 3 #(检测脚本执行的间隔/秒)weight 20 #执行sh后,修改当前服务器权重}vrrp_instance VI_1 {state MASTER #设置为主服务器,备用服务器应设置为BACKUPinterface eth0 #定义虚拟ip绑定接口 ifconfig命令查询virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组#mcast_src_ip 192.168.17.129 #发送多播包的地址,如果不设置默认使用绑定的网卡priority 100 #优先级,必须高于从服务器advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样authentication { #认证,默认即可。主从需一致。auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写}}
192.168.17.131 安装步骤相同修改从服务器配置为
global_defs {#notification_email {# root@networkquestions.org #定义报警邮件#}#notification_email_from warn@networkquestions.org #定义发件人#smtp_server localhost #指定smtp服务器,这里直接改为localhost#smtp_connect_timeout 30 #smtp连接超时时间router_id 192.168.17.131 #标识id,通常为 hostname,或者当前部署机器的IP#vrrp_skip_check_adv_addr#vrrp_garp_interval 0#vrrp_gna_interval 0}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 3 #(检测脚本执行的间隔/秒)weight 20 #执行sh后,修改当前服务器权重}vrrp_instance VI_1 {state BACKUP #设置为主服务器,备用服务器应设置为BACKUPinterface eth0 #定义虚拟ip绑定接口 ifconfig命令查询virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组#mcast_src_ip 192.168.17.131 #发送多播包的地址,如果不设置默认使用绑定的网卡priority 90 #优先级,必须低于从服务器advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样authentication { #认证,默认即可。主从需一致。auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写}}
5、创建nginx检测脚本nginx_check.sh
如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:
#!/bin/bashA=`ps -C nginx –no-header |wc -l`if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 5if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfifi
6、启动nginx和keepalived
keeplived启动命令:
systemctl start keepalived.service或者service keepalived start
启动检查:
ps -ef | grep keepalived或者systemctl status keepalived.service
keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp

停止keepalived服务:
systemctl stop keepalived.service或者service keepalived stop
7、测试
主从服务器keepalived启动后通过ip a 可以查看浮动ip在哪台机器上
- 关闭含有浮动ip的服务器keepalived后重新查看ip a
- 当前服务器浮动ip消失,另一台服务器浮动ip加载
- 如果只关闭nginx,keepalived的nginx_check.sh脚本会自动探活nginx,重新启动该机器的nginx,如果nginx启动成功则浮动ip映射不变。
- windows测试服务器可直接访问浮动ip+nginx端口号测试页面效果

