keepalived+nginx+tomcat实现高可用web集群
一、nginx的安装过程
1.下载nginx安装包,安装依赖环境包
/usr/local/nginx/nginx-1.12.2
[root@localhostnginx-1.12.2]whereisnginx
[root@localhostnginx-1.12.2]#
进入nginx子目录sbin启动nginx
[root@localhostsbin]#https://www.fruan.com/post/nginx&
[root@localhostsbin]ps-aux|grepnginx
root57690.00.020484608?ss14:030:00nginx:masterprocesshttps://www.fruan.com/post/nginx
nobody57700.00.0230121620?s14:030:00nginx:workerprocess
root57960.00.0112668972pts/0r+14:070:00grep--color=autonginx
[1]+完成https://www.fruan.com/post/nginx
[root@localhostsbin]vim/etc/rc.d/init.d/nginx
#!/bin/sh
#nginx-thisscriptstartsandstopsthenginxdaemon
#description:nginxisanhttp(s)server,http(s)reverse\
#proxyandimap/pop3proxyserver
#config:/etc/nginx/nginx.conf
#config:/usr/local/nginx/conf/nginx.conf
#pidfile:/usr/local/nginx/logs/nginx.pid
./etc/rc.d/init.d/functions
#sourcenetworkingconfiguration.
#checkthatnetworkingisup.
["$networking"="no"]&&exit0
nginx="/usr/local/nginx/sbin/nginx"
nginx_conf_file="/usr/local/nginx/conf/nginx.conf"
[-f/etc/sysconfig/nginx]&&./etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
user=`$nginx-v2>&1|grep"configurearguments:"|sed's/[^*]*--user=\([^]*\).*//g'-`
if[-z"`grep$user/etc/passwd`"];then
useradd-m-s/bin/nologin$user
options=`$nginx-v2>&1|grep'configurearguments:'`
if[`echo$opt|grep'.*-temp-path'`];then
value=`echo$opt|cut-d"="-f2`
mkdir-p$value&&chown-r$user$value
[-f$nginx_conf_file]||exit6
daemon$nginx-c$nginx_conf_file
[$retval-eq0]&&touch$lockfile
[$retval-eq0]&&rm-f$lockfile
$nginx-t-c$nginx_conf_file
rh_status>/dev/null2>&1
echo$"usage:$0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
esac
为启动脚本授权并加入开机启动
[root@localhostinit.d]#chmod-r777/etc/rc.d/init.d/nginx
[root@localhostinit.d]echo'exportpath=$path:/usr/local/nginx/sbin'>>/etc/profile&&source/etc/profile
nginx命令[servicenginx(start|stop|restart)]
[root@localhostinit.d]#servicenginxstart
startingnginx(viasystemctl):[确定]
tips:快捷命令
servicenginx(start|stop|restart)
二、keepalived安装和配置
yuminstall-yopenssl-devel
2.编译keepalived并安装
[root@localhostkeepalived-1.3.9]#https://www.fruan.com/post/configure
[root@localhostkeepalived-1.3.9]mkdir/etc/keepalived
[root@localhostetc]mkdir/etc/keepalived
[root@localhostetc]#cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
[root@localhostetc]ln-s/usr/local/keepalived/sbin/keepalived/usr/sbin/
设置keepalived开机自启动
[root@localhostsysconfig]#chkconfigkeepalivedon
注意:正在将请求转发到“systemctlenablekeepalived.service”。
createdsymlinkfrom/etc/systemd/system/multi-user.target.wants/keepalived.serviceto/usr/lib/systemd/system/keepalived.service
启动keepalived服务
[root@localhostkeepalived]killallkeepalived
三、集群规划和搭建
环境准备:
keepalivedversion1.4.0-december29,2017
nginxversion:nginx/1.12.2
| 虚拟机 | ip | 说明 |
|---|---|---|
| keepalived+nginx1[master] | 192.168.43.101 | nginxserver01 |
| keeepalived+nginx[backup] | 192.168.43.102 | nginxserver02 |
| tomcat01 | 192.168.43.103 | tomcatwebserver01 |
| tomcat02 | 192.168.43.104 | tomcatwebserver02 |
| vip | 192.168.43.150 | 虚拟漂移ip |
1.更改tomcat默认欢迎页面,用于标识切换web
更改tomcatserver01节点root/index.jsp信息,加入tomcatip地址,并加入nginx值,即修改节点192.168.43.103信息如下:
<h1>${pagecontext.servletcontext.serverinfo}(192.168.224.103)<%=request.getheader("x-nginx")%></h1>
</div>
更改tomcatserver02节点root/index.jsp信息,加入tomcatip地址,并加入nginx值,即修改节点192.168.43.104信息如下:
<h1>${pagecontext.servletcontext.serverinfo}(192.168.224.104)<%=request.getheader("x-nginx")%></h1>
</div>
2.启动tomcat服务,查看tomcat服务ip信息,此时nginx未启动,因此request-header没有nginx信息。
3.配置nginx代理信息
1.配置master节点[192.168.43.101]代理信息
server192.168.43.103:8080weight=1;
server192.168.43.104:8080weight=1;
proxy_set_headerx-nginx"nginx-1";
}
2.配置backup节点[192.168.43.102]代理信息
server192.168.43.103:8080weight=1;
server192.168.43.104:8080weight=1;
proxy_set_headerx-nginx"nginx-2";
}
3.启动master节点nginx服务
[root@localhostinit.d]#servicenginxstart
startingnginx(viasystemctl):[确定]
此时访问192.168.43.101可以看到103和104节点tcomat交替显示,说明nginx服务已经将请求负载到了2台tomcat上。
4.同理配置backup[192.168.43.102]nginx信息,启动nginx后,访问192.168.43.102后可以看到backup节点已起到负载的效果。
4.配置keepalived脚本信息
1.在master节点和slave节点/etc/keepalived目录下添加check_nginx.sh文件,用于检测nginx的存货状况,添加keepalived.conf文件
check_nginx.sh文件信息如下:
d=`date--datetoday+%y%m%d_%h:%m:%s`
n=`ps-cnginx--no-heading|wc-l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
/etc/rc.d/init.d/nginxstart

echo"$dnginxdown,keepalivedwillstop">>/var/log/check_ng.log
fi
添加完成后,为check_nginx.sh文件授权,便于脚本获得执行权限。
[root@localhostkeepalived]#chmod-r777/etc/keepalived/check_nginx.sh
2.在master节点/etc/keepalived目录下,添加keepalived.conf文件,具体信息如下:
script"/etc/keepalived/check_nginx.sh"//检测nginx进程的脚本
statemaster#标示状态为master备份机为backup
interfaceens33#设置实例绑定的网卡(ipaddr查看,需要根据个人网卡绑定)
virtual_router_id51#同一实例下virtual_router_id必须相同
mcast_src_ip192.168.43.101
priority250#master权重要高于backup比如backup为240
advert_int1#master与backup负载均衡器之间同步检查的时间间隔,单位是秒
auth_typepass#主从服务器验证方式
virtual_ipaddress{#设置vip
192.168.43.150#可以多个虚拟ip,换行即可
}
3.在backup节点etc/keepalived目录下添加keepalived.conf配置文件
script"/etc/keepalived/check_nginx.sh"//检测nginx进程的脚本
statebackup#标示状态为master备份机为backup
interfaceens33#设置实例绑定的网卡(ipaddr查看)
virtual_router_id51#同一实例下virtual_router_id必须相同
mcast_src_ip192.168.43.102
priority240#master权重要高于backup比如backup为240
advert_int1#master与backup负载均衡器之间同步检查的时间间隔,单位是秒
auth_typepass#主从服务器验证方式
virtual_ipaddress{#设置vip
192.168.43.150#可以多个虚拟ip,换行即可
}
tips:关于配置信息的几点说明
state-主服务器需配成master,从服务器需配成backup
interface-这个是网卡名,我使用的是vm12.0的版本,所以这里网卡名为ens33
mcast_src_ip-配置各自的实际ip地址
priority-主服务器的优先级必须比从服务器的高,这里主服务器配置成250,从服务器配置成240
virtual_ipaddress-配置虚拟ip(192.168.43.150)
authentication-auth_pass主从服务器必须一致,keepalived靠这个来通信
virtual_router_id-主从服务器必须保持一致
5.集群高可用(ha)验证
step1启动master机器的keepalived和nginx服务
[root@localhostkeepalived]#keepalived-d-f/etc/keepalived/keepalived.conf
[root@localhostkeepalived]ps-aux|grepnginx
root63900.00.020484612?ss19:130:00nginx:masterprocess/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf
nobody63920.00.0230081628?s19:130:00nginx:workerprocess
root69780.00.0112672968pts/0s+20:080:00grep--color=autonginx
查看keepalived启动进程
[root@localhostkeepalived]#ps-aux|grepkeepalived
root64020.00.0459201016?ss19:130:00keepalived-d-f/etc/keepalived/keepalived.conf
root64030.00.0480441468?s19:130:00keepalived-d-f/etc/keepalived/keepalived.conf
root64040.00.0501281780?s19:130:00keepalived-d-f/etc/keepalived/keepalived.conf
root70040.00.0112672976pts/0s+20:100:00grep--color=autokeepalived
使用ipadd查看虚拟ip绑定情况,如出现192.168.43.150节点信息则绑定到master节点
[root@localhostkeepalived]#ipadd
1:lo:<loopback,up,lower_up>mtu65536qdiscnoqueuestateunknownqlen1
link/loopback00:00:00:00:00:00brd00:00:00:00:00:00
inet127.0.0.1/8scopehostlo
valid_lftforeverpreferred_lftforever
valid_lftforeverpreferred_lftforever
2:ens33:<broadcast,multicast,up,lower_up>mtu1500qdiscpfifo_faststateupqlen1000
link/ether00:0c:29:91:bf:59brdff:ff:ff:ff:ff:ff
inet192.168.43.101/24brd192.168.43.255scopeglobalens33
valid_lftforeverpreferred_lftforever
inet192.168.43.150/32scopeglobalens33
valid_lftforeverpreferred_lftforever
inet6fe80::9abb:4544:f6db:8255/64scopelink
valid_lftforeverpreferred_lftforever
inet6fe80::b0b3:d0ca:7382:2779/64scopelinktentativedadfailed
valid_lftforeverpreferred_lftforever
inet6fe80::314f:5fe7:4e4b:64ed/64scopelinktentativedadfailed
valid_lftforeverpreferred_lftforever
3:virbr0:<no-carrier,broadcast,multicast,up>mtu1500qdiscnoqueuestatedownqlen1000
link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff
inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr0
valid_lftforeverpreferred_lftforever
4:virbr0-nic:<broadcast,multicast>mtu1500qdiscpfifo_fastmastervirbr0statedownqlen1000
link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff
step2启动backup节点nginx服务和keepalived服务,查看服务启动情况,如backup节点出现了虚拟ip,则keepalvied配置文件有问题,此情况称为脑裂。
[root@localhostkeepalived]#clear
[root@localhostkeepalived]#ipadd
1:lo:<loopback,up,lower_up>mtu65536qdiscnoqueuestateunknownqlen1
link/loopback00:00:00:00:00:00brd00:00:00:00:00:00
inet127.0.0.1/8scopehostlo
valid_lftforeverpreferred_lftforever
valid_lftforeverpreferred_lftforever
2:ens33:<broadcast,multicast,up,lower_up>mtu1500qdiscpfifo_faststateupqlen1000
link/ether00:0c:29:14:df:79brdff:ff:ff:ff:ff:ff
inet192.168.43.102/24brd192.168.43.255scopeglobalens33
valid_lftforeverpreferred_lftforever
inet6fe80::314f:5fe7:4e4b:64ed/64scopelink
valid_lftforeverpreferred_lftforever
3:virbr0:<no-carrier,broadcast,multicast,up>mtu1500qdiscnoqueuestatedownqlen1000
link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff
inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr0
valid_lftforeverpreferred_lftforever
4:virbr0-nic:<broadcast,multicast>mtu1500qdiscpfifo_fastmastervirbr0statedownqlen1000
link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff
step4关闭masterkeepalived服务和nginx服务,访问web服务观察服务转移情况
[root@localhostkeepalived]#killallkeepalived
[root@localhostkeepalived]#servicenginxstop
此时强制刷新192.168.43.150发现页面交替显示103和104并显示nginx-2,vip已转移到192.168.43.102上,已证明服务自动切换到备份节点上。
step5启动masterkeepalived服务和nginx服务
此时再次验证发现,vip已被master重新夺回,并页面交替显示103和104,此时显示nginx-1
四、keepalived抢占模式和非抢占模式
keepalived的ha分为抢占模式和非抢占模式,抢占模式即master从故障中恢复后,会将vip从backup节点中抢占过来。非抢占模式即master恢复后不抢占backup升级为master后的vip。
1>在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip
2>节点的state都为backup两个keepalived节点都启动后,默认都是backup状态,双方在发送组播信息后,会根据优先级来选举一个master出来。由于两者都配置了nopreempt,所以master从故障中恢复后,不会抢占vip。这样会避免vip切换可能造成的服务延迟。
以上就是如何用Keepalived+Nginx+Tomcat实现高可用Web集群的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--keepalived和nginx做集群
本文地址:https://www.idcbaba.com/guowai/4234.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



