简单介绍:
Nginx 是HTTP反向代理服务器;
Keepalived 主要用来避免服务的单点故障;
Tomcat 轻量级web应用服务器。
架构拓扑图

请求逻辑图

搭建步骤
1、准备工作
系统:
centos7
软件:上传至 /usr/local 目录
1. apache-tomcat-8.5.24.tar.gz
2. nginx-1.12.2.tar.gz
3. keepalived-1.3.9.tar.gz
服务器:
192.168.201.130(Master)
192.168.201.131(Backup)
设置固定IP,必要的话,请自行百度
vim /etc/sysconfig/network
输入如下内容(131服务器类似)
DNS1=192.168.201.130 DNS2=8.8.8.8
重启网卡:
service network restart
2、安装依赖包
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
如果出现错误:
Another app is currently holding the yum lock; waiting for it to exit…
可能是系统自动升级正在运行,yum在锁定状态中,但是kill有时候也杀不掉,那么执行以下命令后,再继续操作:
rm -f /var/run/yum.pid
3、Tomcat 安装
前提:tomcat压缩文件上传至指定位置:
#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压tomcat
tar -zxvf apache-tomcat-8.5.24.tar.gz
#进入tomcat-8.5.24/bin
cd apache-tomcat-8.5.24/bin
#启动tomcat
./startup.sh
如遇到权限不足,则输入su,接着输入密码即可
启动成功后,外网输入ip地址:8080,但是访问不了,则需要关闭防火墙:
#停止firewall systemctl stop firewalld.service #禁止firewall开机启动 systemctl disable firewalld.service #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) firewall-cmd --state
默认端口号为:8080,浏览器访问:
192.168.201.130:8080
192.168.201.131:8080
3、Nginx 安装
#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压安装包
tar -zxvf nginx-1.12.2.tar.gz
#进入nginx-1.12.2目录
cd nginx-1.12.2
#执行编译
./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx
#执行安装
sudo make && sudo make install
修改Nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
内容如下:
#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的服务地址以及权重
#上线后,在130服务器上启动多个实例,upstream配置本机多个实例
upstream localhost{
server 192.168.201.130:8080 weight=2;
server 192.168.201.131: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;
}
}
}
配置完成后,启动Nginx
#进入指定目录
cd /usr/local/nginx/sbin
#验证nginx配置文件是否正确
./nginx -t
#出现 nginx.conf test is successful 则表示成功
#启动nginx
./nginx
#重启nginx
./nginx -s reload
#查看nginx进程
ps -ef|grep nginx
4、Keepalived 安装
#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压安装包
tar -zxvf keepalived-1.3.9.tar.gz
#进入keepalived-1.3.9目录
cd keepalived-1.3.9
#执行编译
./configure --prefix=/usr/local/keepalived --sysconf=/etc
#执行安装
sudo make && sudo make install
#检查一下/etc/keepalived 下有没有配置文件,如果没有,可手动创建
vim /etc/keepalived/keepalived.conf
Master 配置文件:
global_defs {
#hostname
router_id nginx_master
}
vrrp_script chk_nginx {
#检测nginx的脚本
script "/home/keepalived/nginx_check.sh"
#每2秒检测一次
interval 2
#如果某一个nginx宕机 则权重减20
weight -20
}
vrrp_instance VI_1 {
#状态 MASTER BACKUP
state MASTER
#绑定的网卡
interface ens33
#虚拟路由的ID号,两个节点设置必须一样
virtual_router_id 51
#本机的IP
mcast_src_ip 192.168.201.130
priority 90
advert_int 1
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP,两个节点设置必须一样。
virtual_ipaddress {
192.168.201.222
}
# nginx存活状态检测脚本
track_script {
chk_nginx
}
}
Backup配置文件:
global_defs {
#hostname
router_id nginx_backup
}
vrrp_script chk_nginx {
#检测nginx的脚本
script "/home/keepalived/nginx_check.sh"
#每2秒检测一次
interval 2
#如果某一个nginx宕机 则权重减20
weight -20
}
vrrp_instance VI_1 {
#状态 MASTER BACKUP
state BACKUP
#绑定的网卡
interface ens33
#虚拟路由的ID号,两个节点设置必须一样
virtual_router_id 51
#本机的IP
mcast_src_ip 192.168.201.131
priority 90
advert_int 1
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP,两个节点设置必须一样。
virtual_ipaddress {
192.168.201.222
}
# nginx存活状态检测脚本
track_script {
chk_nginx
}
}
创建Nginx服务检测脚本
/home/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
#尝试重新启动nginx
/usr/local/nginx/sbin/nginx
#睡眠2秒
sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
#启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
killall keepalived
fi
fi
配置开机自启
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
#添加到开机自启
chkconfig keepalived on
配置完成后,启动keepalived
#启动Keepalived服务
service keepalived start
#然后再Master机器上查看VIP地址
ip addr
Master机器,可以查看到虚拟IP:192.168.201.222绑定在了ens33(正常为eth0)上;
Backup机器,则没有虚拟ip。
如果启动出现错误,则先排除是否应权限不足引起后,其余问题多半出现在keepalived.conf。
测试
1、正常情况
访问虚拟IP(192.168.201.222:80)
能访问指定服务,即访问 master
> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.130:80(nginx)
> 192.168.201.130:8080(nginx配置的tomcat服务中的其中一个)
2、异常情况
访问虚拟IP(192.168.201.222:80)
master服务异常,即访问 backup
> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.131:80(nginx)
> 192.168.201.131:8080(nginx配置的tomcat服务中的其中一个)
采用监控手段,获取服务器异常报警,及时修复后,启动tomcat服务、nginx服务、keepalived服务,则vip访问将自动切换回master。
补充
需要考虑session同步的问题
命令汇总
#启动tomcat,进入 /usr/local/tomcat-8.5.24/bin
./startup.sh
#重启nginx,进入/usr/local/nginx/sbin目录
./nginx -s reload
#刷新systemctl配置
systemctl daemon-reload
#停止keepalived服务
service keepalived stop
#启动keepalived服务
service keepalived start
#重启keepalived服务
service keepalived restart
#查看keepalived进程
ps -aux |grep keepalived
#修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
以上内容均来自于百度,但确实是经过自己实践所得,希望让大家能够更简单的使用此架构。
参考1: https://my.oschina.net/feinik/blog/1590941
参考2: https://my.oschina.net/xshuai/blog/917097
渣渣成长之路: 主管检查后发现说, 这样:m.put("jmx.remote.x.client.connection.check.period", 0L); 不好,不能这么搞! 这个是心跳请求,每一分钟检查jmx是否还有连接,设置为0L之后呢就没有了检查, 可能导致前台状态显示不正确,风险,,,,。。 会吗, 我认为不是这样的,不是每次都会重新连接jmx查询的吗,, 可是。。。 我晕, , 这么干 不是挺好的吗
TNTSEO: 求教程 牛逼了
qq_40416250: 你好,我读到你关于奥豪斯电子秤的数据采集解决方案,我们实验室有一台奥豪斯的电导率仪,但是数据采集有问题,方便向你请教下吗
随风...: 感谢解惑
默然燃夏: 晕了,怎么一会说不能将ref属性用于函数式组件一会又说可以在函数式组件中使用ref