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

Keepalived + Nginx 搭建高可用集群

2017-11-22 00:00 183 查看
0x00 背景

nginx做负载均衡与反向代理,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器宕机,那么所有的服务也会跟着瘫痪 。keepalived+nginx,就能很好的解决这一问题。

主机: Master 192.168.1.211

备机: Node 192.168.1.210

虚拟IP: 192.168.1.212

0x01 Keepalived介绍

Keepalived

Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

VRRP

VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。 VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器。VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器。由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。

Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

0x02 安装Ngnix

分别在主备两台机器上安装Nginx,并配置。详情请看:Nginx 代理Http及TCP请求

0x03 安装Keepalived

1. 创建Keepalived源码目录

mkdir /home/${user}/soft                             // ${user} 为用户目录
mkdir /home/${user}/soft/keepalived

2. 下载Keepalived源码并解压

cd /home/${user}/soft/keepalived
wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz tar -xzvf keepalived-1.2.22.tar.gz

3. 安装相关依赖

yum install popt-devel
yum install openssl-devel
yum install popt-devel

4. 源码编译

cd /home/${user}/soft/keepalived/keepalived-1.2.22     // 该目录为源码目录 ${user}为用户目录
./configure --prefix=/opt/keepalived/
make
make install

5. 安装成功后,会在/opt/keepalived目录下产生相关文件,由于Keepalived的相关程序都是以系统目录为基础的,所以需要将编译安装之后的文件安装到系统中,操作如下:

cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /opt/keepalived/sbin/keepalived /usr/sbin/
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

6. 检查安装是否成功

/etc/init.d/keepalived start                   // 启动
/etc/init.d/keepalived restart                 // 重启
/etc/init.d/keepalived stop                    // 停止

7. 修改主从配置文件

Master 配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {
#notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
## jutao@htdf.cc
# }
# notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
# smtp_server localhost #指定smtp服务器地址
# smtp_connect_timeout 30 #指定smtp连接超时时间
router_id Master #运行keepalived机器的一个标识
}

vrrp_script chk_nginx {
script "/opt/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight 2 #如果条件成立的话,则权重 2
}

vrrp_instance VI_1 {
state MASTER            #MASTER 表示主机 BACKUP 表示备
interface wlan0          #wlan0 表示网络接口名称,根据主机选择
virtual_router_id 51     # 虚拟ID  主备必须相同,才可以相互访问到
mcast_src_ip 192.168.1.211   # 本机真实IP
priority 100                # 权重, 优先级越高,数值越大,0-255
advert_int 1                # 1S检查一次
nopreempt                   # 主机崩溃重启后,则抢占
authentication {            # 访问密码,主备相同,才可互访
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {       # 虚拟IP,可多个
192.168.1.212/24

}

}

}


Node配置文件

! Configuration File for keepalived

global_defs {
#notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
## jutao@htdf.cc
# }
# notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
# smtp_server localhost #指定smtp服务器地址
# smtp_connect_timeout 30 #指定smtp连接超时时间
router_id NodeA #运行keepalived机器的一个标识
}

vrrp_script chk_nginx {
script "/opt/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight 2 #如果条件成立的话,则权重 2
}

vrrp_instance VI_1 {
state BACKUP
interface wlan0
virtual_router_id 51
mcast_src_ip 192.168.1.210
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.1.212/24
}

}

8. Nginx状态检查脚本,存放位置/opt/keepalievd/目录下,主备都有

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
`/opt/nginx/sbin/nginx`
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

9. 重启网络与Keepalievd服务

/etc/init.d/netword restart
/etc/init.d/keepalived restart


0x04 测试Keepalived+Nginx

1. 打开浏览器,输入虚拟地址



2. 关掉主服务器(192.168.1.211)Nginx,执行命令

/opt/nginx/sbin/nginx -s stop


3. 打开浏览器,输入虚拟地址



页面仍然显示,则Keepalived+Nginx集群已搭建完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Keepalived Nginx