在博文《智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置》中介绍了Nginx的安装及相关配置的信息,由于篇幅原因不能用一篇博文描述完,这篇接着为大家分享其中的一个非常重要的模块Keepalived的安装及相关配置。
一、郑重声明
本篇博文的前导博文为《智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置》,严重建议大家在看完前导博文的基础上再来看这篇博文;
二、我眼中的Keepalived
1、刚开始接触Keepalived的时候感觉一脸懵逼,感觉无从下手,从网上查阅资料普及这方面知识开始,好在这个技术已经十分成熟,网上有很轻松可以找到很多参考资料,在研究的过程中对它的理解越加的深刻,同时也联想到之前自己看过一些高可靠的资料;
2、逐渐在脑海中勾勒出一幅图,而这个线索是我对一个问题的思考不断摸索出来:
(1)过程:如何保证高可靠
如果宕机了怎么样在不受影响的情况下自动切换上去?
Keepalived的恰巧解决了这个问题
用图来展示
三、安装之路
1、Keepalived安装前需要的环境:wget、gcc、opensll、zlib、popt-devel(其中前四个已在Nginx安装配置中讲解过,在此只将popt-devel)
(1)popt-devel 用于从外网上下载插件
①检查系统中是否已经安装popt,使用命令man popt 若出现下图popt相关描述则说明系统中已经安装popt 若报系统找不到命令说明popt未安装
②若popt未安装则进行安装,安装命令: yum install –y popt-devel
2、Keepalived的安装及配置:
(1)进入一个目录(随便一个目录即可,用来存放下载的Keepalived的包,在此以/root目录为例)命令:cd /root
(2)下载最新稳定版本(目前最新版本为keepalived-1.3.4通过官网http://www.keepalived.org/softwar命令:wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz
(3)解压keepalived-1.3.4.tar.gz 命令: tar -zxvf keepalived-1.3.4.tar.gz
(4)进入刚解压的目录 命令:cd keepalived-1.3.4
(5)进行相关配置(后半部分指定安装目录)命令:./configure -prefix=/usr/local/keepalived-1.3.4
若出现问题:
解决办法:
a.对rpm进行清理 命令: yum clean all
b.重新安装openssl 命令: yum install -y openssl openssl-devel
c.重新执行命令:./configure -prefix=/usr/local/keepalived-1.3.4
(6)编译和安装 命令:make && make install
(7)建立服务启动脚本,以便使用service命令控制 命令:
cp /root/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
(8)由于安装使用非默认路径(本教程中使用的/usr/local/keepalived-1.3.4)故需修改相关路径,保证keepalived能正常启动;文件 /etc/init.d/keepalived 大约15行位置将. /etc/sysconfig/keepalived 修改为. /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived
(9)配置环境变量(将keepavlied主程序所在路径导入到环境变量PATH中)命令: vi /etc/profile 加入相关内容export PATH=/usr/local/keepalived-1.3.4/sbin:$PATH(其中# add keepalived path为注释)
(10)用命令:source /etc/profile 使修改的环境变量生效
用命令: export 进行检查:
(10)建立可执行文件链接 命令: ln -s /usr/local/keepalived-1.3.4/sbin/keepalived /usr/sbin/
(11)修改keepalived配置文命令: vi /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf
参考文章: 架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层配置文件keepalived.conf详解
(12)编写配置文件中涉及到的监控Nginx脚本;(本教程以目录是在/usr/local/keepalived-1.3.4 下创建nginx_check.sh为例)
①创建文件命令:vi /usr/local/keepalived-1.3.4/nginx_check.sh
②编写内容并保存:
脚本如下也可直接使用(nginx_check.sh):
nxPidNum=`ps -C nginx --no-header |wc -l`
keepalivedPidNum=`ps -C keepalived --no-header |wc -l`
if [ $nxPidNum -eq 0 ];then
/usr/local/nginx-1.10.3/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
elif [$keepalivedPidNum -eq 0 ];then
service keepalived start
fi
elif [ $keepalivedPidNum -eq 0 ];then
service keepalived start
fi
③进入到相应目录下将监控Nginx编写的脚本提升权限为可执行文件,本例以/usr/local/keepalived-1.3.4 目录下的nginx_check.sh为例;命令: chmod +x nginx_check.sh 再检查看文件是否变颜色,变颜色则说明为可执行文件
(13)修改相应文件,设置正确启动参数命令:vi /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived 修改的路径为安装路径下的配置文件修改内容: KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf"
(14)将修改好的keepalived拷贝到/etc/etc/sysconfig 目录下 命令:
cp /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived /etc/sysconfig/
(15)测试:
①启动 命令: service keepalived start
②查看keepalived运行状态,命令: service keepalived status
③停止keepalived 命令: service keepalived stop
(16)遇到问题和解决方案:
① 问题:启动服务失败
② 查找方案:
A.查看状态
B.查看keepalived配置文件 默认是在/var/log/messages中命令: tail -f /var/log/messages
C.提示应该是配置文件的问题,核实配置文件,发现网卡写错了
D.检查本机网卡的命令:ip addr 改正后即可
(17)扩展:对Keepalived的日志输出进行指定(非必做步骤):
①原因: 以前配置keepalived时候所有的日志都是写入到/var/log/message下的,由于message的日志太多了而keepalived的日志又很那分离出来。
②操作步骤:
A.修改/etc/sysconfig目录下的keepalived文件,命令: vi /etc/sysconfig/keepalived,将KEEPALIVED_OPTIONS修改为KEEPALIVED_OPTIONS="-f /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf -D -d -S 0"
B.修改/etc下的rsyslog.conf文件,命令: vi /etc/rsyslog.conf,进行如下的修改需要注意的是重定位的日志目录/var/log下没问题,其他目录会有问题
C.重启系统的日志服务 命令: service rsyslog restart
③测试:
A.将Keepalived服务重启
B.查看文件是否存在,若存在则说明日志修改成功 命令: vi /var/log/keepalived.log
④参考文章:
keepalived日志
修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径
1、配置Nginx配置文件,224和229除IP不同外其他都相同
2、Keepalived的配置文件都相同,和上面讲解Keepalived相同
3、进行相关的验证:
(1) Keepalived+Nginx实现虚拟IP+反向代理验证:
①实验效果图:
②将224和229上的Nginx和Keepalived都启动起来
检验命令: ps -ef | grep nginx 和ps -ef | grep keepalived
③用浏览器进行相关访问
访问: http://192.168.22.145:8899/a/logs/
访问: http://192.168.22.145:8899/b/cas/login
④注意若访问不通则进行以下排查:
A.访问Nginx被代理的真实网站地址是否通,在本教程中为http://192.168.21.17:8011/logs/ 和http://192.168.22.203:8888/cas/login 若不通则说明应用服务有问题进行排查,一般原因:a.服务器的防火墙和本地防火墙是否关闭或开放相应的端口 b.网站本身是否启动
B.访问Nginx是否能正确代理到,在本教程(以Keepalived主节点229所在Nginx上为例)中为http://192.168.22.229:8899/b/cas/login 和http://192.168.22.229:8899/a/logs/ 若有问题则一般原因有:a.Nginx服务未启动或修改配置文件后未重新启动Nginx b.Nginx配置文件写的有问题 c.Nginx所在服务器和客户机的防火墙是否关闭或所监听的端口是否开放
C.若AB两步均没有问题,但是访问http://192.168.22.145:8899/a/logs/ 或http://192.168.22.145:8899/b/cas/login 还有问题则说明Keepalived存在问题 一般原因有:a.主和从的keepalived是否都关闭 检验方法在下面的(2)步会提到 b.Keepalived的配置文件是否有问题 c.Keepalived所在服务器的防火墙是否关闭
(2)Keepalived心跳检测验证(Keepalived 的高可用特性验证)[注:以下查看日志方式若将keepalived的日志配置重定向也可在指定的位置看更具有针对性,下面演示为了满足通用性还以在message中看为例]
A.在(1)步骤基础上来做,先用命令(tail -f /var/log/messages)分别查看229和224上的日志文件如下:
229的日志
224的日志
B.将229的Keepalived挂掉(在此由于Keepalived的检测Nginx的脚本中让Nginx不断启动在此用停止Keepalived的方式来229节点出故障)
①在229上将Keepalived停掉
停止命令: service keepalived stop
查看状态命令: service keepalived status
②查看229和224上的配置文件
229上的日志文件:
224上的日志文件:
③测试网站发现依然可以正常访问
http://192.168.22.145:8899/a/logs/
http://192.168.22.145:8899/b/cas/login
④将229上的keepalived重新启动 命令: service keepalived start
⑤分别查看229和224上的keepalived的日志
229上日志---重新成为主节点
224上的日志---重新成为备份节点
⑥测试网站仍可以正常访问
http://192.168.22.145:8899/a/logs/
http://192.168.22.145:8899/b/cas/login
五、Keepalived+Nginx总结
1、利用Keepalived心跳检测及虚拟IP机制实现系统的高可用,利用Nginx实现反向代理。
2、可以扩展的地方:
(1)应用服务器如果是集群形式的话也可以用Nginx来做负载,这样来分压。
(2)如果Nginx正常的话224上的备份Keepalived和Nginx就处于闲置状态解决办法:
①采用DNS轮循(参考:LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡 和DNS部署(四)之lvs+keepalived+bind架构高可用负载均衡DNS系统);
②如果不做DNS轮循的话可以让224做些其他的事情来利用起来资源。
1、经过一路的探索,收获许多;
2、多动手,多去验证,带着一颗好奇的心去做事。