1.
前期准备与环境要求
说明:确认控制机(本地或管理服务器)为Linux或WSL环境,已安装SSH、Python、pip。
子项:安装必备工具:sudo apt update && sudo apt install -y openssh-client rsync sshpass && sudo apt install -y python3-pip && pip3 install ansible parallel-ssh
2.
生成并分发SSH密钥(免密码登录)
步骤:在控制机上生成密钥并下发到每台越南CN2实例。
命令示例:
ssh-keygen -t ed25519 -f ~/.ssh/id_cn2 -N ""
分发示例:
ssh-copy-id -i ~/.ssh/id_cn2.pub root@1.2.3.4(若无法ssh-copy-id,可用sshpass或手工echo >> ~/.ssh/authorized_keys)
3.
建立主机清单与Ansible配置
步骤:创建inventory文件方便批量管理。
示例inventory(hosts.ini):
[vn_cn2]
10.0.0.1 ansible_user=root
10.0.0.2 ansible_user=root
可选:在~/.ansible.cfg添加
[defaults]\nhost_key_checking = False并通过
ansible-vault管理敏感变量。
4.
用Ansible进行常见运维任务(更新、部署)
步骤:写一个简单playbook做系统更新与部署。
示例playbook.yml关键内容:
- hosts: vn_cn2
become: yes
tasks:
- apt: update_cache=yes upgrade=dist
执行:
ansible-playbook -i hosts.ini playbook.yml --private-key=~/.ssh/id_cn2 -u root
5.
并行执行命令:pssh与并行SSH脚本
场景:需要同时在数十台或上百台CN2实例执行轻量命令时用pssh。
安装与使用:
pip3 install parallel-ssh或使用系统包的pssh。
示例:把IP列表放hosts.txt,然后:
pssh -h hosts.txt -l root -i -x "-i ~/.ssh/id_cn2" "apt update -y && apt upgrade -y"
6.
自定义Bash并行脚本(无额外依赖)
示例脚本:
for ip in $(cat hosts.txt); do
ssh -i ~/.ssh/id_cn2 root@$ip 'bash -s' <<'END'
uname -a; df -h
END
done; wait
说明:对大量并发时注意控制并发量,可用xargs -P或GNU parallel限制并发数。
7.
批量分发文件与同步(rsync与scp)
步骤:选择rsync做增量同步,效率高且可保留权限。
单服务器示例:
rsync -avz -e "ssh -i ~/.ssh/id_cn2" ./app/ root@10.0.0.1:/opt/app/
批量示例可在循环或Ansible中使用copy/template模块完成配置文件渲染。
8.
常见运维场景脚本化(重启服务、日志收集)
示例:远程重启Docker并等待状态:
ansible vn_cn2 -i hosts.ini -m shell -a "systemctl restart docker && sleep 5 && systemctl is-active docker" --private-key=~/.ssh/id_cn2
日志收集:定期通过rsync或scp把/var/log/app.log拉回管理机,或用Fluentd/Logstash集中收集。
9.
故障处理与回滚策略
建议:在部署前先在少量实例做canary,然后批量推广。
回滚方法:保留上一个可用版本的tar包并写回:
ansible-playbook rollback.yml或使用rsync从快照目录恢复。
10.
安全与运维合规建议
要点:限制SSH仅允许密钥登录、关闭root直接登录(可改用ansible_user并sudo)、配置防火墙(ufw/iptables)只允许必要端口。
备份:定期备份authorized_keys、/etc、应用配置和数据库,并测试恢复流程。
11.
问:如何在多机并发时控制并发数以免网络或API限流?
答:可以用GNU parallel、xargs -P或pssh的并发参数来限制同时连接数。例如pssh的-P或使用xargs -P 10限制为10个并发;在Ansible可通过forks参数(ansible.cfg或命令行-e "ansible_forks=20")控制并发。
12.
问:如果某些越南CN2节点连接不稳定,如何做自动重试和告警?
答:脚本中加入重试逻辑(循环尝试3次并间隔sleep),重要操作用Ansible的retries与delay或自写retry函数;同时用Prometheus+Alertmanager或简单的邮件/Slack告警在检测到失败时通知运维。
13.
问:批量管理时如何保证配置一致性与最小化人为错误?
答:采用基于Ansible的声明式配置管理、使用模板(Jinja2)和变量分组,所有变更通过版本控制(Git)管理并在CI中执行dry-run或测试剧本,审批通过后在生产批量执行,从而保证一致性并减少人工干预。
来源:如何用自动化脚本批量管理多台越南cn2服务器实例