环境假设:
服务器A: 192.168.77.3 服务器B: 192.168.77.4 虚拟IP: 192.168.77.2(客户端访问该IP) 操作系统:Centos 机器运行服务:Java程序、EMQX、MySQL 5.7 和 Tomcat 8.5 目的:实现2台以上机器集群的高可用配置,实现能够在主机宕机时自动切换服务,并管理多个服务的启动顺序和依赖关系。
采用方案:采用 Corosync + Pacemaker
1. 安装Corosync、Pacemaker和相关软件
在两台服务器上执行以下步骤。
1.1 安装Corosync、Pacemaker和pcs管理工具
yum install corosync pacemaker pcs -y
1.2 启动和配置 pcsd 服务
systemctl start pcsd
systemctl enable pcsd
1.3 为 hacluster 用户设置密码
两台服务器上都需要执行:
passwd hacluster
1.4 验证和认证集群节点
在两台服务器上执行:
#关闭防火墙
firewall-cmd --add-port=5405/udp --permanent
firewall-cmd --zone=public --add-port=5404/tcp --permanent
firewall-cmd --zone=public --add-port=2224/tcp --permanent
firewall-cmd --zone=public --add-port=21064/tcp --permanent
firewall-cmd --reload
#配置节点
systemctl start pcsd
systemctl enable pcsd
pcs cluster auth 192.168.77.3 192.168.77.4 -u hacluster
输入 hacluster 用户的密码进行验证。
2. 配置和启动集群
2.1 创建和启动集群
在192.168.77.3上执行:
修改主机名称:
hostnamectl set-hostname localhost.localdomain1
修改映射文件:
vim /etc/hosts
把上面的主机名都设置到文件中,这一步要两台机器都分别执行
配置集群:
pcs cluster setup --name my_cluster 192.168.77.3 192.168.77.4
在192.168.77.4上执行:
修改主机名称:
hostnamectl set-hostname localhost.localdomain2
2.2 设置集群开机启动(两台机器都要执行)
pcs cluster start --all
pcs cluster enable --all
2.3 禁用STONITH(生产环境中建议保留)(两台机器都要执行)
pcs property set stonith-enabled=false
2.4 禁用自恢复策略(可选)
pcs property set no-quorum-policy=ignore
如果中途遇到问题,需要重启以下服务:
systemctl restart network
systemctl restart corosync
systemctl restart pacemaker.service
3. 配置资源(虚拟IP、MySQL、Tomcat、Java程序等)
3.1 添加虚拟IP资源(两台机器都要执行)
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.77.2 cidr_netmask=24 op monitor interval=30s
3.2 配置MySQL 5.7高可用
你可以使用MySQL自带的 mysqld 资源管理器,通过Pacemaker来管理。 配置MySQL复制和高可用性: 在两台服务器上配置MySQL主从复制,具体步骤可参考 MySQL主从复制配置,双服务互备demo。接下来通过Pacemaker管理MySQL。 在Pacemaker中添加MySQL资源:
pcs resource create mysql ocf:heartbeat:mysql \
binary="/usr/bin/mysqld_safe" config="/etc/my.cnf" \
pid="/var/run/mysqld/mysqld.pid" socket="/var/lib/mysql/mysql.sock" \
op monitor interval=30s timeout=30s
或者没有mysqld_safe:
pcs resource create mysql ocf:heartbeat:mysql \
binary="/sbin/mysqld" config="/etc/my.cnf" \
pid="/var/run/mysqld/mysqld.pid" socket="/var/lib/mysql/mysql.sock" \
op monitor interval=30s timeout=30s
3.3 配置Tomcat 8.5高可用
为Tomcat添加Pacemaker资源,确保Tomcat在MySQL之后启动。
pcs resource create tomcat ocf:heartbeat:tomcat \
configfile="/path/to/tomcat/conf/server.xml" \
op monitor interval=30s
| 注意:将 /path/to/tomcat/ 替换为你的Tomcat安装路径。|
3.4 配置Java应用高可用(Java 8)
假设你有一个 MyApp.jar Java应用程序,创建一个自定义的Pacemaker资源来启动和监控该程序。 | 1 创建一个脚本 /usr/local/bin/start_myapp.sh 用于启动Java程序:|
#!/bin/bash
nohup java -jar /path/to/MyApp.jar > /var/log/myapp.log 2>&1 &
| 2 设置脚本可执行权限:|
chmod +x /usr/local/bin/start_myapp.sh
| 3 创建Pacemaker资源:|
pcs resource create myapp ocf:heartbeat:anything \
params binfile="/usr/local/bin/start_myapp.sh" \
op monitor interval=30s
4. 配置资源组和依赖
为了确保资源按正确的顺序启动(例如MySQL -> Tomcat -> Java应用),你可以将资源分组并设置启动顺序。
4.1 创建资源组
pcs resource group add app_group VirtualIP mysql tomcat myapp
4.2 设置启动顺序
确保 MySQL 在 Tomcat 和 Java 程序之前启动:
pcs constraint order start mysql then tomcat
pcs constraint order start tomcat then myapp
4.3 设置资源位置约束
可以指定优先在哪台服务器上运行这些资源:
pcs constraint location VirtualIP prefers 192.168.77.3=100
5. 验证和测试
5.1 检查集群状态
pcs status
5.2 测试故障转移
通过 192.168.77.2 访问你的服务,确保服务运行正常。 停止其中一台服务器上的某些服务,验证集群是否会自动将服务切换到另一台服务器:
pcs cluster stop 192.168.77.3
确认服务自动在 192.168.77.4 上启动并继续运行。
注意:本文归作者所有,未经作者允许,不得转载