keepalive+nginx负载均衡

来源:互联网 发布:s7总决赛现场数据 编辑:程序博客网 时间:2024/05/21 11:31

一、双机主备:

主机:

! Configuration File for keepalived#全局配置global_defs {   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人   #smtp_server 192.168.200.1                             #指定smtp服务器地址   #smtp_connect_timeout 30                               #指定smtp连接超时时间   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识}vrrp_instance VI_1 {     state MASTER           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 51   #同一实例下virtual_router_id必须相同    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.55       #可以多个虚拟IP,换行即可    }}


备机:


! Configuration File for keepalived#全局配置global_defs {   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人   #smtp_server 192.168.200.1                             #指定smtp服务器地址   #smtp_connect_timeout 30                               #指定smtp连接超时时间   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识}vrrp_instance VI_1 {     state BACKUP           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 51   #同一实例下virtual_router_id必须相同    priority 99            #BACKUP权重要低于MASTAER 比如MASTER为100      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.55       #可以多个虚拟IP,换行即可    }}



二、双主热备:

主机1:


! Configuration File for keepalived#全局配置global_defs {   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人   #smtp_server 192.168.200.1                             #指定smtp服务器地址   #smtp_connect_timeout 30                               #指定smtp连接超时时间   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识}vrrp_instance VI_1 {     state MASTER           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 51   #同一实例下virtual_router_id必须相同    priority 150           #MASTER权重要高于BACKUP 比如BACKUP为100      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.55       #可以多个虚拟IP,换行即可    }}vrrp_instance VI_2 {     state BACKUP           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 52   #同一实例下virtual_router_id必须相同    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.56       #可以多个虚拟IP,换行即可    }}


主机2:

! Configuration File for keepalived#全局配置global_defs {   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人   #smtp_server 192.168.200.1                             #指定smtp服务器地址   #smtp_connect_timeout 30                               #指定smtp连接超时时间   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识}vrrp_instance VI_1 {     state BACKUP           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 51   #同一实例下virtual_router_id必须相同    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.55       #可以多个虚拟IP,换行即可    }}vrrp_instance VI_2 {     state MASTER           #标示状态为MASTER 备份机为BACKUP    interface eth0         #设置实例绑定的网卡    virtual_router_id 52   #同一实例下virtual_router_id必须相同    priority 150           #MASTER权重要高于BACKUP 比如BACKUP为99      advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {       #设置认证        auth_type PASS     #主从服务器验证方式        auth_pass 8888    }    virtual_ipaddress {    #设置vip        192.168.0.56       #可以多个虚拟IP,换行即可    }}


三、keepalive监控nginx:

keepalived本身只是监控自身的进程是否挂掉,如果机器并没有挂机,只是nginx挂了,那么keepalived是不会做切换主备的,所以我们需要写个脚本来监控nginx进程是否存在。

1、定义nginx监控脚本check_nginx.sh,内容如下:

#!/bin/bash# 如果进程中没有nginx则将keepalived进程kill掉A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A if [ $A -eq 0 ];then                    ## 如果没有进程值得为 零       service keepalived stop          ## 则结束 keepalived 进程fi


2、上传脚本:

上传脚本check_nginx.sh到/etc/keepalived目录。

 

设置check_nginx.sh脚本可执行权限:

chmod 755 check_nginx.sh  或者 chmod +x check_nginx.sh

 

如果执行脚本出错,需要使用dos2unix工具转化下格式:

安装dos2unix:  yum -y install dos2unix

 

使用:dos2unix check_nginx.sh


3、修改keepalived.conf:

定义keepalived监控脚本:

vrrp_script check_nginx {

    script "/etc/keepalived/check_nginx.sh"         ##nginx监控脚本

    interval 2                                      ##时间间隔,2

    weight 2                                        ##权重

}

在实例中加入启用监控:

vrrp_instance VI_1 {

    state BACKUP           #标示状态为MASTER备份机为BACKUP

    interface eth0         #设置实例绑定的网卡

    virtual_router_id 51   #同一实例下virtual_router_id必须相同

    priority 100           #MASTER权重要高于BACKUP比如BACKUP99  

    advert_int 1           #MASTERBACKUP负载均衡器之间同步检查的时间间隔,单位是秒

    authentication {       #设置认证

        auth_type PASS     #主从服务器验证方式

        auth_pass 8888

    }

    virtual_ipaddress {    #设置vip

        192.168.0.55       #可以多个虚拟IP,换行即可

    }

 

    track_script {

    check_nginx        #监控脚本

    }

}



附:keepalived安装:

1. 安装环境

su - root

yum -y install kernel-devel*

yum -y install openssl-*

yum -y install popt-devel

yum -y install lrzsz

yum -y install openssh-clients

yum -y install libnl libnl-devel popt

2. 安装keepalived

2.1. 上传keepalived安装文件

1cd /usr/local/src/  

2、mkdir keepalived

3、cd keepalived/

4wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz  或者  rz 上传

2.2. 解压

1tar -xvf keepalived-1.2.15.tar.gz

2cd keepalived-1.2.15

 

2.3. 安装keepalived

1cd keepalived

2、执行配置命令

./configure

 

3、编译

make

4、安装

make install

5、拷贝执行文件

cp /usr/local/sbin/keepalived /usr/sbin/

6、将init.d文件拷贝到etc,加入开机启动项

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

7、将keepalived文件拷贝到etc下,加入网卡配置

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

8、创建keepalived文件夹

mkdir -p /etc/keepalived

9、将keepalived配置文件拷贝到etc

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

10、添加可执行权限

chmod +x /etc/init.d/keepalived

2.4. 加入开机启动:

chkconfig --add keepalived

chkconfig keepalived on

 

3. 配置日志文件

1.keepalived日志输出到local0

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -d -S 0"

 

2./etc/rsyslog.conf里添加:

local0.*  /var/log/keepalived.log

 

3.重新启动keepalivedrsyslog服务:

service rsyslog restart

service keepalived restart

4. 打开防火墙的通讯地址

iptables -A INPUT -d 224.0.0.18 -j ACCEPT

/etc/rc.d/init.d/iptables save


原创粉丝点击