nginx+keepalived(主备模式)

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

前言

为什么要实现高可用呢?以前在搭建的时候只用了一台Nginx服务器,这样的话如果Nginx服务器宕机了,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可以持续的提供服务。

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

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

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

环境说明

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

主备模式搭建

第一步:安装keepalived依赖的包
[python]  view plain  copy
  1. yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y  
第二步:编译安装keepalived
[python]  view plain  copy
  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 系统服务
[python]  view plain  copy
  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检测脚本
[python]  view plain  copy
  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)
[python]  view plain  copy
  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 keepalived@domain.com ####发件人    
  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. }  

注意:如果是主备模式,要配置nopreempt 

第六步:修改keepalived的BACKUP配置文件(192.168.1.120)
[python]  view plain  copy
  1. ! Configuration File for keepalived    
  2. # 全局配置,配置收件人    
  3. global_defs {    
  4.    notification_email {               ##通知机制,收件人    
  5.      820518302@qq.com    
  6.    }    
  7.    notification_email_from keepalived@domain.com ####发件人    
  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. }  

测试高可用

第一步:启动nginx和keepalived服务
[python]  view plain  copy
  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的


第四步:再次访问服务
会发现虚拟ip 从192.168.1.120上取消了,重新绑定到192.168.1.115上了



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值