nginx+keepalived实现主从模式双机热备份

主从模式就是一台机器提供服务,另一台机器作为备份机,当主机的服务停止时,备份机立刻接替主机的服务。

安装#

  • 安装nginx
Copy
wget http://nginx.org/download/nginx-1.19.6.tar.gz tar -zxvf nginx-1.19.6.tar.gz cd nginx-1.19.6 # 编译安装 ./configure make && make install
  • 安装keepalived
    编译安装会出错,直接使用yum安装
Copy
yum install -y keepalived

nginx 负载均衡#

一共两个tomcat服务,分别位于两台服务器上。用nginx负责两个服务的负载均衡。再用轮询的方式。映射关系如下:

  • 注意tomcat的服务名称不能含有下划线,比如 tomcat_servers ,否则会报错。
  • 可以更改 webapps/ROOT/index.jsp文件,部署成功后,访问192.168.158.3可以看到内容在两个tomcat之间切换。
Copy
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 配置tomcat服务 upstream tomcatservers{ server 192.168.158.3:8080 weight=1; # 访问服务的权重 server 192.168.158.4:8080 weight=2; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://tomcatservers; # 配置代理关系 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

keepalived 实现映射虚拟vip#

通过映射一个虚拟的ip(vip)到已有的两台机器上,实现ip的“飘移”。虚拟ip本身不代表任何服务器,正常情况下vip映射到主机上,当主机停止服务后,vip就映射到备份机上。

  • 修改 /etc/keepalived/keepalived.conf 配置文件
Copy
! Configuration File for keepalived # 检查nginx状态的脚本 vrrp_script ckeck_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 } # 配置虚拟ip vrrp_instance VI_1 { state MASTER # 主机-MASTER,备份机-BACKUP interface ens33 # 网卡名称 virtual_router_id 51 # 同一组服务用id相同 priority 100 # 主机的优先级应高于backup advert_int 1 # master和backup的同步时间 authentication { # 认证信息 auth_type PASS auth_pass 1111 } track_script { # 上面配置的脚本 ckeck_nginx } virtual_ipaddress { # 配置虚拟ip,可配置多个,一行一个 192.168.158.10 192.168.158.20 } }
  • backup机器的配置如下,和master基本一致。
Copy
! Configuration File for keepalived vrrp_script ckeck_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { ckeck_nginx } virtual_ipaddress { 192.168.158.10 192.168.158.20 } }
  • 这里用到的检查脚本如下,他用来检查nginx的状态,当nginx停止服务后,尝试重启服务。如果启动失败,就停止keepalived服务。重新映射vip到backup机器上。
Copy
#!/bin/bash #检测nginx是否启动了 A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移 killall keepalived fi fi
  • ip add show ens33 查看网卡的vip。可以看到
Copy
[root@twilight0319 keepalived]# ip add show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:67:8a:94 brd ff:ff:ff:ff:ff:ff inet 192.168.158.4/24 brd 192.168.158.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.158.10/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.158.20/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe67:8a94/64 scope link valid_lft forever preferred_lft forever

另一台机器就不会有vip,因为vip只会映射到一个ip上。当主机的keepalived服务停止后,会自动将vip映射到另一台机器上。

Copy
[root@twilight0319 keepalived]# ip add show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:6a:a6:17 brd ff:ff:ff:ff:ff:ff inet 192.168.158.3/24 brd 192.168.158.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe6a:a617/64 scope link valid_lft forever preferred_lft forever
posted @   twilight0402  阅读(216)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)
点击右上角即可分享
微信分享提示
CONTENTS