我来为您详细讲解多台云主机同步设置的几种主流方案,从简单到复杂:
一、基于脚本的同步方案(简单快捷)
1. 配置SSH免密登录
ssh-keygen -t rsa
ssh-copy-id user@host1
ssh-copy-id user@host2
2. 同步脚本示例 sync-config.sh
#!/bin/bash
SERVERS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
SOURCE_DIR="/etc/nginx/conf.d/"
TARGET_DIR="/etc/nginx/conf.d/"
for server in "${SERVERS[@]}"; do
rsync -avz -e ssh --delete $SOURCE_DIR user@$server:$TARGET_DIR
ssh user@$server "systemctl reload nginx"
done安装pssh apt-get install pssh # Debian/Ubuntu yum install pssh # CentOS/RHEL 创建主机列表文件 hosts.txt 192、168.1.10 192、168.1.11 192、168.1.12 并行执行命令 parallel-ssh -h hosts.txt -i "apt-get update && apt-get upgrade -y" 并行拷贝文件 parallel-scp -h hosts.txt local_file /remote/path/
二、配置管理工具(推荐生产环境)
1. Ansible(无Agent,基于SSH)
inventory.ini
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[webservers:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
playbook.yml
- hosts: webservers
become: yes
tasks:
- name: Sync nginx config
copy:
src: /local/nginx/conf.d/
dest: /etc/nginx/conf.d/
owner: root
group: root
mode: '0644'
- name: Reload nginx
service:
name: nginx
state: reloaded2. SaltStack(高性能,适合大规模)
/srv/salt/nginx/init.sls
nginx_config:
file.recurse:
- name: /etc/nginx/conf.d
- source: salt://nginx/files/conf.d
- user: root
- group: root
- dir_mode: 755
- file_mode: 644
- clean: true
执行同步
salt 'web*' state.apply nginx
manifests/nginx.pp
class nginx_config {
file { '/etc/nginx/conf.d':
ensure => directory,
source => 'puppet:///modules/nginx/conf.d',
recurse => true,
purge => true,
owner => 'root',
group => 'root',
}
}三、基于Git的方案(配置版本控制)
1. 创建配置仓库 mkdir config-repo && cd config-repo git init cp -r /etc/nginx/conf.d ./nginx-config/ git add . && git commit -m "Initial config" 2. 各节点同步脚本 git-sync.sh #!/bin/bash CONFIG_REPO="git@github.com:yourname/config-repo.git" LOCAL_DIR="/etc/nginx/conf.d" TEMP_DIR="/tmp/config-sync" 拉取最新配置 git clone $CONFIG_REPO $TEMP_DIR rsync -av --delete $TEMP_DIR/nginx-config/ $LOCAL_DIR/ rm -rf $TEMP_DIR systemctl reload nginx 3. 设置cron定时同步 crontab -e 每5分钟同步一次 */5 * * * * /path/to/git-sync.sh
使用FluxCD或ArgoCD自动同步Git仓库到服务器:
flux配置示例
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: config-repo
spec:
interval: 1m
url: https://github.com/yourname/config-repo
ref:
branch: main
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
name: nginx-config
spec:
interval: 5m
path: "./nginx-config"
targetNamespace: default
prune: true四、云厂商原生方案
1. AWS Systems Manager
使用SSM文档批量执行命令
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=tag:Environment,Values=Production" \
--parameters 'commands=["apt-get update","apt-get upgrade -y"]'
使用State Manager维护配置通过控制台或API执行批量运维任务。
执行批量命令 tatcli RunCommand --CommandId cmd-xxx --InstanceIds ins-xxx1,ins-xxx2
五、容器化环境方案
Dockerfile FROM nginx:alpine COPY nginx-config/ /etc/nginx/conf.d/ 更新配置后重建容器 docker-compose build docker-compose up -d
2. Kubernetes ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
default.conf: |
server {
listen 80;
server_name example.com;
}
挂载到Pod
spec:
containers:
- name: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/conf.d
volumes:
- name: config-volume
configMap:
name: nginx-config六、同步策略建议
| 场景 | 推荐方案 | 特点 |
| 少量服务器,简单配置 | rsync + cron | 简单直接,学习成本低 |
| 中等规模(<100台) | Ansible | 无Agent,配置即代码 |
| 大规模集群 | SaltStack/Puppet | 高性能,状态管理 |
| 容器环境 | ConfigMap + GitOps | 云原生,声明式 |
| 混合云环境 | Terraform + Ansible | 基础设施即代码 |
1、配置版本化:所有配置存入Git仓库
2、变更审批:重要配置需PR/MR审批
3、灰度发布:先同步测试环境,再同步生产
4、监控回滚:配置变更后监控服务状态,准备好回滚方案
5、权限分离:配置管理权限与日常运维权限分离
1、使用SSH密钥对而非密码
2、配置文件的敏感信息使用Vault等工具管理
3、限制配置同步的网络访问权限
4、定期审计配置变更日志
七、简单起步示例
如果您是初学者,建议从以下组合开始:
1、使用Git管理所有配置文件
2、使用Ansible进行批量部署
3、使用Jenkins/GitLab CI实现自动化同步
这样的组合既能满足生产需求,又相对容易上手和维护。
需要更具体的某个方案实现细节吗?
文章摘自:https://idc.huochengrm.cn/zj/20989.html
评论
典胤文
回复多台云主机同步设置方案丰富,从SSH+rsync到GitOps,可根据需求选择,初学者可从Git+Ansible起步,逐步深入。
邢思义
回复多台云主机同步设置方案丰富,从基础SSH+rsync到配置管理工具、Git、云厂商方案、容器化环境等,需根据实际场景选择合适方案。