`
sunqi
  • 浏览: 228158 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Keepalived + nginx 双备份

阅读更多

  配置一:

 

以前写过一篇,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
apt-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 了

 

 

 

 

配置二:

 

 

! Configuration File for keepalived
global_defs {
   notification_email {
   xiaohan@163.com
        }
   notification_email_from keepalived@chtopnet.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER     <== 主MASTER,从为BACKUP,其他一样。
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.2.24    <== 主nginx的IP地址
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass chtopnet
    }
    virtual_ipaddress {
        192.168.2.96                   <==vip 地址
    }
}

 

   重启keepalived,这里比较重要,很多朋友喜欢把sbin 里面的复制到/etc/init.d/下面,用service keepalvied restart 这种方式,不过这里不推荐,我也是这里这样做,结果出现很多的问题,建议用最老实的方法来重启:

#/usr/local/sbin/keepalived –D –f /usr/local/etc/keeplive/keepalived.conf

 查看是否绑定了vip ,注意,用ifconfig是看不到的,要用ip a 来查看,切记切记。

 

 

Ok,成功,在BACKUP上也做同样的操作。

验证,其实很简单,一直ping 192.168.2.96 ,然后将主nginx的network停掉,可以看到大概有2个timeout,BACKUP在极短的时间内接替了工作。再将主的network开启,可以看到主又继续接替了BACKUP,继续工作。

 

 

配置三:

 

安装keepalived
tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cd /etc/keepalived/
#####################################################
! Configuration File for keepalived
global_defs {
   notification_email {
   yeli4017@163.com
        }
   notification_email_from yeli4017@163.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id web_nginx
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    mcast_src_ip 172.16.3.51  
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111chtopnet
    }
    virtual_ipaddress {
        172.16.3.199
    }
}
辅助服务器
! Configuration File for keepalived
global_defs {
   notification_email {
   yuhongchun027@163.com
        }
   notification_email_from keepalived@chtopnet.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 172.16.3.51              <==主nginx的IP的地址
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass chtopnet
    }
    virtual_ipaddress {
        172.16.3.199
    }
}
 

分享到:
评论
1 楼 zhoumax 2012-05-01  
你好,看了你的文章 ,想请教一个问题:
我在opensuse下安装keepalived, 编译和安装的时候都没有报错,但是最后启动keepalived的时候 不管用你所说的 /etc/init.d/keepalived start , 还是 service keepalived start ,都会报一个 /etc/rc.d/init.d/functions no such file 错误。我查看了该目录下,确实没有这个functions文件,但是我打开 init.d/keepalived文件,上面确实写的是 /etc/rc.d/init.d/functions
。这是怎么回事呢?是因为我的系统原因吗?我的系统是opensuse11.1。那这样的话,我又如何启动keepalived  呢?期待您的帮助 。谢谢

相关推荐

    keepalived + nginx组建高可用负载平衡Web server集群

    nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。 为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都...

    nginx视频教程.txt

    P1414_Nginx视频教程_Nginx负载均衡备份和宕机 P1515_Nginx视频教程_什么是动静分离? P1616_Nginx视频教程_Nginx实现动静分离 P1717_Nginx视频教程_什么是虚拟主机? P1818_Nginx视频教程_Nginx实现虚拟主机 P...

    linux下安装部署keepalived,利用keepalived多台nginx虚拟IP浮动

    一、准备 软件包名称:keepalived 2.0.19 操作系统环境 ...备份节点 二、keepalived 编译安装 上传keepalived安装包至相应目录,这里我们指定 /kp/keepalived [root@pve-97 keepalived]# pwd /kp/keep

    keepalived结合nginx实现nginx高可用的方法

    一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主...

    14-CentOS7-搭建Keepalived服务双机热备

    常见的集群工具 LVS 集群 Haproxy 集群 nginx,1. 故障切换 2.健康检查

    ansible一键部署.zip

    ansible一键部署中小型网站架构,应用了nginx(负载均衡)+keepalived(非抢占模式),tomcat(单机多实例)+supervisor(管理),nfs(共享文件存储),rsync+crond(定时备份),zabbix(邮件报警)

    lvs+keeplive

    说明:前端两台负载均衡器安装lvs+keepalived ;web服务器上安装nginx+tomcat ;后端数据库采用双机备份安装mysql软件,用户访问web服务器ip 192.168.4.66

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...

    全栈Linux运维-Linux云计算运维与高级架构班课程 全新自动化运维必学课程.zip

    KVM,Zabbix企业级实战,自动化运维体系实战,Gitlab+Ansible+Jenkins运维实战,Nginx,Docker,Kubernetes,Openstack,ELK等云计算运维技术,企业级数据库Redis,MySQL主从复制备份等等,让同学们体验一站式Linux...

    高性能Linux服务器构建实战:运维监控、性能调优与集群应用

    Web应用篇详细介绍了Nginx、Varnish和Memcached这三款Linux服务器上极为常用的Web应用软件的安装、配置、管理、使用方法、工作原理和性能调优技巧。数据备份与恢复篇首先讲述了开源备份软件bacula的使用与管理技巧,...

    Linux高级运维线上实战 架构设计运维千万级电商系统解决方案

    对于高可用性和负载均衡的系统,需要掌握相关的技术,如Nginx、HAProxy、Keepalived等。 数据库的管理也是系统运维中的重要一环,需要掌握MySQL、Redis等常见数据库的安装、配置和管理。 安全备份和恢复也是系统运维...

    百度、京东、阿里巴巴大牛力荐 Linux企业运维实战

    主要内容包括最新版Linux系统安装的完整过程、系统启动原理、系统必备的命令、系统管理、初学者必备软件管理、基础服务实战、生产环境LAMP.Redis实战及备份、性能优化、Zabbix企业级分布式监控、Nginx高性能Web...

    Infrastructure

    作为服务运行的出口商:MySQL出口商,绑定出口商,Nginx出口商,HAproxy出口商,Node出口商,Keepalived出口商Prometheus收集的出口商指标由InfluxDb和Telegraf收集的Syslog 可视化日志记录:Grafana 备份服务器:....

    双机热备与负载均衡的设计与实现

    针对OpenFlow SDN系统中的策略管理模块提出了一种新型的双机热备和负载均衡方案,采用了服务器集群的方式,通过Keepalived和Heartbeat实现了双机热备模块,通过Nginx实现了代理服务器和负载均衡模块。经工程验证有效...

Global site tag (gtag.js) - Google Analytics