初期的互联网企业因为业务量较小,因此通常单机部署,实现单点访问便可知足业务的需求,这也是最简单的部署方式,可是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已没法承载现有的业务量,须要进行服务集群化部署,本文主要介绍服务端Tomcat多实例部署,以及如何保证web服务的高可用方案。 html
以下图:为典型的Tomcat服务多实例部署的架构图 java
三. 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构 nginx
2.服务器准备 c++
两台服务器如:192.168.10.11,192.168.10.12 web
3.安装须要的依赖包apache
$ yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel编程
4.安装 后端
4.1 安装Tomcat tomcat
(1)分别在两台服务器中安装Tomcat,解压apache-tomcat-8.5.16.tar.gz及可完成安装。 服务器
4.2 安装Nginx
$ ./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx
$ sudo make && sudo make install
4.3 安装Keepalived
$ ./configure --prefix=/usr/local/keepalived --sysconf=/etc
$ sudo make && sudo make install
5 配置
5.1 分别配置两台服务器的Nginx
#nginx进程数
worker_processes 1;
#单个进程最大链接数
events {
worker_connections 1024;
}
#http服务器配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#长链接超时时间,单位是秒
keepalive_timeout 65;
#upstream负载均衡配置,配置路由到tomcat的服务地址以及权重
upstream localhost{
server 192.168.10.11:8080 weight=2;
server 192.168.10.12:8080 weight=2;
}
#虚拟主机的配置
server {
#监听端口
listen 80;
#域名能够有多个,用空格隔开
server_name localhost;
location / {
root html;
index index.html index.htm;
#nginx跟后端服务器链接超时时间(代理链接超时)
proxy_connect_timeout 3;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 30;
#链接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 30;
proxy_pass http://localhost;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.2 主Keepalived配置
! Configuration File for keepalived
#全局配置
global_defs {
#keepalived切换的时候,发消息到指定的email,可配置多个email
notification_email {
feinik1@foxmail.com
feinik2@foxmail.com
}
#通知邮件从哪一个地址发出
notification_email_from feinik@foxmail.com
#通知邮件的smtp地址
smtp_server smtp.exmail.qq.com
#链接smtp服务器的超时时间,单位秒
smtp_connect_timeout 30
#Keepalived的机器标识,一个网络内保持惟一
router_id nginx-master
}
#执行脚本配置
vrrp_script chk_nginx {
#脚本所在路径
script "/home/project/keepalived/check_nginx.sh"
#脚本执行间隔时间,秒
interval 2
#优先级
weight 2
}
#keepalived实例配置
vrrp_instance VI_1 {
#指定实例的初始状态,MASTER或BACKUP两种状态,而且须要大写
state MASTER
#实例绑定的网卡
interface ens33
#虚拟路由标识,是一个数字,整个VRRP内惟一,若是keepalived配置了主备,须要相同
virtual_router_id 51
#优先级,数值愈大,优先级越高
priority 100
#MASTER与BACKUP之间同步检查的时间间隔,单位为秒
advert_int 1
#通讯验证
authentication {
auth_type PASS
auth_pass feinik
}
#追踪外围脚本
track_script {
#这里配置vrrp_script的名称
chk_nginx
}
#虚拟ip配置,可配置多个
virtual_ipaddress {
192.168.10.200
}
}
5.3 备Keepalived配置
! Configuration File for keepalived
#全局配置
global_defs {
#keepalived切换的时候,发消息到指定的email,可配置多个email
notification_email {
feinik1@foxmail.com
feinik2@foxmail.com
}
#通知邮件从哪一个地址发出
notification_email_from feinik@foxmail.com
#通知邮件的smtp地址
smtp_server smtp.exmail.qq.com
#链接smtp服务器的超时时间,单位秒
smtp_connect_timeout 30
#Keepalived的机器标识,一个网络内保持惟一
router_id nginx-master
}
#执行脚本配置
vrrp_script chk_nginx {
#脚本所在路径
script "/home/project/keepalived/check_nginx.sh"
#脚本执行间隔时间,秒
interval 2
#优先级
weight 2
}
#keepalived实例配置
vrrp_instance VI_1 {
#指定实例的初始状态,MASTER或BACKUP两种状态,而且须要大写
state BACKUP
#实例绑定的网卡
interface ens33
#虚拟路由标识,是一个数字,整个VRRP内惟一,若是keepalived配置了主备,须要相同
virtual_router_id 51
#优先级,数值愈大,优先级越高
priority 99
#MASTER与BACKUP之间同步检查的时间间隔,单位为秒
advert_int 1
#通讯验证
authentication {
auth_type PASS
auth_pass feinik
}
#追踪外围脚本
track_script {
#这里配置vrrp_script的名称
chk_nginx
}
#虚拟ip配置,可配置多个
virtual_ipaddress {
192.168.10.200
}
}
5.4 Nginx状态检查脚本建立
(1)新建Nginx的状态检查脚本:check_nginx.sh
(2)内容以下:
#!/bin/sh
NGINX=/usr/common/nginx/sbin/nginx
PORT=80
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
#这里再次尝试启动NG
$NGINX
sleep 5
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && cd /usr/common/keepalived/sbin && pkill keepalived
echo "stoped"
fi
4 运行测试