[转]六、nginx+keepalived搭建高可用负载均衡(双主模式)

				版权声明:本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。					https://blog.csdn.net/qq_34021712/article/details/73441168				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

原文地址,转载请注明出处:http://blog.csdn.net/qq_34021712/article/details/73441168    ©王赛超

前言

上一篇博客已经实现了nginx+keepalived主从配置,这篇博客来实现双主配置,如果Nginx只有单台的话就会出现单点问题,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可以持续的提供服务。

高可用分为以下两种方式:

1、Nginx+keepalived 主从配置
这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

环境说明

服务器名称 版本 安装的服务 ip/vip
Nginx主服务器 CentOS 7 nginx+keepalived 192.168.1.115/192.168.1.155
Nginx从服务器 CentOS 7 nginx+keepalived 192.168.1.120/192.168.1.156
我这里并没有将tomcat集群配置进来,只是为了测试nginx和keepalive高可用,如果想要搞一套完整版的,参考下面的博客配置
Nginx配置负载均衡见:http://blog.csdn.net/qq_34021712/article/details/68927676
Nginx配置动静分离见:http://blog.csdn.net/qq_34021712/article/details/68928650

主备模式搭建

第一步:安装keepalived依赖的包
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y
  
  
第二步:编译安装keepalived

  
  
  1. 将keepalived的安装包 上传到/usr/local/software 目录下
  2. cd /usr/local/software
  3. tar -zxvf keepalived -1.3 .5.tar.gz
  4. cd keepalived -1.3 .5
  5. ./configure --prefix=/usr/local/keepalived
  6. make && make install
第三步:将 keepalived 安装成 Linux 系统服务

  
  
  1. 安装完成之后, 需要做一些工作复制默认配置文件到 默认路径
  2. mkdir /etc/keepalived
  3. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  4. cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  5. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  6. cd /usr/local/software/keepalived -1.3 .5
  7. cp ./keepalived/etc/init.d/keepalived /etc/init.d/
  8. chmod 755 /etc/init.d/keepalived
第四步:编写nginx检测脚本

  
  
  1. vi /etc/keepalived/nginx_check.sh
  2. 内容如下:
  3. #!/bin/bash
  4. A=`ps -C nginx –no-header |wc -l`
  5. if [ $A -eq 0 ];then
  6. /usr/local/nginx/sbin/nginx
  7. sleep 2
  8. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  9. killall keepalived
  10. fi
  11. fi
  12. 赋予执行权限
  13. chmod +x /etc/keepalived/nginx_check.sh

第五步:修改keepalived的Master配置文件(192.168.1.115)


  
  
  1. vi /etc/keepalived/keepalived.conf
  2. 内容如下:
  3. ! Configuration File for keepalived
  4. # 全局配置,配置收件人
  5. global_defs {
  6. notification_email { ##通知机制,收件人
  7. 820518302@qq.com
  8. }
  9. notification_email_from [email protected] ####发件人
  10. smtp_server 192.168 .1 .115 ##发件服务器
  11. smtp_connect_timeout 30 ##服务器连接超时时间
  12. router_id LVS_DEVEL ##路由器标志
  13. }
  14. # 集群资源监控,组合track_script进行
  15. vrrp_script check_haproxy {
  16. script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
  17. interval 2 #检测时间间隔
  18. weight -20 #条件成立 权重减20
  19. }
  20. vrrp_instance HAPROXY_HA {
  21. # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
  22. state MASTER
  23. # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
  24. interface eno16777736
  25. # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
  26. virtual_router_id 80
  27. # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
  28. # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
  29. # 主节点时,内容为:
  30. #unicast_src_ip 192.168.1.115
  31. # unicast_peer {
  32. # 192.168.1.120
  33. #}
  34. # 设置优先级,确保主节点的优先级高过备用节点
  35. priority 100
  36. # 用于设定主备节点间同步检查时间间隔
  37. advert_int 2
  38. # 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
  39. #nopreempt
  40. # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
  41. authentication {
  42. auth_type PASS
  43. auth_pass 1234
  44. }
  45. # 集群资源监控,组合vrrp_script进行
  46. track_script {
  47. check_haproxy
  48. }
  49. # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
  50. # 当状态切换到BACKUP时,此IP会自动从系统中删除
  51. # 可以通过命令ip add查看切换后的状态
  52. virtual_ipaddress {
  53. 192.168 .1 .155 #虚拟ip配置完之后就用它访问
  54. }
  55. }
  56. vrrp_instance HAPROXY_HA2 {
  57. # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
  58. state BACKUP
  59. # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
  60. interface eno16777736
  61. # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
  62. virtual_router_id 81
  63. # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
  64. # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
  65. # 主节点时,内容为:
  66. #unicast_src_ip 192.168.1.115
  67. # unicast_peer {
  68. # 192.168.1.120
  69. #}
  70. # 设置优先级,确保主节点的优先级高过备用节点
  71. priority 90
  72. # 用于设定主备节点间同步检查时间间隔
  73. advert_int 2
  74. # 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
  75. #nopreempt
  76. # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
  77. authentication {
  78. auth_type PASS
  79. auth_pass 1234
  80. }
  81. # 集群资源监控,组合vrrp_script进行
  82. track_script {
  83. check_haproxy
  84. }
  85. # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
  86. # 当状态切换到BACKUP时,此IP会自动从系统中删除
  87. # 可以通过命令ip add查看切换后的状态
  88. virtual_ipaddress {
  89. 192.168 .1 .156 #虚拟ip配置完之后就用它访问
  90. }
  91. }
