Nginx+keepalived高可用
机器
| 192.168.64.129 | keepalived(主) nginx 检测Nginx脚本 |
| 192.168.64.130 | keepalived(从) nginx 检测Nginx脚本 |
| 192.168.64.131 | tomcat-8(8080) tomcat-9(8090) |
| 192.168.64.200 | vip |
安装
yum -y install Nginx
yum -y install keepalived
下载Tomcat安装包 jdk安装包 搭建环境
配置keepalived
keepalived主
vrrp_script chk_http_port {
script "/etc/keepalived/nginx_check1.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER #主
interface ens33 #你对应的网卡名称
virtual_router_id 51 #主从必须一致
priority 100 #优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.200 #vip
}
track_script {
chk_http_port
}
}
keepalived(从)
vrrp_script chk_http_port {
script "/etc/keepalived/nginx_check1.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP #从
interface ens33 #网卡名称
virtual_router_id 51 #主从必须一致
priority 80 #优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.200 #vip
}
track_script {
chk_http_port
}
}
在默认的keepalive.conf里面还有 virtual_server,real_server,这样的配置,我们这用不到,它是为lvs准备的。。
在默认的keepalive.conf里面还有 virtual_server,real_server,这样的配置,我们这用不到,它是为lvs准备的。。
在默认的keepalive.conf里面还有 virtual_server,real_server,这样的配置,我们这用不到,它是为lvs准备的。。
Nginx配置文件
vim /etc/nginx/conf.d/tff.conf
upstream webserver {
#负载均衡
server 192.168.64.131:8080 weight=1; #权重轮询
server 192.168.64.131:8090 weight=2;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
#反向代理
proxy_pass http://webserver;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Tomcat
确保两个端口可以访问
重启服务
keepalived Nginx Tomcat 确保都是正常运行的状态
查看网络
发现只有主keepalived 节点有vip地址 当我们停止主keepalived 节点 发现从 keepalived 节点有vip地址
这就是vip漂移
这就是vip漂移
测试一下是否可以访问
当我们停掉主keepalived节点上Nginx服务会发生什么呢?
肯定报错啦 但是另一个Nginx服务是好的 但是没有起作用 明显不符合高可用
这个时候就可以让keepalived去检测Nginx服务状态 预处理重启Nginx进程 如果重启失败 就停掉Nginx进程服务异常的机器的keepalived服务
这个时候就可以让keepalived去检测Nginx服务状态 预处理重启Nginx进程 如果重启失败 就停掉Nginx进程服务异常的机器的keepalived服务
Nginx检测脚本
| 192.168.64.129 | keepalived(主) nginx 检测Nginx脚本 |
| 192.168.64.130 | keepalived(从) nginx 检测Nginx脚本 |
| 192.168.64.131 | tomcat-8(8080) tomcat-9(8090) |
| 192.168.64.200 | vip |
vim /etc/keepalived/nginx_check1.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/sbin/service nginx start
sleep 3
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
echo "开始停止"
/usr/sbin/service keepalived stop
fi
fi
停掉Nginx服务 使用这个脚本启动Nginx服务 成功了就往下走 (我的Nginx是用yum安装的)
停掉Nginx服务 使用这个脚本启动Nginx服务 成功了就往下走 (我的Nginx是用yum安装的)
为了测试能看到明显效果我们把主从keepalived机器配置文件参数interval改成30秒检测
重启主从keepalived机器服务 停止主keepalived机器节点上的Nginx服务 等待30秒发现Nginx服务启动成功了
再一次测试 我们把主keepalived机器节点上的Nginx服务停掉后启动httpd服务(端口号80) 把Nginx服务端口号80占领了
这样Nginx服务就不会起来了(确保Nginx服务启动失败)根据脚本它会去停掉主keepalived机器服务 从keepalived机器服务(接管)也就成了主似的 vip就进行漂移了
当我们发现主keepalived服务停止了 我们去启动 顺带也会发现Nginx服务异常 再去解决 等下一次检测的时候vip就回到主keepalived机器上了
这样才是我们想要的结果