初期应用小,一般以单机部署为主,可以满足业务需求。随着业务的不断扩展,单机部署模式无法承载如此大的业务量,需要服务集群部署。本文主要介绍服务器Tomcat多实例部署,搭载Keepalived+Nginx,实现Web服务的高可用。Nginx是一个高性能的HTTP反向代理服务器。Keepalived是一种基于VRRP协议的服务高可用解决方案。我们的网络服务器可以水平扩展。这时候反向代理服务器(Nginx)就变成了单点。如果挂了,集成的web服务器就不能被外界访问了;所以我们需要结合Keepalived来保障反向代理服务器(Nginx)的高可用;环境准备CentOS7系统Keepalived-2.0.15Nginx-1.14.2Tomcat8准备2台服务器,每台服务器部署安装Nginx+Keepalived和Tomcat,另外一个VIP(虚拟IP);这里21、Nginx安装2、Keepalived安装3、配置Keepalived+Nginx在2台准备好的服务器上实现高可用,一台作为MASTER,一台作为BACKUP;每台机器都需要准备如下图所示的文件来实现下面的约定,上面的安装脚本也是按照这个执行的1.keepalived和nginx都编译安装在/usr/local目录下,名字是keepalived和nginx2分别。ck_ng.sh、keepalived.conf文件放在/etc/keepalived/目录下,ck_ng.sh文件权限设置为7553。nginx.service、keepalived.service文件放在/usr/lib/systemd/system目录下3.1、MASTER配置keepalived.conf配置global_defs{#notification_email{#localhost@163.com#}#notification_email_fromKeepalived@localhost#smtp_server163@smtp.com#smtp_connect_timeout30router_id192.168.1.101#MASTER服务器IP地址}#配置vrrp_script,主要是健康检查,以及检查失败时要执行的操作。vrrp_scriptchk_nginx{#健康检查脚本,当脚本返回值不为0时,认为是失败脚本"/etc/keepalived/ck_ng.sh"#检查频率,下面配置每2秒检查一次interval2#当检查失败,vrrp_instance优先级降低5weight-5#连续监控失败3次才算真正的健康检查失败。并调整fall3的优先级#连续监听2个成功,就认为成功了。但不要调整优先级rise2}#定义对外提供服务的VIPvrp_instance配置vrrp_instanceVI_1{#指定vrrp_instance的初始状态,是MASTER还是BackUP主要看优先级。stateMASTER#指定vrrp_instance绑定的网卡,最后声明VIPinterfaceifcfg-eth0#心跳包的源IP可以用来绑定网卡IP或者本服务器上的其他IPmcast_src_ip192.168.1.101#相当于VRID,它用于区分网络内的组播,需要在组播域内唯一。virtual_router_id55#本机的优先级,在VRID相同的机器中,优先级最高的会被选为MASTERpriority100#心跳间隔,如下配置,MASTER会每隔1秒向高职的其他机器发送消息群,而你还活着。advert_int1#定义主从认证方式和密码,一般使用PASS(最多8位,超过8位会被识别为密码)authentication{auth_typePASSauth_pass123456}#VIP虚拟IP池,两个节点设置必须相同virtual_ipaddress{192.168.1.100/24}#这个vrrp_instance引用的脚本配置,名字是vrrp_script定义的容器名track_script{chk_nginx}#状态切换,使用上面的配置发送邮件通知smtp_alert}ck_ng.sh配置keepalived.service配置nginx.service配置3.2、BACKUP配置keepalived.conf配置(类似MASTER,列出区别)global_defs{router_id192.168.1.102}#定义对外提供服务的VIPvrrp_instance配置vrrp_instanceVI_1{#指定vrrp_instance的初始状态,是否是MASTER还是BackUP主要看优先级。stateBACKUP#发送心跳包的源IP可以使用绑定的网卡IP或者服务器上的其他IP。mcast_src_ip192.168.1.102#机器的优先级,在VRID相同的机器中,选举优先级最高的配置MASTERpriority99}ck_ng.sh(与MASTER一致)keepalived.service配置(与MASTER一致)nginx.service配置(与MASTER一致)3.3、Tomcat服务通过反向代理对外提供服务NginxTomcat安装和应用部署不再做具体描述,主要看一下如何通过Nginx配置实现对外服务(Nginx都是通过Nginx完成的)这样的配置)nginx.conf配置#upstreamconfigureupstreammyapp{ip_hash;server192.168.1.101:8080;#Tomcatapplication.102:8080;#Tomcatapplication}server{listen8888;#假设服务端口是对外提供的server_namelocalhost;port_in_redirecton;location/app1#Tomcat下的一个应用{proxy_passhttp://myapp/app1;proxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"upgrade";proxy_set_headerHost$host:$server_port;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}location/app2#Tomcat下的另一个应用{proxy_passhttp://myapp/app2;proxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection“升级”;proxy_set_headerHost$host:$server_port;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}location/{proxy_passhttp://myapp;proxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"升级";proxy_set_host$server_port;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}}通过以上构建可以实现高可用和负载均衡的集群部署方案
