nginx+keepalived主辅切换

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研究了一下该如何监控 nginx进程呢,看官方站看到了。vrrp_script 功能,但是用他的方法实在形不通,可能是我的方法不对,或者是个BUG。所以后来我自己写了个小脚本来完成工作。
环境
Server 1  :  ubuntu-server 8.04.4          192.168.6.162
Server 2  :  userver-server 8.04.4          192.168.6.188
软件
Keepalived 1.1.15
nginx-0.8.35
pcre-8.02
1. 分别在两台服务器上安装nginx
tar jxvf pcre-8.02.tar.bz2 
cd pcre-8.02 
./configure --prefix=/usr --enable-utf8 --enable-pcregrep-libbz2 --enable-pcregrep-libz 
make 
make install 
tar zxvf nginx-0.8.35.tar.gz 
cd nginx-0.8.35 
--prefix=/usr/local/nginx --with-pcre --user=www --group=www --with-file-aio --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-cc-opt=' -O3' 
make 
make install
2. 分别在两台服务器编写配置文件
vim /usr/local/nginx/conf/nginx.conf 
user    www www; 
worker_processes    1; 
error_log    logs/error.log    notice; 
pid                logs/nginx.pid; 
events { 
        worker_connections    1024; 

http { 
        include             mime.types; 
        default_type    application/octet-stream; 
        sendfile                on; 
        tcp_nopush         on; 
        keepalive_timeout    65; 
        gzip    on; 
        server { 
                listen             80; 
                server_name    localhost; 
                index     index.html index.htm; 
                root        /var/www; 
                error_page     500 502 503 504    /50x.html; 
                location = /50x.html { 
                        root     html; 
                } 
        } 

3. 分别在两台机器创建测试文件
echo "192.168.6.162" > /var/www/index.html 
echo "192.168.6.188" > /var/www/index.html
4. 安装 keepalived 
InBlock.gifapt-get install keepalived
5. server 1服务器编写配置文件
vrrp_script chk_http_port { 
                script "/opt/nginx_pid.sh"         ###监控脚本 
                interval 2                             ###监控时间 
                weight 2                                ###目前搞不清楚 

vrrp_instance VI_1 { 
        state MASTER                            ### 设置为 主 
        interface eth0                             ### 监控网卡    
        virtual_router_id 51                    ### 这个两台服务器必须一样 
        priority 101                                 ### 权重值 MASTRE 一定要高于 BAUCKUP 
        authentication { 
                     auth_type PASS             ### 加密 
                     auth_pass eric                ### 加密的密码,两台服务器一定要一样,不然会出错 
        } 
        track_script { 
                chk_http_port                     ### 执行监控的服务 
        } 
        virtual_ipaddress { 
             192.168.6.7                            ###    VIP 地址 
        } 

6. 在 server 2 服务器 keepalived 配置
vrrp_script chk_http_port { 
                script "/opt/nginx_pid.sh" 
                interval 2 
                weight 2 

vrrp_instance VI_1 { 
        state BACKUP                                ### 设置为 辅机 
        interface eth0 
        virtual_router_id 51                        ### 与 MASTRE 设置 值一样 
        priority 100                                     ### 比 MASTRE权重值 低 
        authentication { 
                     auth_type PASS 
                     auth_pass eric                    ### 密码 与 MASTRE 一样 
        } 
        track_script { 
                chk_http_port 
        } 
        virtual_ipaddress { 
                 192.168.6.7 
        } 
}
7. 编写监控nginx监控脚本
vim /opt/nginx_pid.sh 
#!/bin/bash
# varsion 0.0.2
# 根据一网友说这样做不科学,如果nginx服务起来了,但是我把keepalived 杀掉了,我的理由是,如果nginx死掉了,我觉得就很难在起来,再有就是nagios 当然要给你报警了啊。不过这位同学说的有道理,所以就稍加改了一下脚本
A=`ps -C nginx --no-header |wc -l`                ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                                         ## 如果没有进程值得为 零
                /usr/local/nginx/sbin/nginx
                sleep 3
                if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                       killall keepalived                        ## 则结束 keepalived 进程
                fi
fi 
8、 测试,分别在两个服务器 启动 nginx 和 keepalived
/usr/local/nginx/sbin/nginx 
/etc/init.d/keepalived start
监控 server 1 的日志
Apr 20 18:37:39 nginx Keepalived_vrrp: Registering Kernel netlink command channel 
Apr 20 18:37:39 nginx Keepalived_vrrp: Registering gratutious ARP shared channel 
Apr 20 18:37:39 nginx Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'. 
Apr 20 18:37:39 nginx Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'. 
Apr 20 18:37:39 nginx Keepalived_healthcheckers: Configuration is using : 3401 Bytes 
Apr 20 18:37:39 nginx Keepalived_vrrp: Configuration is using : 35476 Bytes 
Apr 20 18:37:40 nginx Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
Apr 20 18:37:41 nginx Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
Apr 20 18:37:41 nginx Keepalived_vrrp: Netlink: skipping nl_cmd msg... 
Apr 20 18:37:41 nginx Keepalived_vrrp: VRRP_Script(chk_http_port) succeeded
监控 server 2的日志 
Apr2018:38:23 varnish Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'. 
Apr 20 18:38:23 varnish Keepalived_healthcheckers: Configuration is using : 3405 Bytes 
Apr 20 18:38:23 varnish Keepalived_vrrp: Using MII-BMSR NIC polling thread... 
Apr 20 18:38:23 varnish Keepalived_vrrp: Registering Kernel netlink reflector 
Apr 20 18:38:23 varnish Keepalived_vrrp: Registering Kernel netlink command channel 
Apr 20 18:38:23 varnish Keepalived_vrrp: Registering gratutious ARP shared channel 
Apr 20 18:38:23 varnish Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'. 
Apr 20 18:38:23 varnish Keepalived_vrrp: Configuration is using : 35486 Bytes 
Apr 20 18:38:23 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
Apr 20 18:38:25 varnish Keepalived_vrrp: VRRP_Script(chk_http_port) succeeded 
看日志可以看出,两台服务器的 MASTRE 和 BACUKUP 已经都正常了
现在我们在 server 1 把 nginx 服务器停到
Server 1 $> killall nginx
这时候看server 1的日志
Apr 20 18:41:26 nginx Keepalived_healthcheckers: Terminating Healthchecker child process on signal 
Apr 20 18:41:26 nginx Keepalived_vrrp: Terminating VRRP child process on signal 
可以看出keepalived 的进程已经停到
这时候看server 2的日志,看是否已经接管
Apr 20 18:41:23 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
Apr 20 18:41:24 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
Apr 20 18:41:24 varnish Keepalived_vrrp: Netlink: skipping nl_cmd msg... 
很明显的看出 server 2 已经接管了,已经变为 MASTER 


本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/302402,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
12月前
|
网络协议 算法 Java
nginx与keepalived的那些事
nginx与keepalived的那些事
153 0
|
12月前
|
应用服务中间件 nginx
服务搭建篇(四) 搭建基于Nginx + keepalived的高可用服务
比如我这里虚拟IP+nginx端口是 : 192.168.154.10:80 , 我直接访问 , 出来的是192.168.154.134服务器上的nginx , 因为我刚刚做了区分 , 所以这个时候就可以知道访问的是哪个机器的Nginx , 然后我们把134的Nginx停掉 , 然后再次访问 , 仍然可以使用 , 此时 ,出现的135的页面 , 也就是访问的是192.168.154.135的Nginx
132 0
|
5月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
147 1
|
11月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
837 0
|
12月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
111 0
|
2月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
74 0
|
2月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
48 1
|
5月前
|
Kubernetes 搜索推荐 应用服务中间件
通过keepalived+nginx实现 k8s apiserver节点高可用
通过keepalived+nginx实现 k8s apiserver节点高可用
276 17
|
5月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
133 0
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档