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

nginx+keepalived实现HA

2016-12-27 13:03 218 查看

nginx+keepalived实现HA

版本号:

Linux系统:CentOS 6.8

nginx:1.10.2

keepalived:1.3.2

首先通过官网下载nginx和keepalived

http://nginx.org/下载nginx最新版本,当前最新版本nginx-1.11.7,稳定版本1.10.2.

http://www.keepalived.org/下载keepalived最新版本,当前时间的最新版本为1.3.2

安装nginx

将下载的nginx-1.10.2.tar.gz通过ftp放在centos系统下。

运行 tar -zxvf nginx-1.10.2.tar.gz解压

cd nginx-1.10.2

./configure (需安装gcc,通过yum install gcc)



此提示需要安装pcre-devel,可以通过yum install pcre-devel获取



此提示需要安装zlib-devel,可以通过yum install zlib-devel获取

运行./configure



出现如图所示,nginx位置在/usr/local/nginx

运行make install

通过./usr/local/nginx/sbin/nginx运行nginx

通过/usr/local/nginx/conf/nginx.conf修改nginx的配置

nginx添加开机启动

在/etc/init.d中添加nginx文件,内容如下:

# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/nginx/nginx.pid
# config: /etc/nginx/nginx.conf
nginxd=/usr/sbin/nginx    #这里写nginx执行程序位置
nginx_config=/etc/nginx/nginx.conf  #这里写nginx配置文件位置
nginx_pid=/var/nginx/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -rf /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL


chmod +x /etc/init.d/nginx,为nginx添加可执行权限

chkconfig –add nginx 添加nginx到service服务中。

chkconfig nginx on 添加开机启动

执行service nginx start,查看结果。



安装keepalived

tar -zxvf keepalived-1.3.2.tar.gz解压相应文件

cd keepalived-1.3.2,进入解压文件夹中

./configure –prefix=/usr/local/keepalived



出现这个提示,则需要安装openssl-devel(运行 yum install openssl-devel)



成功则出现上面提示

make && make install

此时成功安装keepalived

运行keepalived

/usr/local/keepalived/sbin/keepalived为运行文件(默认配置文件位置为:/etc/keepalived/keepalived.conf,因此不修改配置的情况下,需要将/usr/local/keepalived/etc/keepalived/keepalived.conf复制过去.)

keepalived.conf配置如下

! Configuration File for keepalived

global_defs {
notification_email {
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_script chk_nginx {
script "/home/check_nginx.sh" #监听nginx的脚本位置
interval 2
weight 2
}

vrrp_instance VI_1 {
state MASTER      #BACKUP/MASTER
interface eth0    #监听网卡配置
virtual_router_id 50 #此处所有keepalived应该一样
mcast_src_ip 192.168.0.244 #本机IP地址
priority 99  #此处BACKUP应该比MASTER值低
advert_int 1

authentication {
auth_type PASS     #认证方式
auth_pass 111111   #认证密码
}

track_script {
chk_nginx  #执行监测nginx脚本
}

virtual_ipaddress {
192.168.0.240/24 #虚拟IP地址
}
}


在/home中添加check_nginx.sh文件,并添加执行权限

chmod +x check_nginx.sh添加执行权限

check_nginx.sh代码:

#!/bin/bash
# 监控脚本功能概述:首先检查进程中的nginx进程数目,如果不存在(即为0),则表示nginx未开启,然后开启nginx,3秒后重新检查nginx进程数,若仍为0,
# 则表示nginx无法正常启动,此时强制停止keepalived进程,让虚拟ip切换到backup服务器上
A=`ps -C nginx --no-header |wc -l`
## 查看是否有 nginx进程 把值赋给变量A(注意:这里不是单引号,而是主键盘数字1左边的键"点")
if [ $A -eq 0 ];
then        ## 如果没有nginx进程,即值为零
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
pkill keepalived    ## 则结束 keepalived 进程,使得服务器切换到BACKUP服务器上
fi
fi


./usr/local/keepalived/sbin/keepalived启动keepalived

测试结果:

在每一台机器中的/usr/local/nginx/html/index.html中添加一段标识码

<p><em>This is 192.168.0.241</em></p>


<p><em>This is 192.168.0.242</em></p>


<p><em>This is 192.168.0.244</em></p>


启动nginx,启动keepalived。

在浏览器上打开192.168.0.240



关闭MASTER上的keepalived,模拟机器挂掉

在master的机器上执行pkill keepalived

重新访问,结果如下:



可以得知:

当master挂掉之后,priority值高的将接管。

当master没挂,备用机冗机不影响。

这时候就组成了基本的nginx+keepalived集群。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx