服务器备用节点是一套完整的业务连续性保障组件,其本质是通过冗余部署方式,在主服务器因硬件故障、网络中断、软件异常、人为操作失误等问题无法提供服务时,自动或手动接管业务请求,保障系统服务的可用性。
行业内通常将可用性分为99%(年度停机≤87.6小时)、99.9%(≤8.76小时)、99.99%(≤52.56分钟)、99.999%(≤5.256分钟)四个等级。Uptime Institute发布的《2024数据中心停机成本报告》显示,99.999%可用性系统的平均单次停机成本为9000美元,99%可用性系统的平均单次停机成本可达170万美元,合理配置备用节点可直接降低90%以上的意外停机风险。
备用节点配置的前置准备决定了后续部署效率与切换成功率,需严格按以下要求完成。
备用节点的硬件配置需与主节点保持一致或略高于主节点,重点匹配CPU核心数、内存容量、磁盘I/O性能、网络带宽四大核心指标。例如,主节点采用2颗16核CPU、128GB DDR4内存、2块1TB NVMe SSD组成RAID1、千兆独享带宽,备用节点需至少采用相同配置,或升级为DDR5内存、更高RAID级别提升数据安全性。
系统环境需与主节点保持完全一致,包括操作系统版本、内核参数、依赖库版本、用户权限组等。网络层面需为主备节点配置独立的心跳网络与业务网络,心跳网络用于节点间状态检测,业务网络用于业务请求传输。心跳网络可采用VLAN隔离或直连网线连接,避免与业务网络抢占带宽导致状态检测失败。
数据同步是备用节点配置的核心环节,需根据业务数据更新频率与丢失容忍度选择合适的同步方案。常见的数据同步方案包括rsync异步同步、MySQL半同步/组复制、Redis哨兵/集群、DRBD块设备同步等。
以CentOS 7.9系统、Nginx Web服务、MySQL半同步复制数据库、Keepalived高可用软件为例,演示核心交易类业务的热备模式备用节点配置。
使用rsync工具同步主节点的/etc/passwd、/etc/group、/etc/hosts、/etc/sysctl.conf等核心配置文件,同步后需重启相关服务使配置生效。同步前需在主备节点配置SSH免密登录,避免同步时频繁输入密码。
SSH免密登录配置指令如下:
```bash 在主节点执行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id root@192.168.2.11 在备用节点执行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id root@192.168.2.10 ```MySQL半同步复制可保障至少一个备用节点收到主节点的二进制日志并写入中继日志,主节点才会提交事务,大幅降低数据丢失风险。
主节点配置步骤:
备用节点配置步骤:
从节点状态需同时满足Slave_IO_Running=Yes与Slave_SQL_Running=Yes,表示半同步复制部署成功。
在主备节点分别部署Nginx 1.24.0,配置文件需保持一致,可使用rsync工具实时同步主节点的/usr/local/nginx/conf目录。同步脚本如下:
```bash !/bin/bash 脚本名称:nginx_sync.sh 脚本路径:/root/nginx_sync.sh 设置同步源与目标 SYNC_SOURCE="/usr/local/nginx/conf/" SYNC_TARGET="root@192.168.2.11:/usr/local/nginx/conf/" 执行同步 rsync -avz --delete $SYNC_SOURCE $SYNC_TARGET 重启备用节点Nginx服务 ssh root@192.168.2.11 "systemctl reload nginx" ```
将同步脚本添加到主节点的crontab定时任务中,每5分钟同步一次:
```bash 编辑crontab crontab -e 添加定时任务 /5 /bin/bash /root/nginx_sync.sh > /dev/null 2>&1 ```Keepalived通过VRRP协议实现节点间状态检测与虚拟IP漂移,是Linux系统中常用的高可用软件。
主节点Keepalived配置文件/etc/keepalived/keepalived.conf内容如下:
```ini ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_MASTER } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20/24 dev eth0 label eth0:0 } track_script { chk_nginx } notify_master "/etc/keepalived/notify_master.sh" notify_backup "/etc/keepalived/notify_backup.sh" notify_fault "/etc/keepalived/notify_fault.sh" } ```备用节点Keepalived配置文件/etc/keepalived/keepalived.conf内容如下:
```ini ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_BACKUP } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20/24 dev eth0 label eth0:0 } track_script { chk_nginx } notify_master "/etc/keepalived/notify_master.sh" notify_backup "/etc/keepalived/notify_backup.sh" notify_fault "/etc/keepalived/notify_fault.sh" } ```编写Nginx健康检查脚本/etc/keepalived/check_nginx.sh:
```bash !/bin/bash 检查Nginx进程是否存在 COUNT=$(ps -C nginx --no-header | wc -l) if [ $COUNT -eq 0 ]; then 尝试重启Nginx systemctl start nginx sleep 2 再次检查 COUNT=$(ps -C nginx --no-header | wc -l) if [ $COUNT -eq 0 ]; then 停止Keepalived触发切换 systemctl stop keepalived fi fi ```编写主节点通知脚本/etc/keepalived/notify_master.sh:
```bash !/bin/bash 设置MySQL为可写 mysql -u root -pStrongRootPass123! -e "SET GLOBAL read_only=0;" ```编写备用节点通知脚本/etc/keepalived/notify_backup.sh:
```bash !/bin/bash 设置MySQL为只读 mysql -u root -pStrongRootPass123! -e "SET GLOBAL read_only=1;" ```编写故障通知脚本/etc/keepalived/notify_fault.sh:
```bash !/bin/bash 可添加邮件、短信、企业微信等告警通知 echo "`date +%Y-%m-%d\ %H:%M:%S` 节点发生故障" >> /var/log/keepalived_fault.log ```配置完成后需给所有脚本添加执行权限,并启动Keepalived服务:
```bash 给脚本添加执行权限 chmod +x /etc/keepalived/.sh 启动Keepalived服务 systemctl start keepalived 设置Keepalived开机自启 systemctl enable keepalived ```备用节点配置完成后需进行切换测试,验证切换成功率与数据一致性。
手动停止主节点的Keepalived服务,观察虚拟IP是否漂移到备用节点,业务是否正常访问,数据是否一致。虚拟IP漂移可通过ip addr show命令验证,数据一致性可通过在主节点写入测试数据,切换后在备用节点查询验证。
模拟主节点硬件故障(如断开电源)、网络故障(如断开业务网络)、软件故障(如停止Nginx服务),观察虚拟IP是否自动漂移到备用节点,业务是否正常访问,数据是否一致。模拟故障测试需在业务低峰期进行,避免影响正常业务。
虚拟IP未漂移的常见原因包括VRRP认证失败、心跳网络中断、节点优先级设置错误、健康检查脚本执行失败等。排查时可查看Keepalived的日志文件/var/log/messages或/var/log/keepalived.log,定位具体问题。
数据同步失败的常见原因包括主从节点server-id重复、复制用户权限不足、二进制日志文件损坏、网络带宽不足等。排查时可查看MySQL的主从状态输出,定位具体问题。
下一篇: 服务器本地测试搭建,零成本搞定开发环境
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图