注意: 如果配置双主模式,一定要将nopreempt这个属性注释掉,搭建主备的时候需要他,搭建双主模式的时候,如果开启它,会将两个虚拟ip绑定到同一个服务器上。

第六步:修改keepalived的BACKUP配置文件(192.168.1.120)


  
  
  1. ! Configuration File for keepalived
  2. # 全局配置,配置收件人
  3. global_defs {
  4. notification_email { ##通知机制,收件人
  5. 820518302@qq.com
  6. }
  7. notification_email_from [email protected] ####发件人
  8. smtp_server 192.168 .1 .120 ##发件服务器
  9. smtp_connect_timeout 30 ##服务器连接超时时间
  10. router_id LVS_DEVEL ##路由器标志
  11. }
  12. # 集群资源监控,组合track_script进行
  13. vrrp_script check_haproxy {
  14. script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
  15. interval 2 #检测时间间隔
  16. weight -20 #条件成立 权重减20
  17. }
  18. vrrp_instance HAPROXY_HA {
  19. # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
  20. state BACKUP
  21. # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
  22. interface eno16777736
  23. # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
  24. virtual_router_id 80
  25. # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
  26. # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
  27. # 主节点时,内容为:
  28. #unicast_src_ip 192.168.1.120
  29. # unicast_peer {
  30. # 192.168.1.115
  31. #}
  32. # 设置优先级,确保主节点的优先级高过备用节点
  33. priority 90
  34. # 用于设定主备节点间同步检查时间间隔
  35. advert_int 2
  36. # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
  37. authentication {
  38. auth_type PASS
  39. auth_pass 1234
  40. }
  41. # 集群资源监控,组合vrrp_script进行
  42. track_script {
  43. check_haproxy
  44. }
  45. # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
  46. # 当状态切换到BACKUP时,此IP会自动从系统中删除
  47. # 可以通过命令ip add查看切换后的状态
  48. virtual_ipaddress {
  49. 192.168 .1 .155 #虚拟ip配置完之后就用它访问
  50. }
  51. }
  52. vrrp_instance HAPROXY_HA2 {
  53. # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
  54. state MASTER
  55. # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
  56. interface eno16777736
  57. # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
  58. virtual_router_id 81
  59. # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
  60. # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
  61. # 主节点时,内容为:
  62. #unicast_src_ip 192.168.1.115
  63. # unicast_peer {
  64. # 192.168.1.120
  65. #}
  66. # 设置优先级,确保主节点的优先级高过备用节点
  67. priority 100
  68. # 用于设定主备节点间同步检查时间间隔
  69. advert_int 2
  70. # 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
  71. #nopreempt
  72. # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
  73. authentication {
  74. auth_type PASS
  75. auth_pass 1234
  76. }
  77. # 集群资源监控,组合vrrp_script进行
  78. track_script {
  79. check_haproxy
  80. }
  81. # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
  82. # 当状态切换到BACKUP时,此IP会自动从系统中删除
  83. # 可以通过命令ip add查看切换后的状态
  84. virtual_ipaddress {
  85. 192.168 .1 .156 #虚拟ip配置完之后就用它访问
  86. }
  87. }

测试高可用

第一步:启动nginx和keepalived服务

  
  
  1. 启动nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  2. 启动keepalived:keepalived
启动之后,使用ip addr(centos6之前版本使用 ifconfig) 两台服务器分别绑定不同的虚拟ip到网卡


第二步:通过虚拟ip访问服务
通过虚拟ip访问服务,会跳转到nginx的服务上。


第三步:杀掉192.168.1.120上的keepalived再次访问服务
注意:杀掉nginx是不行的,因为上面的脚本 是检测到nginx宕机 会重启nginx的


第四步:再次访问服务
再次使用192.168.1.156这个虚拟ip访问nginx服务,本来指向120的,现在指向115了


第五步:重启120上的keepalived,再次访问服务,发现又从115切换回120

扫描二维码关注公众号,回复: 5290804 查看本文章



				版权声明:本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。					https://blog.csdn.net/qq_34021712/article/details/73441168				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

猜你喜欢

转载自blog.csdn.net/qq_43298012/article/details/87890377