客户需求:nginx + keepalive 实现高可用 +后端的负载均衡

Posted fengjiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客户需求:nginx + keepalive 实现高可用 +后端的负载均衡相关的知识,希望对你有一定的参考价值。

突然接到客户需求,需要使用nginx + keepalive 实现HA + LB,下面是主要的配置内容:

软件包直接从官网获取

操作系统环境:RHEL 6.8 X86_64

版本号:nginx-自定

    keepalived-1.2.13-5.el6_6.x86_64.rpm

IP地址分配:VIP: 192.168.56.10/24

      RIP: 192.168.56.11/24

         192.168.56.12/24

安装软件

yum -y install nginx keepalived  #将nginx、keepalived 放入到自建yum中,方便进行管理;

备注:也可以使用源码,配置步骤相对较复杂,不推荐

启动服务,添加开机自启

chkconfig nginx on
chkconfig keepalived on

nginx配置文件部分,两台nginx机器配置相同;

提示:重点关注 upstream 和 server 这2个区段

 1 upstream backend_server {  #负载均衡区段,配置后端进行轮询的物理web服务器
 2     server 192.168.56.11:80;
 3     server 192.168.56.22:80;
 4 }
 5  
 6 server
 7 {
 8     listen 80;
 9     server_name 192.168.56.10;  # 配置VIP,在两台主机之间进行漂移
10     location / {          # 访问站点执行根时配置的权限
11         proxy_redirect off;
12         proxy_set_header Host $host;
13         proxy_set_header X-Real-IP $remote_addr;
14         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
15         proxy_pass http://backend_server;  #指定转发的后端标签
16     }
17     access_log logs/tk_56.10_access.log;
18 }

keepalive配置文件部分:

nginx-alive1:

 1 ! Configuration File for keepalived
 2 vrrp_script chk_http_port {
 3     script "/etc/keepalived/check_nginx.sh"   # nginx 状态检查脚本
 4     interval 2   # 每2秒检查一次
 5     weight 2    # 权重为2
 6 }
 7 
 8 global_defs {
 9    notification_email {
10         [email protected]
11    }
12    notification_email_from [email protected]
13    smtp_server 127.0.0.1
14    smtp_connect_timeout 120
15    router_id haproxy1  #路由id 保持一致
16 }
17 
18 vrrp_instance web {
19     state MASTER  # 主机为MASTER ; 备机为BACKUP 
20     interface eth0 # VIP 绑定在哪张网卡上
21     virtual_router_id 200  # 虚拟路由id 保持一致
22     priority 100  #优先值 越大级别越高 主备差值保持50 
23     advert_int 1
24     authentication {  #通过授权的方式保持通讯; 保持一致
25     auth_type PASS
26     auth_pass 1111
27     }
28 
29 track_script {
30     chk_nginx_port  # keepalive的中调用nginx检查脚本
31     }
32 
33     virtual_ipaddress {
34         192.168.56.10  # 配置地址漂移使用的VIP
35     }
36 }

 

nginx-alive2:

 1 ! Configuration File for keepalived
 2 vrrp_script chk_nginx_port {
 3     script "/etc/keepalived/check_nginx.sh" 
 4     interval 2
 5     weight 2
 6 }
 7 
 8 global_defs {
 9    notification_email {
10         [email protected]
11    }
12    notification_email_from [email protected]
13    smtp_server 127.0.0.1
14    smtp_connect_timeout 120
15    router_id haproxy1
16 }
17 
18 vrrp_instance web {
19     state MASTER
20     interface eth0
21     virtual_router_id 200
22     priority 50 
23     advert_int 1
24     authentication {
25         auth_type PASS
26         auth_pass 1111
27     }
28 
29 track_script {
30     chk_nginx_port
31     }
32 
33     virtual_ipaddress {
34         192.168.56.10
35     }
36 }

编写状态检查脚本:

vim  /etc/keepalived/check_nginx.sh 1 #!/bin/bash

 1 #!/bin/sh
2
B=`ip addr show |grep 192.168.56.10|wc -l` 3 if [ $B -eq 1 ];then 4 A=`ps -ef | grep "nginx: master process"| grep -v grep|wc -l`
5   if [ $A -eq 0 ];then
6 /etc/init.d/nginx start
7 sleep 3
8 if [ `p
s -ef | grep "nginx: master process"| grep -v grep|wc -l` -eq 0 ];then
9 /etc/init.d/keepalived stop
10 fi
11 fi
12 fi

重启keepalived 服务,检查VIP是否已经在绑定网卡上生成:

# ip addr show |grep "192.168.56.10"

    inet 192.168.56.10/32 scope global eth0

 

补充下keepalive相关参数:

 ! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]             #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
   }
   notification_email_from  [email protected]        #设置邮件的发送地址
   smtp_server 127.0.0.1                                #设置smtp server地址
   smtp_connect_timeout 30                              #设置连接smtp server的超时时间
   router_id LVS_DEVEL                                  #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    interface eth0            #指定HA监测网络的接口
    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {          #设置验证类型和密码
        auth_type PASS        #设置验证类型,主要有PASS和AH两种
        auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        10.0.0.148
    }
}

virtual_server 10.0.0.148 80 {      #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                    #设置运行情况检查时间,单位是秒
    lb_algo rr                      #设置负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR                      #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
    persistence_timeout 50          #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                    #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                    #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,
                                    #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
    protocol TCP                    #指定转发协议类型,有TCP和UDP两种

    real_server 10.0.0.137 80 {     #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
        weight 3                    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                    #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
        TCP_CHECK {                 #realserver的状态检测设置部分,单位是秒
            connect_timeout 10      #表示3秒无响应超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 80
        }
    }
    real_server 10.0.0.139 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

 ##以上参数供大家进行参考##

 











以上是关于客户需求:nginx + keepalive 实现高可用 +后端的负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

2-4-运维必备核心技能-nginx实现web服务配置

keepalive笔记之二:keepalive+nginx(自定义脚本实现,上述例子也可以实现)

nginx+keepalive 实现高可用负载均衡方案

keepalive高可用nginx(nginx动静分离)的实现

nginx+keepalive实现负载均衡高可用

Keepalive VIP 故障