文档章节

nginx+keepalive双机热备 自动切换

h
 hd-sz
发布于 2015/11/09 15:16
字数 836
阅读 32
收藏 2


规划:

系统:cenots 6.5 x64

用途     IP地址              部署模块

主用         10.0.1.133 nginx+keepalive

备用         10.0.1.134 nginx+keepalive

虚拟IP:10.0.1.2

主用IP:10.0.1.133

备用IP:10.0.1.134


所有的操作是在root用户下进行的,否则会出现权限问题

su root

password


1安装keepalive 

yum install -y make wget   
mkdir -p /usr/src/lvs
cd /usr/src/lvs

#安装keepalive的依赖
yum install -y gcc openssl-devel popt-devel

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz  
cd keepalived-1.2.7 
  
./configure  
make && make install   

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/  
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/  
chmod +x /etc/init.d/keepalived  
chkconfig --add keepalived  
chkconfig keepalived on  
mkdir /etc/keepalived  
ln -s /usr/local/sbin/keepalived /usr/sbin/

2.安装nginx 

#安装一下相关组件
zlib-1.2.8.tar.tg
tar -zxvf zlib-1.2.8.tar.tg
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib-1.2.8
make && make install

pcre-8.7.tar.tg
tar -zxvf pcre-8.7.tar.tg
cd pcre-8.7
./configure --prefix=/usr/local/pcre-8.7
make && make install

openssl-1.0.2d.tar.tg
tar -zxvf openssl-1.0.2d.tar.tg
cd openssl-1.0.2d
./configure --prefix=/usr/local/openssl-1.0.2d
make && make install

nginx-1.2.5.tar.gz  
tar zxvf  nginx-1.2.5.tar.gz  
cd nginx-1.2.5  

./configure --prefix=/usr/local/nginx 
	--user=www --group=www  
	--with-http_stub_status_module 
	--with-http_ssl_module  
	--with-zlib=../zlib-1.2.80
	--with-pcre=../pcre-8.7
	--with-openssl=../openssl-1.0.2d
make && make install

3.配置keepalive  

两台服务器端keepalived.conf内容都为如下,都设置为backup,不抢占,注意修改优先级不同,

更详细的keepalived配置文件说明可以执行man keepalived.conf查看:

//----------------------------------------------------------------

#10.0.1.133 keepalived.conf
! Configuration File for keepalived  
global_defs {  
   notification_email {  
    admin@lvtao.net  
        }  
   notification_email_from admin@lvtao.net  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
#监控服务.NGINX mysql等  
vrrp_script chk_nginx {  
    script "/home/check_nginx.sh"  
    interval 2  
    weight 2  
}  

vrrp_instance VI_1 {  
    state MASTER             #主从设置 MASTER  
    interface eth2           #网卡名  
    virtual_router_id 51  
    mcast_src_ip 10.0.1.133  #本机IP  
    priority 100             #从机小于主机  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        10.0.1.2  #VIP 的IP  
    }  
    track_script {  
        chk_nginx  #检测脚本  
    }  
}  

virtual_server 10.0.1.2 80 {  
    delay_loop 6  
    lb_algo rr  
    lb_kind DR  
    persistence_timeout 50  
    protocol TCP  

    real_server 10.0.1.133 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
    real_server 10.0.1.134 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
}  

nginx的检测脚本如下 :  
check_nginx.sh
#!/bin/bash  
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
then  
 /usr/local/nginx/sbin/nginx  
 sleep 5  
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
 then  
 killall keepalived  
 fi  
fi 

//----------------------------------------------------------------
10.0.1.134 keepalived.conf

! Configuration File for keepalived  
global_defs {  
   notification_email {  
    admin@lvtao.net  
        }  
   notification_email_from admin@lvtao.net  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
#监控服务.NGINX mysql等  
vrrp_script chk_nginx {  
    script "/home/check_nginx.sh"  
    interval 2  
    weight 2  
}  

vrrp_instance VI_1 {  
    state BACKUP  #主从设置 MASTER  
    interface eth2  #网卡名  
    virtual_router_id 51  
    mcast_src_ip 10.0.1.133 #本机IP  
    priority 50  #从机小于主机  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        10.0.1.2  #VIP 的IP  
    }  
    track_script {  
        chk_nginx  #检测脚本  
    }  

}  

virtual_server 10.0.1.2 80 {  
    delay_loop 6  
    lb_algo rr  
    lb_kind DR  
    persistence_timeout 50  
    protocol TCP  

    real_server 10.0.1.133 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
    real_server 10.0.1.134 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
}  

//----------------------------------------------------------------

nginx的检测脚本如下 :  
check_nginx.sh
#!/bin/bash  
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
then  
 /usr/local/nginx/sbin/nginx  
 sleep 5  
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
 then  
 killall keepalived  
 fi  
fi  

//----------------------------------------------------------------

在两台Web Server上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.1.2、抑制ARP广播。  

realserver.sh脚本
#!/bin/bash  
#description: Config realserver  

VIP=10.0.1.2  
   
/etc/rc.d/init.d/functions  
   
case "$1" in  
start)  
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP  
       /sbin/route add -host $VIP dev lo:0  
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
       sysctl -p >/dev/null 2>&1  
       echo "RealServer Start OK"  
       ;;  
stop)  
       /sbin/ifconfig lo:0 down  
       /sbin/route del $VIP >/dev/null 2>&1  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
       echo "RealServer Stoped"  
       ;;  
*)  
       echo "Usage: $0 {start|stop}"  
       exit 1  
esac  
exit 0  

//----------------------------------------------------------------
//----------------------------------------------------------------


© 著作权归作者所有

h
粉丝 0
博文 1
码字总数 836
作品 0
深圳
高级程序员
私信 提问
关于双机热备,你该知道那些问题?

双机热备这一概念包括了广义与狭义两种意义。 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从...

抢地主
2016/06/15
79
0
华为USG防火墙及NGFW高可用性的规划与实施详解

华为USG防火墙及NGFW高可用性的规划与实施详解 课程目标: 该课程程为卷B,它紧接卷A所描述的基础内容,开始进入防火墙的高可性的规划与实施,本课程卷B的核心目标是:一、从真正意义上去理解...

kingsir827
2016/04/04
0
0
邮件服务器架设-双机热备方案

双机热备针对的是服务器的临时故障所做的一种备份技术,通过双机热备,来避免长时间的服务中断,保证系统长期、可靠的服务。本方案将详细介绍邮件服务器双机热备的解决方案,以TurboMail邮件...

月亮湖泊
2009/11/05
260
0
一步步实现redis+sentinel双机热备

前言 前些天一直在忙线上环境部署的事情,初步想的是,nginx(keepalive双机热备)+3(tomcat)+2redis(双机热备),但是后来由于阿里云服务器经典网络不提供虚拟IP,无法使用keepalive,ngi...

OSC一霸
2016/10/09
2.3K
8
keepalived 双机热备

1. keepalived 双机热备的原理 首先,要知道 keepalived 有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,che...

hello_cjq
2018/03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部