0

我们目前有一个动态提供的 IP 地址,并且正在切换到一个静态 IP 地址。因此,我需要更改我们 3 台 LAMP 服务器上的 IP 地址。这些服务器还为 DNS 运行 bind9,为电子邮件运行 postfix/dovecot。(MySQL 实际上是作为 Percona 数据库集群运行的,这可能无关紧要。)

我认为我有一个很好的策略,但想与以前可能成功完成此操作的其他人一起检查我的逻辑。

其概念是一次停止每台机器上的所有 Web、数据库和邮件服务,将流量推送到剩余的两台服务器之一,并运行以下脚本将旧 IP 地址替换为新 IP 地址,然后重新启动服务器并尝试将流量推回它,然后如果一切顺利,则继续使用集群中的下一个服务器。

我使用 grep -r 在系统中查找旧 IP 地址的实例,并且需要确保我没有遗漏任何需要考虑的重要内容。

find /etc/bind -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/postfix -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/apache2 -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/postfix -type f -print0 | xargs -0 sed -i 's/old-ip-address/new-ip-address/g'
find /etc/bind -type f -print0 | xargs -0 sed -i 's/rev.address.ip.old/rev.address.ip.new/g'

作为澄清点,grep -r 在 /etc/bind/zones 表、/etc/postfix 配置文件和 /etc/apache2 配置文件中找到了 IP 地址引用。用连字符分隔的 IP 地址也在后缀配置文件中找到。反向 IP 地址也在 /etc/bind/named.conf.local 文件中找到,也需要替换。

谁能看看我是否在这里遗漏了什么?我在生产环境中执行此操作……当然,这不是最理想的情况。

4

2 回答 2

1

对不起大家。看起来我在找到解决方案后让它变得陈旧。为了后代的缘故,这似乎是在这一点上工作:

$ORIGIN example.com.
$TTL 12H
; @ symbol represents example.com.
@   12H IN  SOA ns1.example.com.    hostmaster@example.com. (
2015062954 ;serial
30M ;refresh
2M ;retry
2W ;expire
1D ;minimum TTL
)
NS  ns1.example.com.
NS  ns2.example.com.
MX  10  mail.example.com.
IN  A   99.101.XXX.XXX
IN  TXT "v=spf1 a mx ip4:99.101.XXX.XXX ~all"
IN  SPF "v=spf1 a mx ip4:99.101.XXX.XXX -all"
ns1 IN  A   99.101.XXX.XXX
ns2 IN  A   99.101.XXX.XXX
mail    IN  A   99.101.XXX.XXX
IN  TXT "v=spf1 a mx ip4:99.101.XXX.XXX ~all"
IN  SPF "v=spf1 a mx ip4:99.101.XXX.XXX -all"
www IN  A   99.101.XXX.XXX
dev IN  A   99.101.XXX.XXX
demo    IN  A   99.101.XXX.XXX
webconf IN  A   99.101.XXX.XXX
stats   IN  A   99.101.XXX.XXX
于 2015-08-14T16:42:22.607 回答
0

虽然使用find管道的想法xargs听起来很合理,但我会以我 15 年的经验告诉你这是一个坏主意。我建议:

  1. 识别那些在重要的盒子上运行的服务(你的 find 命令在这里很好用)
  2. 识别那些对定义了地址的服务很重要的文件
  3. 备份这些文件(cp 到 .orig 效果很好)
  4. 创建包含新地址的新文件

这样您就可以快速过渡:

cp somefile.new somefile

并通过以下方式快速退出:

cp somefile.orig somefile

此外,我希望区域文件包含实际的 DNS 条目,因此更改它们很好,但您可能需要重新加载命名才能使这些更改生效。后缀也是如此,您也需要后缀重新加载它们。

编辑(我没有花时间实际加载这个区域,但它看起来相当正确):

$ORIGIN example.com. 
$TTL 12H @  IN  SOA ns1.example.com.    hostmaster@example.com. ( 
                2015062660 ; 
                30M ;refresh 
                2M ;retry 
                2W ;expire 
                1D ;minimum TTL 
                )   

        IN  NS  ns1.example.com. 
        IN  NS  ns2.example.com. 

        IN  A   99.101.XXX.X 

example.com.    IN  MX  10  mail.example.com. 
mail        IN  A   99.101.XXX.X 
        IN  TXT     "v=spf1 a mx ip4:99.101.XXX.X ~all

ns1     IN  A   99.101.XXX.X 
ns2     IN  A   99.101.XXX.X 
www     IN  CNAME   example.com. 
dev         IN  CNAME   example.com. 
demo        IN  CNAME   example.com. 
webconf     IN  CNAME   example.com. 
stats       IN  CNAME   example.com. 

编辑: 粘合记录

于 2015-06-25T21:19:45.013 回答