ansible实现主从节点配置同步的核心是声明式重置:通过主机清单分组、jinja2模板生成统一配置、playbook批量部署,并配合校验闭环与敏感信息加密,确保环境一致性。

Linux 主从节点实现系统配置同步,核心目标是让多个节点的软件环境、服务设置、安全策略等保持一致,不依赖数据库复制机制,而是靠集中式配置管理工具驱动。它和 MySQL 主从的数据同步是两类问题:前者管“环境一致性”,后者管“运行时数据一致性”。
用 Ansible 实现配置批量同步
Ansible 是最常用、零客户端、基于 SSH 的配置同步工具,适合中小规模集群。
-
安装 Ansible(在控制节点执行):
sudo yum install -y ansible # CentOS/RHEL sudo apt install -y ansible # Ubuntu/Debian
-
编写主机清单(
inventory.ini):[masters] 192.168.1.100 [slaves] 192.168.1.101 192.168.1.102
-
定义统一配置模板(如
/etc/hosts同步): 创建templates/hosts.j2:127.0.0.1 localhost {% for host in groups['all'] %} {{ hostvars[host]['ansible_host'] }} {{ hostvars[host]['ansible_hostname'] }} {% endfor %} -
编写 playbook(
sync-config.yml):- hosts: all become: true tasks: - name: Copy unified /etc/hosts template: src: templates/hosts.j2 dest: /etc/hosts mode: '0644' - name: Ensure NTP is enabled service: name: chronyd state: started enabled: yes - name: Apply sysctl settings sysctl: name: "{{ item.key }}" value: "{{ item.value }}" state: present reload: yes loop: - { key: 'net.ipv4.ip_forward', value: '0' } - { key: 'vm.swappiness', value: '10' } -
执行同步:
ansible-playbook -i inventory.ini sync-config.yml
✅ 关键点:所有配置变更都通过代码定义,版本化存 Git;每次运行即“声明式重置”,避免手工误操作。
SaltStack 适合大规模节点实时管控
SaltStack 采用 Master-Minion 架构,支持事件驱动、远程执行和状态编排,响应更快,适合数百台以上节点。
-
在 Master 上安装并启动 salt-master:
sudo yum install -y salt-master sudo systemctl enable --now salt-master
-
在各 Minion(主/从节点)安装 salt-minion,配置指向 Master IP:
sudo yum install -y salt-minion echo "master: 192.168.1.100" | sudo tee /etc/salt/minion sudo systemctl enable --now salt-minion
-
Master 上接受 Minion 认证:
salt-key -A # 接受所有待认证节点
-
编写状态文件(
/srv/salt/base/init.sls):ensure_sshd_config: file.managed: - name: /etc/ssh/sshd_config - source: salt://files/sshd_config - mode: '0600' - require: - pkg: openssh-server openssh-server: pkg.installed: [] -
推送执行:
salt '*' state.apply
✅ 关键点:Minion 主动连接 Master,支持高并发推送;可监听系统事件(如文件变更、服务重启)自动触发修复。
Puppet 适合强合规与审计场景
Puppet 强调“模型驱动”,适合金融、政务等需严格遵循基线标准的环境。
-
配置 Puppet Server 和 Agent,使用
site.pp定义节点角色:node 'mysql-master1.example.com' { include mysql::server class { 'firewall': rules => ['iptables -A INPUT -p tcp --dport 3306 -j ACCEPT'] } } node 'web-slave1.example.com' { include nginx class { 'logrotate': rotate => 7 } } 所有配置经 PuppetDB 记录,支持回溯变更、生成合规报告。
✅ 关键点:强制声明式语法,不允许临时绕过;内置资源抽象(如
user,package,service),适配多发行版。
注意事项与避坑提醒
- 不要混用工具:Ansible + Salt 同时管理同一类配置,极易冲突。
-
区分配置与数据:
/etc下的配置文件可同步,但/var/lib/mysql这类运行时数据必须走数据库复制(如 MariaDB 主从),不能靠文件同步。 - 敏感信息加密:密码、密钥等必须用 Ansible Vault 或 Salt Pillar 加密,禁止明文写入 playbook 或 sls 文件。
-
先测试再全量:首次同步前,在单台从节点上加
--limit或--check参数验证效果。 -
定期校验一致性:可用
ansible all -m file -a "path=/etc/resolv.conf"快速比对关键文件哈希值。
配置同步不是一次性的任务,而是一套可持续演进的运维契约。选对工具、写好模板、纳入 CI/CD 流程,才能真正让“主从”在系统层面名副其实。











