内网模拟企业网站:高可用主从复制集群搭建
项目说明:本章内容将使用Vmware虚拟机,创建的3台CentOS7虚拟机来进行模拟高可用主从复制集群实验
我的内网拓扑图如下:

阶段 1:系统环境准备
本阶段目标:
- 三台机器设置正确主机名。
- 三台机器通过
/etc/hosts识别彼此。 - 按你的实验要求关闭 SELinux。
- 三台机器开放
3306/tcp。 - 三台机器使用 chrony 校准时间。
- 最终通过主机名互相
ping成功
1. 设置三台机器的主机名
1.1 在 Master 上执行
【10.210.10.10 - Master】
hostnamectl set-hostname db-master
hostnamectl目的: 将主库服务器标识为 db-master,后续查看日志、配置复制和排查故障时不会混淆机器
预期关键输出:
Static hostname: db-master1.2 在 Slave1 上执行
【10.210.10.15 - Slave1】
hostnamectl set-hostname db-slave1
hostnamectl预期关键输出:
Static hostname: db-slave1另一台的服务器也是如此,我这里就不进行演示了(就是把上面的内容改成db-slave2)
2. 配置三台机器的 /etc/hosts
修改目的
/etc/hosts 用于在没有内网 DNS 服务器的情况下,手动建立“主机名 → IP 地址”的对应关系
完成后:
db-master会解析到10.210.10.10db-slave1会解析到10.210.10.15db-slave2会解析到10.210.10.20
三台机器都必须写入完全相同的三条映射关系
2.1 在 Master 上执行
【10.210.10.10 - Master】
cp -a /etc/hosts /etc/hosts.bak.stage1
grep -qE '^10\.210\.10\.10[[:space:]]+db-master([[:space:]]|$)' /etc/hosts || echo '10.210.10.10 db-master' >> /etc/hosts
grep -qE '^10\.210\.10\.15[[:space:]]+db-slave1([[:space:]]|$)' /etc/hosts || echo '10.210.10.15 db-slave1' >> /etc/hosts
grep -qE '^10\.210\.10\.20[[:space:]]+db-slave2([[:space:]]|$)' /etc/hosts || echo '10.210.10.20 db-slave2' >> /etc/hosts
cat /etc/hosts2.2 在 Slave1 上执行
【10.210.10.15 - Slave1】
cp -a /etc/hosts /etc/hosts.bak.stage1
grep -qE '^10\.210\.10\.10[[:space:]]+db-master([[:space:]]|$)' /etc/hosts || echo '10.210.10.10 db-master' >> /etc/hosts
grep -qE '^10\.210\.10\.15[[:space:]]+db-slave1([[:space:]]|$)' /etc/hosts || echo '10.210.10.15 db-slave1' >> /etc/hosts
grep -qE '^10\.210\.10\.20[[:space:]]+db-slave2([[:space:]]|$)' /etc/hosts || echo '10.210.10.20 db-slave2' >> /etc/hosts
cat /etc/hosts2.3 在 Slave2 上执行
【10.210.10.20 - Slave2】
cp -a /etc/hosts /etc/hosts.bak.stage1
grep -qE '^10\.210\.10\.10[[:space:]]+db-master([[:space:]]|$)' /etc/hosts || echo '10.210.10.10 db-master' >> /etc/hosts
grep -qE '^10\.210\.10\.15[[:space:]]+db-slave1([[:space:]]|$)' /etc/hosts || echo '10.210.10.15 db-slave1' >> /etc/hosts
grep -qE '^10\.210\.10\.20[[:space:]]+db-slave2([[:space:]]|$)' /etc/hosts || echo '10.210.10.20 db-slave2' >> /etc/hosts
cat /etc/hosts2.4 验证主机名解析
三台机器上分别执行下面命令
getent hosts db-master db-slave1 db-slave2三台机器都应看到类似结果:
10.210.10.10 db-master
10.210.10.15 db-slave1
10.210.10.20 db-slave2如果有显示ipv6相关信息,那么请输入以下命令,禁用ipv6
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p3. 关闭 SELinux
修改目的
按你的实验要求,当前主从复制演示环境中将 SELinux 关闭,以避免后续 MariaDB 配置、网络监听或代理服务实验阶段受到额外安全策略影响
说明:在生产环境中,更规范的做法通常是保留 SELinux 并配置对应策略;本项目作为内网实验环境,按你的方案执行关闭
setenforce 0:让当前运行状态立即进入非强制模式- 修改
/etc/selinux/config:保证系统重启后仍保持关闭
3.1 在三台机器上分别执行
getenforce
if [ "$(getenforce)" = "Enforcing" ]; then
setenforce 0
fi
cp -a /etc/selinux/config /etc/selinux/config.bak.stage1
sed -ri 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
getenforce
grep '^SELINUX=' /etc/selinux/config当前系统尚未重启时,预期输出可能是:
Permissive
SELINUX=disabled含义是:当前已经不拦截,重启后会彻底显示为 Disabled
4. 安装并配置 firewalld,开放 3306 端口
CentOS 7 官方镜像源已经在2024年停止维护,mirrorlist.centos.org 域名已经失效,需要切换到阿里云的归档镜像
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache4.1 在三台机器安装 firewalld
依次在三台机器执行
yum install -y firewalld4.2 启动 firewalld 并设置开机自启
依次在三台机器执行
systemctl enable --now firewalld
systemctl is-enabled firewalld
systemctl is-active firewalld4.3 开放 MariaDB 的 3306/TCP 端口
依次在三台机器执行
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --query-port=3306/tcp
firewall-cmd --list-ports预期每台机器都至少看到:
yes
3306/tcp5. 安装并启动 chrony 时间同步服务
修改目的
主从复制依赖日志事件顺序和故障排查时间线。三台数据库服务器时间一致,能够避免日志时间混乱,也便于后续定位复制延迟
CentOS/RHEL 7 中,chrony 是标准的 NTP 时间同步实现,服务名称为 chronyd
这里暂时不修改 /etc/chrony.conf,先使用默认可用时间源完成同步;如果你的网络无法访问默认时间源,再根据实际结果调整配置
5.1 安装 chrony
依次在三台机器执行
yum install -y chrony5.2 启动 chronyd 并设置开机自启
依次在三台机器执行
systemctl enable --now chronyd
systemctl is-enabled chronyd
systemctl is-active chronyd
chronyc makestep三台机器的服务状态都应为:
enabled
active5.3 验证时间同步状态
依次在三台机器执行
date -u
timedatectl
chronyc tracking
chronyc sources -v重点观察:
System clock synchronized: yes
NTP enabled: yes以及 chronyc tracking 中不要长期显示:
Leap status : Not synchronisedchronyc sources -v 中通常会有一行时间源前面显示 ^*,表示当前选中的同步源
6. 重启三台机器,确认永久配置生效
由于你要求 SELinux 永久关闭,必须通过一次重启验证 /etc/selinux/config 的配置确实生效
建议按顺序逐台重启,确认能重新 SSH 登录后再重启下一台
先重启 Master,然后再依次重启Slave1,Slave2
命令如下:
reboot重新 SSH 连接 Master 后执行:
hostname
getenforce
systemctl is-active firewalld
systemctl is-active chronyd
firewall-cmd --query-port=3306/tcp预期结果:
db-master
Disabled
active
active
yes所有机器重启完成之后,再进行最终的验证
剩余内容正在更新中
Ciallo~(∠・ω< )⌒☆

