Linux Pacemaker 高可用集群配置与 Nginx 优化实战指南

📅 发布时间:2026/7/26 6:04:39
Linux Pacemaker 高可用集群配置与 Nginx 优化实战指南 1. 概述Pacemaker 高可用核心逻辑Pacemaker 高可用配置的核心流程遵循一个清晰的逻辑链条建立集群基础配置节点互信与集群通信。初始化集群启动集群服务并完成基础配置如禁用 STONITH。定义与管理资源创建资源代理、设置约束规则与监控策略。实现故障转移最终达成节点故障时资源的自动迁移与恢复。本文将详细拆解从 Pacemaker 集群搭建、资源组管理到整合 iSCSI 共享存储、MariaDB 数据库以及后续 Nginx 平滑升级与并发优化的完整操作流程。2. Pacemaker 集群基础配置2.1 节点准备与互信配置主机名解析在所有节点如server5,server8的/etc/hosts文件中添加彼此的主机名与 IP 地址解析。配置 SSH 免密登录# 生成密钥对在 server5 上执行ssh-keygen# 将公钥拷贝到 server8ssh-copy-id server8配置 NTP 时间同步确保所有节点时间一致避免集群因时间差出现裂脑。2.2 安装与启动集群软件安装必要软件包yuminstall-ypacemaker pcs psmisc policycoreutils-python# 在另一节点 server8 上也执行安装sshserver8yum install -y pacemaker pcs psmisc policycoreutils-python启动并启用 pcsd 服务systemctlenable--nowpcsd.service在两台节点上均需执行。设置hacluster用户密码此密码用于集群节点间认证。echo123456|passwd--stdinhaclustersshserver8echo 123456 | passwd --stdin hacluster2.3 创建并启动集群节点认证pcs cluster auth server5 server8创建集群配置server5 server8要加入集群的两台主机名必须能够互相解析–name mycluster给集群起一个名字类似项目名称可自定义。pcs cluster setup--namemycluster server5 server8启动集群并设置自启pcs cluster start--allpcs clusterenable--all验证集群状态crm_verify-L-V# 验证配置pcs status# 查看集群状态-L 在本地检查不连接集群-V 输出详细验证信息Verbose禁用 STONITH在测试环境pcs propertysetstonith-enabledfalse将 Pacemaker 集群的全局属性 stonith-enabled 的值修改为 falsepcs status查看集群状态3. 资源管理实战3.1 创建虚拟 IP (VIP) 资源pcs resource create vip ocf:heartbeat:IPaddr2ip192.168.150.100opmonitorinterval30s参数说明vip资源名称。ocf:heartbeat:IPaddr2资源代理类型用于管理虚拟 IP。ip192.168.150.100要飘移的虚拟 IP 地址。op monitor interval30s每 30 秒监控一次资源状态。3.2 节点备用模式与故障转移模拟将节点设为备用该节点上的资源会被迁移到其他在线节点。pcsnodestandby server8执行后vip资源会从server8迁移到server5。恢复节点pcsnodeunstandby server83.3 创建 Apache 服务资源组创建 Apache 资源需提前安装httpd但不要手动启动pcs resource create WebSite systemd:httpdopmonitorinterval1min若资源创建后状态异常可清理失败计数pcs resource cleanup WebSite创建资源组发现资源不在一个主机强制vip和WebSite运行在同一节点pcs resource groupaddwebgroup vip WebSiteServer8失效可以用pcs node standby server5迁移3.4 删除集群资源# 从资源组中移除资源pcs resource group remove webgroup# 删除资源本身pcs resource delete ClusterIP pcs resource delete WebSite4. 整合 iSCSI 共享存储与 MariaDB4.1 配置 iSCSI 服务端Target添加新硬盘如/dev/sdb并安装targetcli。使用targetcli交互式配置# 1. 创建块存储后端cd/backstores/block create my_disk /dev/sdb# 2. 创建 iSCSI 目标cd/iscsi create iqn.2026-07.com.example:storage1# 3. 创建 LUNcd/iscsi/iqn.2026-07.com.example:storage1/tpg1/luns create /backstores/block/my_disk# 4. 设置 ACL访问控制cd/iscsi/iqn.2026-07.com.example:storage1/tpg1/acls create iqn.2026-07.com.example:client4.2 配置 iSCSI 客户端Initiator在两台集群节点上安装客户端工具yuminstall-yiscsi-initiator-utils.x86_64配置 Initiator 名称与 ACL 匹配# 编辑 /etc/iscsi/initiatorname.iscsiInitiatorNameiqn.2026-07.com.example:client发现并登录存储# 发现目标iscsiadm-mdiscovery-tst-p192.168.150.140# 登录所有已发现目标iscsiadm-mnode-l4.3 在节点上准备数据库存储以server5为例server8操作类似。分区与格式化fdisk/dev/sdb# 创建分区如 /dev/sdb1mkfs.xfs /dev/sdb1安装 MariaDB 并挂载共享存储yuminstall-ymariadb-servermount/dev/sdb1 /var/lib/mysql/chownmysql.mysql /var/lib/mysql/# 先挂载再修改属主systemctl start mariadb.service测试后卸载为切换到另一节点准备systemctl stop mariadb.serviceumount/var/lib/mysql在server8上yuminstall-yiscsi-initiator-utils.x86_64vim/etc/iscsi/initiatorname.iscsiInitiatorNameiqn.2026-07.com.example:client iscsiadm-mdiscovery-tst-p192.168.36.174 iscsiadm-mnode-lyuminstall-ymariadb-servermount/dev/sdb1 /var/lib/mysql/测试完关闭mysql然后卸载存储4.4 创建高可用的数据库资源组整合iscsi存储和mariadb数据库# 1. 创建虚拟 IP 资源pcs resource create vip ocf:heartbeat:IPaddr2ip192.168.150.100opmonitorinterval30s# 2. 创建共享文件系统资源pcs resource create iscsidb ocf:heartbeat:Filesystemdevice/dev/sdb1directory/var/lib/mysqlfstypexfsopmonitorinterval1min# 3. 创建 MariaDB 服务资源pcs resource create mariadb systemd:mariadbopmonitorinterval1min# 4. 将三个资源绑定成组确保顺序启动vip - iscsidb - mariadbpcs resource groupadddbgroup vip iscsidb mariadb资源组保证了三个资源始终运行在同一节点并按指定顺序启动和停止。配置数据库远程访问权限GRANTALLON*.*TOroot%IDENTIFIEDBYpassword;flushprivileges;pcs node standby设置备用模式观察发现切换了rspcs node unstandby又切换回来5. Nginx 进阶配置与优化5.1 Nginx 平滑升级与版本隐藏编译前关闭调试模式编辑nginx-1.30.4/auto/cc/gcc找到-g选项并注释或删除。编译新版本tarzxf nginx-1.30.4.tar.gzcdnginx-1.30.4 ./configure --with-http_ssl_module --with-http_stub_status_modulemake# 不要 make install替换二进制并平滑升级cd/usr/local/nginx/sbin/cpnginx nginx.bakcp-f../../nginx-1.30.4/objs/nginx ./psax|grepnginx#获取当前主程序pidkill-USR2cat/usr/local/nginx/logs/nginx.pid# 启动新主进程kill-WINCHcat/usr/local/nginx/logs/nginx.pid.oldbin# 优雅关闭旧 worker 进程发现出错cd /usr/local/nginx/sbincp -f nginx.bak nginx备份的文件拷贝回去关掉nginx重新做一遍刚刚的程序即可但是有时候访问会到旧版本因为旧版本进程保留了关闭原worker进程但保留主进程为了回退kill -WINCH 11551kill -QUIT 11551可以关闭主进程4.版本回退如需bash cp -f nginx.bak nginx # 还原旧程序 kill -HUP cat /usr/local/nginx/logs/nginx.pid.oldbin # 重载旧配置 kill -WINCH cat /usr/local/nginx/logs/nginx.pid # 关闭新 worker kill -QUIT cat /usr/local/nginx/logs/nginx.pid # 退出新主进程5.隐藏 Nginx 版本号bash cd nginx-1.30.4 vim src/core/nginx.h # 修改 NGINX_VERSION 等宏定义 make clean ./configure ... make cp -f objs/nginx /usr/local/nginx/sbin/nginx关掉进程重启nginx版本隐藏5.2 nginx并发优化调整系统文件句柄数# 查看当前限制sysctl-a|grepfileulimit-a修改系统全局限制/etc/sysctl.conffs.file-max 188414 net.ipv4.ip_local_port_range 1024 65535 net.core.somaxconn 2048 net.ipv4.tcp_tw_recycle 1 net.ipv4.tcp_tw_reuse 1执行sysctl -p生效。配置写入文件可生效Linux下高并发socket最大连接数所受的各种限制▫ 修改用户进程可打开文件数限制/etc/security/limits.confnginx - nofile 65535▫ Linux系统级的最大打开文件数限制fs.file-max 188414 //和内存容量相关▫ 修改网络内核对TCP连接的有关限制net.ipv4.ip_local_port_range 1024 65535▫ 限制接收新 TCP 连接侦听队列的大小net.core.somaxconn 2048▫ 启用tcp连接timewait快速回收和重用net.ipv4.tcp_tw_recycle 1net.ipv4.tcp_tw_reuse 1修改用户进程限制/etc/security/limits.conf提高当前会话的 open files 限制nginx - nofile 655355.3 创建专用 Nginx 用户useradd-M-d/usr/local/nginx/ nginxusermod-s/sbin/nologin nginx在nginx.conf中设置user nginx;然后重启服务。使 worker 进程以 nginx 用户运行重启生效nginx -s stop nginx -t nginxps aux | grep nginx | grep -v grep5.4 配置 Nginx 负载均衡定义上游服务器池nginx.conf的http块内upstream my_app { server 192.168.150.138:80; server 192.168.150.140:80 weight1; # 默认使用轮询 (rr) 算法 }在server块中代理请求server { listen 80; server_name www.westos.org; location / { proxy_pass http://my_app; } }检查语法并重载nginx-tnginx-sreload客户端测试在测试机配置主机解析将域名www.westos.org写入server5的解析后面使用curl www.westos.org或ab工具测试。5.5 使用 ab 进行压力测试ab-n1000-c100http://your_server_ip/