Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码
简介
本文将介绍如何通过Keepalived+Nginx+Tomcat实现高可用Web集群,并提供示例代码。
准备工作
- 3台服务器,主服务器A和两个备份服务器B和C,可任意选择物理机或虚拟机。
- 安装CentOS 7.x操作系统。
- 在每台服务器上安装Nginx和Tomcat,并且确保在Tomcat中正确部署Web应用程序。
Keepalived安装
在A、B和C三台服务器上均需安装Keepalived。以下是安装过程的简略步骤:
- 在每台服务器上安装必备软件包:
shell
yum install gcc kernel-devel kernel-headers make libnl-devel -y
- 下载并解压Keepalived软件包:
shell
wget http://www.keepalived.org/software/keepalived-2.0.19.tar.gz
tar zxvf keepalived-2.0.19.tar.gz
cd keepalived-2.0.19
- 编译和安装Keepalived:
shell
./configure --prefix=/usr/local/keepalived
make && make install
- 配置Keepalived:
在A、B和C三台服务器上都需要配置Keepalived,下面以服务器A为例:
-
在A服务器上创建/etc/keepalived/keepalived.conf文件,写入以下内容:
```conf
global_defs {
router_id LVS_DEVEL
}vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
weight 2
}vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 200
advert_int 1authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.70 } track_script { chk_nginx }
}
```其中,vrrp_instance为Virtual Router Redundancy Protocol(虚拟路由器冗余协议)实例名称,virtual_router_id为虚拟路由器标识符,priority为本机优先级,virtual_ipaddress为虚拟IP地址,chk_nginx为检查nginx的脚本名称。
-
启动Keepalived服务:
shell
/usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf -
检查Keepalived的状态:
shell
ps -ef | grep keepalived
以上是服务器A的示例配置,服务器B和C的配置与A大致相同,只需修改vrrp_instance的state为BACKUP、priority为100即可。
Nginx配置
在每台服务器上均需安装Nginx并配置负载均衡。以下是配置过程的简略步骤:
- 安装Nginx:
shell
yum install nginx -y
- 修改Nginx配置文件/etc/nginx/nginx.conf,增加以下内容:
upstream tomcat {
server 192.168.1.31:8080; # 各个服务器IP地址以及Tomcat端口号
server 192.168.1.32:8080;
server 192.168.1.33:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端真实IP地址
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
}
}
- 启动Nginx服务:
systemctl start nginx
- 检查Nginx的状态:
systemctl status nginx
Tomcat配置
在每台服务器上均需安装Tomcat并部署Web应用程序。以下是部署过程的简略步骤:
- 安装Tomcat:
shell
yum install tomcat -y
- 修改/etc/systemd/system/tomcat.service文件,指定Tomcat的路径和端口号:
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/share/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
ExecStart=/usr/share/tomcat/bin/startup.sh
ExecStop=/usr/share/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
- 启动Tomcat服务:
shell
systemctl start tomcat
示例1:
现在我们来模拟服务器A宕机的情况。在A服务器上停止Keepalived服务,此时B服务器将会接管A服务器的虚拟IP地址。
systemctl stop keepalived
接下来,我们在客户端发起请求,查看负载均衡是否正常:
curl http://192.168.1.70
若可以正常收到响应,则说明B或C服务器已经接管了A的虚拟IP地址,并且Tomcat应用也已经顺利转移。
示例2:
现在我们来尝试关闭Tomcat进程,观察负载均衡的表现。以服务器A为例,首先查找Tomcat进程的PID:
ps aux | grep tomcat
将返回如下结果:
tomcat 1734 1.2 24.9 3015168 254588 ? Sl 08:20 0:55 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-1.el7_9.x86_64/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 1305 0.0 0.0 112680 972 pts/0 S+ 08:36 0:00 grep --color=auto tomcat
将Tomcat的进程ID(PID)记下来,并且杀掉该进程:
kill -9 1734
一段时间后,Tomcat进程会自动重新启动,接下来在客户端发起请求,查看负载均衡是否正常:
curl http://192.168.1.70
若可以正常收到响应,则说明Tomcat进程刚才已经自动重启,Web集群仍然正常工作。
结论
通过以上步骤,我们已经成功地使用Keepalived+Nginx+Tomcat实现了高可用Web集群。这种架构能够保证在出现硬件故障或软件故障时,仍可以实现高可用性,保证了Web应用的稳定性和可靠性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码 - Python技术站