相关资源下载地址:资源包+教程

1、keepalived是什么

我们知道当tomcat宕机后nginx会自动排除宕机服务器,采用正常的tomcat访问。nginx宕机呢?
方案:提供主备nginx两台服务器,用keepalived做路由提供访问。当主nginx服务器宕机后会自动切换到备用nginx服务器上。
nginx 高可用-Keepalived - 图1
nginx 高可用-Keepalived - 图2


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 离线安装

  1. 解压缩 tar -zxvf keepalived-2.0.20.tar.gz
  2. 进入到解压完的目录 cd keepalived-2.0.20
  3. ./configure --prefix=/usr/local/keepalived
  4. 编译与安装 make && make install
  5. 完成后生成 bin etc sbin share 4个文件夹,keepalived.conf配置文在/usr/local/keepalived/etc/keepalived下
  6. 创建拷贝配置文件到/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文件

  1. global_defs {
  2. #notification_email {
  3. # root@networkquestions.org #定义报警邮件
  4. #}
  5. #notification_email_from warn@networkquestions.org #定义发件人
  6. #smtp_server localhost #指定smtp服务器,这里直接改为localhost
  7. #smtp_connect_timeout 30 #smtp连接超时时间
  8. router_id 192.168.17.129 #标识id,通常为 hostname,或者当前部署机器的IP
  9. #vrrp_skip_check_adv_addr
  10. #vrrp_garp_interval 0
  11. #vrrp_gna_interval 0
  12. }
  13. vrrp_script chk_nginx {
  14. script "/etc/keepalived/nginx_check.sh"
  15. interval 3 #(检测脚本执行的间隔/秒)
  16. weight 20 #执行sh后,修改当前服务器权重
  17. }
  18. vrrp_instance VI_1 {
  19. state MASTER #设置为主服务器,备用服务器应设置为BACKUP
  20. interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
  21. virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
  22. #mcast_src_ip 192.168.17.129 #发送多播包的地址,如果不设置默认使用绑定的网卡
  23. priority 100 #优先级,必须高于从服务器
  24. advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
  25. authentication { #认证,默认即可。主从需一致。
  26. auth_type PASS
  27. auth_pass 1111
  28. }
  29. track_script {
  30. chk_nginx
  31. }
  32. virtual_ipaddress {
  33. 192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写
  34. }
  35. }

192.168.17.131 安装步骤相同修改从服务器配置为

  1. global_defs {
  2. #notification_email {
  3. # root@networkquestions.org #定义报警邮件
  4. #}
  5. #notification_email_from warn@networkquestions.org #定义发件人
  6. #smtp_server localhost #指定smtp服务器,这里直接改为localhost
  7. #smtp_connect_timeout 30 #smtp连接超时时间
  8. router_id 192.168.17.131 #标识id,通常为 hostname,或者当前部署机器的IP
  9. #vrrp_skip_check_adv_addr
  10. #vrrp_garp_interval 0
  11. #vrrp_gna_interval 0
  12. }
  13. vrrp_script chk_nginx {
  14. script "/etc/keepalived/nginx_check.sh"
  15. interval 3 #(检测脚本执行的间隔/秒)
  16. weight 20 #执行sh后,修改当前服务器权重
  17. }
  18. vrrp_instance VI_1 {
  19. state BACKUP #设置为主服务器,备用服务器应设置为BACKUP
  20. interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
  21. virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
  22. #mcast_src_ip 192.168.17.131 #发送多播包的地址,如果不设置默认使用绑定的网卡
  23. priority 90 #优先级,必须低于从服务器
  24. advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
  25. authentication { #认证,默认即可。主从需一致。
  26. auth_type PASS
  27. auth_pass 1111
  28. }
  29. track_script {
  30. chk_nginx
  31. }
  32. virtual_ipaddress {
  33. 192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写
  34. }
  35. }

5、创建nginx检测脚本nginx_check.sh

如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:

  1. #!/bin/bash
  2. A=`ps -C nginx –no-header |wc -l`
  3. if [ $A -eq 0 ];then
  4. /usr/local/nginx/sbin/nginx
  5. sleep 5
  6. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  7. killall keepalived
  8. fi
  9. fi

6、启动nginx和keepalived

keeplived启动命令:

  1. systemctl start keepalived.service
  2. 或者
  3. service keepalived start

启动检查:

  1. ps -ef | grep keepalived
  2. 或者
  3. systemctl status keepalived.service

keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp
nginx 高可用-Keepalived - 图3
nginx 高可用-Keepalived - 图4

停止keepalived服务:

  1. systemctl stop keepalived.service
  2. 或者
  3. service keepalived stop

7、测试

主从服务器keepalived启动后通过ip a 可以查看浮动ip在哪台机器上
nginx 高可用-Keepalived - 图5

  1. 关闭含有浮动ip的服务器keepalived后重新查看ip a
  2. 当前服务器浮动ip消失,另一台服务器浮动ip加载
  3. 如果只关闭nginx,keepalived的nginx_check.sh脚本会自动探活nginx,重新启动该机器的nginx,如果nginx启动成功则浮动ip映射不变。
  4. windows测试服务器可直接访问浮动ip+nginx端口号测试页面效果

5296afb19496f51b6d595d1f856117c5.jpg