nginx互联网科技程序员

FastDFS蛋疼的集群和负载均衡(六)之Nginx高可用集群

2017-12-28  本文已影响192人  cmazxiaoma
diary_report.jpg

Interesting things

接着上一篇。

What did you do today

Keepalived是一个高性能的服务器高可用解决方案,Keepalived主要防止服务器单点故障的发生问题,可以通过Nginx的配合实现web服务端的高可用。

高可用是指同一时间提供服务的只有一台设备,主服务器挂掉后,备用服务器便开始提供服务。

nginx的http模块使用pcre来解析正则表达式
pcre-devel是使用pcre开发的一个二次库,nginx也需要。
zlib提供了很多种压缩的方式,nginx使用zlib对http包的内容进行gzip
nginx支持https,所以需要安装openssl库。

! Configuration File for keepalived
        global_defs {
                 router_id nginx_cx_7_no_1
        }

        vrrp_script chk_nginx {
                script "/etc/keepalived/nginx_check.sh"
                interval 2
                weight -20
        }

        vrrp_instance VI_1 {
        }

        vrrp_instance VI_1 {
                state MASTER
                interface eth0
                virtual_router_id 77
                mcast_src_ip 192.168.12.77
                priority 100
                nopreempt
                advert_int 1

                authentication {
                        auth_type PASS
                        auth_pass 1111
                }

                track_script {
                        chk_nginx
                }

                virtual_ipaddress {
                        192.168.12.111
                }
        }

global_defs {
router_id nginx1
}

2.每隔2s去执行/etc/keepalived/nginx_check.sh脚本,这一项检查从开始便一直进行,interval表示间隔时间,weight -20代表脚本执行成功后192.168.12.77这个节点的优先级降低20.
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
3.state MASTER表示该节点角色为master,interface eth0表示设备的网卡是eth0,virtual_router_id 77是取自当前设备的ip也就是192.168.12.77的后两位。mcast_src_ip 192.168.12.7指定当前设备的ip,priority 100代表优先级是100,优先级在keepalived实现高可用方面超级重要。keepalived是根据优先级来选择当前提供服务的设备。

  1. 我们这里用192.168.12.77指A设备,用192.168.12.88指B设备。假设A设备的优先级是100,B设备的优先级是90,那么keepalived服务器一开始去检查优先级,发现A设备的优先级很高,于是让A设备当大哥,让它去提供服务。当A设备的nginx挂了后,由于nginx_check脚本每2秒执行一次,发现A设备没有nginx进程后,先会尝试重新启动nginx,如果重新启动还是不行,这就很皮了!然后大发雷霆,就会杀掉所有的keepalived进程。然后回调给keepalived服务器,告知大哥的nginx挂掉了。keepalived服务器得知后,会把A设备的优先级减20,从而A设备的优先级为80。这样下次keepalived来检查优先级时,B设备的优先级比A设备搞,那么B设备就可以对外提供服务。美滋滋,这就实现了高可用。
    5.这段配置,2个节点要一样,表示它们属于一个组,keepalived会同一组中去做检查并保持高可用。

authentication {
auth_type PASS
auth_pass 1111
}

6.track_script里面的chk_nginx要与前面定义的定时执行脚本名(vrrp_script chk_nginx { } )保持一致。

  1. 自己定义对外提供服务的虚拟ip。

virtual_ipaddress {
192.168.12.111
}

        global_defs {  
                 router_id nginx_cx_8_no_2
        }         
        vrrp_script chk_nginx {
                script "/etc/keepalived/nginx_check.sh"
                interval 2  
                weight -20  
        }       
        
        vrrp_instance VI_1 {
                state BACKUP
                interface eth0
                virtual_router_id 77
                mcast_src_ip 192.168.12.88
                priority 90  
                nopreempt    
                advert_int 1
                
                authentication {
                        auth_type PASS
                        auth_pass 1111
                }       
                
                track_script {
                        chk_nginx
                }       

                virtual_ipaddress {
                        192.168.12.111
                }
        }

*在/etc/keepalived/目录下,创建nginx_check.sh,命令:touch nginx_check.sh,然后写入以下脚本:

A=`ps -C nginx --no-header |wc -l`  
if [ $A -eq 0 ];then  
    /usr/local/nginx/sbin/nginx  
    sleep 2  
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
        killall keepalived  
    fi  
fi  
image.png image.png

Summary

美滋滋,Nginx高可用集群已被搞定。下一篇讲如何把Nginx高可用集群应用到FastDFS集群当中。

上一篇 下一篇

猜你喜欢

热点阅读