您的位置:首页 > 运维架构 > Nginx

Keeplived配置Nginx双机高可用 推荐

2013-03-15 22:54 253 查看
一、简介

不管是Keepalived还是Heartbeat做高可用,其高可用,都是站在服务器脚本去说的高可用,而不是服务的角度。

也就是说,如果服务器DOWN机或者网络出现故障,高可用是可以实现自动切换的。如果运行的服务,比如Nginx挂掉

这些高可用软件是意识不到的,需要自己写脚本去实现服务的切换。

二、安装配置Keepalived

复制内容到剪贴板
代码:
# ./configure

# make

# make install

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

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

# cp /usr/local/sbin/keepalived /usr/bin/

# chkconfig --add keepalived

# mkdir /etc/keepalived/

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

编辑MASTER的主配置文件(MASTER: 1.1.1.1)

复制内容到剪贴板
代码:
# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_script chk_nginx {

script "/opt/monnginx.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass mdnginx

}

virtual_ipaddress {

1.1.1.100

}

track_script {

chk_nginx

}

}

编辑BACKUP的主配置文件(BACKUP:1.1.1.2)

复制内容到剪贴板
代码:
# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_script chk_nginx {

script "/opt/monnginx.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass mdnginx

}

virtual_ipaddress {

1.1.1.100

}

track_script {

chk_nginx

}

}

三、启动服务与脚本编写(主机和备机都要执行)

复制内容到剪贴板
代码:
# service nginx start

# service keepalived start

编写监控Nginx的脚本

复制内容到剪贴板
代码:
# vim /opt/monnginx.sh

#!/bin/bash

# author: honway.liu

# date: 2013-03-15

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

service nginx start

fi

sleep 3

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

service keepalived stop

fi

改进脚本,加上报警功能。

复制内容到剪贴板
代码:
# vim /opt/monnginx.sh

#!/bin/bash

# author: honway.liu

# date: 2013-03-15

IPADDR=$(ip addr show eth0|awk '{print $2}' | sed -n 3p)

contact=(137XXXXXXXX@139.com)

num=${#contact[@]}

function email() {

for ((i=0;i<num;i++));do

echo "$IPADDR service problem" | mail -s "WARNING" ${contact[i]} -- -f gm100861@gmail.com

done

}

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

service nginx start

fi

email

sleep 3

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

service keepalived stop

email

fi

这里的报警使用的是139邮箱,在139邮箱里面设置有邮件的时候,通知到手机,并且以长短信的方式。

需要开户本机的sendmail服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息