nginx+keepalived实现高可用
Posted gdpuzxs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+keepalived实现高可用相关的知识,希望对你有一定的参考价值。
(1)准备三台服务器
正常来说,应该准备四台,两台安装ngnix+keeplived实现高可用以及负载均衡,两台做节点服务器,这里78充当一台节点服务器,172.31.113.77(nginx+keepalived),172.31.113.78(nginx+keepalived+tomcat),172.31.113.79(tomcat)。
(2)安装nginx服务器
77,78服务器安装ngnix以及配置负载均衡可以查看之前的博文。
(3)77节点,安装keepalived
1.首先安装keepalived rpm包:popt 以及popt-devel。
2.下载keepalived安装包
cd /usr/local wget http://www.keepalived.org/software/keepalived-1.2.8.tar.gz
3.解压并编译keepalived
tar zvxf /usr/local keepalived-1.2.8.tar.gz cd /usr/local/keepalived-1.2.8 ./configure --prefix=/usr/local/keepalived --sysconf=/etc
执行编辑的时候会报如下Openssl错误:
configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!
解决方案:http://kusix.iteye.com/blog/1226892
4.编译并安装
make && make install
5.启动keepalived
cp /usr/local/keepalived/sbin/keepalived /bin/ chkconfig --add keepalived #设置开机启动 chkconfig keepalived on #启动keepalive服务 /etc/init.d/keepalived start
(4)配置keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
vim /etc/keepalived/keepalived.conf
(1)配置MASTER节点
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script Monitor_Nginx { script "/root/monitor_nginx.sh" #执行脚本路径 interval 2 weight 2 } vrrp_instance VI_1 { state MASTER #标识为MASTER节点,从节点标识BACKUP interface eth0 virtual_router_id 51 #两个节点的ID需要一致 priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.31.113.110 #虚拟IP } track_script { Monitor_Nginx #执行脚本名字 } }
(2)编辑监控脚本monitor_nginx.sh,vim /root/monitor_nginx.sh,内容如下,并赋予执行权限:chmod +x /root/monitor_nginx.sh
#!/bin/bash counter=$(ps -C nginx --no-heading|wc -l) if [ "${counter}" = "0" ]; then # /usr/local/nginx/sbin/nginx # sleep 2 # counter=$(ps -C nginx --no-heading|wc -l) # if [ "${counter}" = "0" ]; then /etc/init.d/keepalived stop # fi fi
到此,keepalived的安装以及配置结束,78备用节点重复上面的操作,只是把配置文件keepalived.conf中的state修改为BACKUP , priority比MASTER稍低即可。
(5)分别启动keepalived,nginx,以及tomcat服务器。
service keepalived restart
在主服务器即78节点,可以通过 ip a查看虚拟IP,显示如下:
(6)测试nginx+keepalive实现高可用
访问172.31.113.110/index.jsp,首先将77服务器的nginx进程杀掉,查看77的keepalived进行也被停止掉了(因为上面我们的脚本当nginx为零的时候,停止keepalived,只有停止keepalived,78备用服务器才能得到虚拟IP),这时候查看78的虚拟IP也为172.31.113.110,继续对外提供服务。
总结:这种方案只能实现当主节点的nginx进程结束了,主节点的脚本monitor_nginx.sh执行后,停止keepalived进程,备用节点才能得到虚拟IP,进而对外继续提供服务。后面测试了一下,直接关闭主节点,备用节点无法得到虚拟IP,无法对外服务。所以当主节点直接宕机的话,这种方案就不可行了,难道这种方案就是高可用?百度搜了好久,都是这样实现的。
以上是关于nginx+keepalived实现高可用的主要内容,如果未能解决你的问题,请参考以下文章