# keepalived+ha+nginx **Repository Path**: liaowenhu199810/khad ## Basic Information - **Project Name**: keepalived+ha+nginx - **Description**: 系统麒麟 V10 全过程使用shell脚本进行部署 使用docker容器进行搭建keepalived+ha+nginx ha做nginx负载均衡 实现当ha无法访问后keepalived自动切换为备用节点 nginx使用nfs进行共享nginx访问目录 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-06-24 - **Last Updated**: 2025-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # keepalived+ha+nginx #### 介绍 - 操作系统使用麒麟v10 - 全过程使用shell脚本进行二进制离线部署 - 使用docker容器进行搭建keepalived+ha+nginx - ha做nginx负载均衡 - 实现当ha无法访问后keepalived自动切换为备用节点 - nginx使用nfs进行共享nginx访问目录 版本: - Docker version 23.0.6, build ef23cbc - docker-compose version 1.25.0-rc4, build 8f3c9c58 - ha 3.0.4 - keepalived 2.3 - nginx 1.27 #### 软件架构 ![输入图片说明](pngpngimage.PNG) #### 安装教程 1. 全部节点 **(如ip地址已经配置可该操作忽略)** 执行脚本 static_ip.sh 两个节点都需要操作--需要手动选择是否设置网关、DNS地址和是否重启网络---脚本是dhcp配置修改为static配置 - source static_ip.sh 2. 执行安装脚本 keepalived+ha+nginx-master.sh (脚本会自动进行下载需要的安装软件包--也可以自己下载放到/opt/install_pack下面) - source keepalived ha nginx-master.sh 3. master会提示远程链接的back节点--注意输入主机ip地址进行远程链接 链接上会自动执行backup的代码-- backup执行步骤: 1、安装docker、docker-compose 2、安装keeplived 3、启动ha+docker容器构架--脚本会有测试命令是否访问ha正常 测试是否正常: master节点操作: docker stop ha 可以看到master节点的ha已经停止、keepalived的vip会漂移到backup上面去 访问: ![输入图片说明](image.png) 访问vip-ip 变为backup 现在开启master的ha ![输入图片说明](master.PNG) 访问自动切换为master 缺点:在master的vip漂移到backup上有延迟1-5秒左右 脚本运行出现的问题: - 这里是列表文本安装脚本中需要安装必要的软件--需要保证软件正常联网 - 这里是列表文本2.关于docker hub官方镜像被禁用--下面推荐一个开源的链接方式进行中转拉取 可以参考这个进行配置 > https://github.com/liaowenhudi/docker_image_pusher - 关于防火墙对keelived漂移的如果出现 vip无法漂移可以关闭防火墙 `systemctl stop firewalld` 如果关闭防火墙不行可以试试将keepalived停止 `systemctl stop keepalived` 停止master节点的keepavlied会自动漂移 - 如果出现master、backup主机上都有vip-ip 可以检查一下keepalived的配置文件 脚本安装的二进制配置文件默认存放目录: /usr/local/keepalived/etc/keepalived 主要检查通讯使用的令牌和配置的网卡是否能正常ping通 - 如果出现服务挂掉--vip漂移失败可以检查一下keepalived的执行的检查脚本--通常是这个脚本没有权限或者脚本执行出错导致的 这里涉及一个小关键的地方、 --在大部分的使用中都是会有一个shell脚本进行停止keepalived 在keepalived中漂移有两个方案 1、脚本检测服务挂掉后-同时停止keepalived 2、脚本检测服务挂掉后-将master节点的优先级减少--backup开启抢占模式 在不停止keeplived服务的情况下进行漂移vip--当master服务恢复之后vip会自动漂移会master上去 抓包查看切换过程: [root@master ~]# tcpdump -i ens33:1 vrrp -vv #当vip在backup节点上 192.168.30.9 > vrrp.mcast.net: vrrp 192.168.30.9 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 90, authtype simple, intvl 1s, length 20, addrs: 192.168.30.100 auth "1111^@^@^@^@" 10:54:44.145075 IP (tos 0xc0, ttl 255, id 564, offset 0, flags [none], proto VRRP (112), length 40) 192.168.30.9 > vrrp.mcast.net: vrrp 192.168.30.9 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 90, authtype simple, intvl 1s, length 20, addrs: 192.168.30.100 auth "1111^@^@^@^@" 10:54:44.753343 IP (tos 0xc0, ttl 255, id 6, offset 0, flags [none], proto VRRP (112), length 40) 当vip切换为当前master节点上 master > vrrp.mcast.net: vrrp master > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: 192.168.30.100 auth "1111^@^@^@^@" 10:54:45.754190 IP (tos 0xc0, ttl 255, id 7, offset 0, flags [none], proto VRRP (112), length 40) master > vrrp.mcast.net: vrrp master > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: 192.168.30.100 auth "1111^@^@^@^@" 10:54:46.755475 IP (tos 0xc0, ttl 255, id 8, offset 0, flags [none], proto VRRP (112), length 40) 切换过程--master切换为backup master > 224.0.0.18: vrrp master > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: master auth "1111^@^@^@^@" 15:35:00.881593 IP (tos 0xc0, ttl 255, id 10834, offset 0, flags [none], proto VRRP (112), length 40) master > 224.0.0.18: vrrp master > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 80, authtype simple, intvl 1s, length 20, addrs: master auth "1111^@^@^@^@" 15:35:01.882724 IP (tos 0xc0, ttl 255, id 10835, offset 0, flags [none], proto VRRP (112), length 40) master > 224.0.0.18: vrrp master > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 80, authtype simple, intvl 1s, length 20, addrs: master auth "1111^@^@^@^@" #### 使用途径说明 - 本项目由小虎提供。 - 此系统仅供个人学习、研究之用,请勿用于商业用途。 - 在使用中出现问题可以联系2577199089@qq.com,例如:BUG、数据泄露及丢失、入侵等安全问题,全由使用者承担。 - 在您下载shell源码后视为您已经了解使用协议并知晓法律协议。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)