由于位置变更,我们必须将一些服务器移至新 IP 地址(从10.X.*.*
到10.Y.*.*
)。我们借此机会清理 IP 分配,从杂乱无章的设置变为更加有序的设置,因此新旧 IP 之间没有太多对应关系。系统几乎全部:
- 运行 Ubuntu(14.04,还有几个 12.04 和一个我们计划升级的 10.04)
- 由 Puppet 和 Foreman 管理(主要是软件包安装和服务配置)
- 使用 etckeeper 配置,以将功能相关的配置保存在 git 中
- 通过 配置静态 IP
/etc/network/interfaces
。
目前,我们有两个选择:
- 提前在文件副本中进行所有更改,并在移动后服务器重新启动时使用脚本切换文件。
- 提前在 git 分支中做出所有更改,然后在移动后服务器重新启动时执行
git checkout new-branch
(或根据方便,合并更改)。
本质上两种方法是一样的,只是使用的工具不同。当然,也有手动方法,但那样很容易出错。
要进行的更改涉及更新 IP interfaces
、DNS 服务器 IP、nagios、munin 配置 IP 等等。
我还有什么其他选择?
答案1
最后,我们决定使用 git 方法,更改 IP 是我们最不担心的问题。:)
步骤:
- 使用 Puppet 安装和设置 etckeeper,并为我们 Gitlab 实例上的每个服务器创建一个 repo。我们选择使用
gitignore
忽略除选择文件和目录之外的所有内容的 repo。 - 让团队成员创建一个包含所需更改的分支(使用通用名称,如
newip
)。此练习还涉及将任何感兴趣的文件或目录添加到 git,将例外添加到gitignore
。 - 检查新分支上的提交。
- 在切换当天,
cd /etc; git fetch origin newip:newip && git merge newip
在每个系统上,在关闭之前。
我们遇到了一些合并冲突,这些冲突来自于为测试其他选项而进行的更改(并且没有撤消),但这些冲突很容易解决。