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/

相关新闻

ARM Cortex-M4异常处理与μDMA控制器实战解析

ARM Cortex-M4异常处理与μDMA控制器实战解析

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM Cortex-M系列处理器的项目中,异常处理和直接内存访问(DMA)是决定系统稳定性和性能上限的两大基石。很多开发者,尤其是从应用层转向底层或从单片机入门的朋友&…

2026/10/18 5:39:49 阅读更多 →
AI原生应用开发:思维框架与工程实践指南

AI原生应用开发:思维框架与工程实践指南

1. 项目概述:AI原生应用的本质与思维框架价值AI原生应用正在重塑我们解决问题的方式。与传统的"AI赋能"模式不同,原生应用从设计之初就将AI作为核心架构要素,这意味着我们需要全新的思维框架来驾驭这种变革。我在过去三年参与过12个…

2026/10/15 20:58:57 阅读更多 →
局域网通信原理 --- IP与MAC与ARP与交换机(更新)

局域网通信原理 --- IP与MAC与ARP与交换机(更新)

在这部分能学到,今天学的比较多网络参考模型复习OSI七层TCP/IP模型每层负责什么IP与MAC的角色区别IP:网络层逻辑地址,负责定位主机MAC:数据链路层物理地址,负责局域网传输ARP协议为什么知道IP还需要MACARP如何连接网络…

2026/10/15 20:59:10 阅读更多 →

最新新闻

俳句翻译实战拆解:从17音、季语到切れ字的基本功

俳句翻译实战拆解:从17音、季语到切れ字的基本功

把一首十七个音节的日本俳句翻译成中文,好的译文不是让你读通,而是让你在句号之后多停一秒。我最近在整理一份署名译者的《芭蕉俳句》四首选原译稿,所谓原译,就是直接从芭蕉的日语原文译出,不经过英译本或者其他语种的…

2026/10/18 5:42:43 阅读更多 →
ssrf跨站请求伪造(保姆级教程)

ssrf跨站请求伪造(保姆级教程)

原理SSRF(服务器端请求伪造)的本质是让服务器成为攻击者的代理。当应用程序需要“替用户”去访问一个远程资源时,如果未能对用户提供的目标地址进行严格限制,攻击者就能诱导服务器向本不该访问的内部系统发起请求。漏洞位置第一类…

2026/10/18 5:42:43 阅读更多 →
10分钟快速开始:如何用llama.cpp本地运行NVIDIA-Nemotron-3.5-Bolt-74B-A9B-GGUF(附完整命令)

10分钟快速开始:如何用llama.cpp本地运行NVIDIA-Nemotron-3.5-Bolt-74B-A9B-GGUF(附完整命令)

大模型基础模型多模态本地部署 【免费下载链接】NVIDIA-Nemotron-3.5-Bolt-74B-A9B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-GGUF 点击查看 免费下载 NVIDIA-Nemotron-3.5-Bolt-74B-A9B-GGUF 是 NVIDIA Nemot…

2026/10/18 5:42:43 阅读更多 →
计算机组成原理第七版答案:从对答案到考点地图的三轮复习法

计算机组成原理第七版答案:从对答案到考点地图的三轮复习法

简介:这份PDF是《计算机组成原理(第七版)》(白中英、戴志涛)的课后习题答案,面向计算机专业本科生、考研复习者及自考考生,可用于课后作业核对与基础概念自查。答案按章节排列,覆盖第…

2026/10/18 5:42:43 阅读更多 →
Linux下HTTP协议调试:从报文结构到抓包实战

Linux下HTTP协议调试:从报文结构到抓包实战

这个标题看上去很基础,基础到你甚至会怀疑有没有必要单独写一篇长文。但我在Linux底下跟接口调试打了这么多年交道,越来越觉得“应用层协议HTTP”这六个字,恰恰是区分“会用浏览器”和“会做接口调试”的分水岭。很多人遇到问题只会刷新页面&…

2026/10/18 5:42:43 阅读更多 →
TrueType字体解析:表目录、字符映射与轮廓还原

TrueType字体解析:表目录、字符映射与轮廓还原

简介:这份资源是一套TrueType字体格式解析类,面向从事游戏开发、图形设计、文本渲染等方向且需要深入处理字体文件的开发者。压缩包共2个文件,包含1个cpp实现文件和1个h头文件,整体仅42KB,代码量精简,便于直…

2026/10/18 5:41:43 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →