Skip to main content

添加第二台 IPA 服务器

用 ipa-replica-install 加一台 replica 做多 master:装前检查、安装命令、哪些告警可以忽略、装后必做,以及装失败怎么清干净重来。

第二台 IPA 服务器(replica)与第一台是多 master,目录、KDC、CA、DNS 全部双向复制,任何一台停机域照常工作。管理台目前只装在第一台上,replica 是纯 FreeIPA;命令行 ipa 在两台上都能用。

replica 装机不走 playbook,用 FreeIPA 自带的 ipa-replica-install。它对目标主机的干净程度要求比 ipa-server-install 更苛刻,装前检查不要省。

装前检查(在新主机上)

主机名解析

hostname -f                          # FQDN
getent hosts $(hostname -f)          # 第一条必须是真实 IPv4,不能是 ::1 或 127.0.0.1
grep '^hosts' /etc/nsswitch.conf     # 应为 hosts: files dns,没有 myhostname

/etc/hosts 里主机名不能挂在 ::1127.0.0.1 那行;nsswitch.confhosts:myhostname 时 IPv6 查询回 ::1,IPA 会拒装或建出指向回环的记录。改成 hosts: files dns

ipa-client-install --uninstall 会把 nsswitch.conf 还原成装前备份,每次卸载重来都要重改这一行。

系统完整性

replica 要在干净系统上装。被人工清理过的机器会在不同步骤挂掉,且每次挂的地方不一样。

rpm -q mod_ssl ipa-server ipa-server-dns sssd-common idm-pki-base bind-dyndb-ldap
rpm -Va --nofiledigest --nomtime --nomode 2>/dev/null | grep '^missing' || echo "no missing files"
ls -l /etc/krb5.conf.d/crypto-policies      # 必须存在,指向 /etc/crypto-policies/back-ends/krb5.config

rpm -Vamissingrpm -qf <路径> 找到包,dnf reinstall,然后 restorecon -Rv 修 SELinux 标签。

/etc/krb5.conf.d/crypto-policiesupdate-crypto-policies 生成的软链,不属于任何 rpmrpm -Va 查不出它缺失。缺了它 KDC 不受 permitted_enctypes 约束,会用 camellia 签票,第一台按自己的策略一律拒收,复制就断在 Invalid credentials (49)。缺了就 update-crypto-policies --set DEFAULT,还没有就手工 ln -s /etc/crypto-policies/back-ends/krb5.config /etc/krb5.conf.d/crypto-policies

时间、端口、第一台的状态

chronyc sources                      # 与第一台时差 < 5 分钟
ss -lntp | grep -E ':(389|636|8443|8080) ' || echo "ports clear"

在第一台上:ipactl status 全 RUNNING;ipa server-findipa topologysegment-find domain 里没有新主机的残留(上次失败留下的)。

许可

replica 本身不需要许可。第一台的许可要含「证书签发」模块(每档都有),否则 replica 装机在申请 dirsrv 证书那步报 CA_UNREACHABLE。1.0.2 起 FreeIPA 自身的证书请求不经过许可闸门,这个限制不再存在。

安装

在新主机上,先注册为客户端再提升:

ipa-client-install --domain=<> --realm=<REALM> \
  --server=<第一台 FQDN> --principal admin -U -p admin -w '<admin口令>'

kinit admin
ipa-replica-install --setup-ca --setup-dns --forwarder=<第一台用的转发器> -U

第一台的转发器:ipa dnsconfig-show(全局)为空就看 ipa dnsserver-show <第一台 FQDN>(每服务器)。没有转发器用 --no-forwarders

第一步的 -p admin -w 只用于注册;第二步 -U 非交互模式需要一张有效的 admin 票,所以中间要 kinit admin,或给第二步加 --principal admin --admin-password

全程 10 到 15 分钟:目录 40 步 → KDC → dirsrv TLS → httpd 21 步 → CA 33 步(约 3 分钟)→ DNS 9 步 → DNSSEC 密钥同步。

可以忽略的输出

输出含义
DNS server <转发器> does not support DNSSEC上游不签 DNSSEC,装机自动关校验
Reverse DNS resolution of address <第一台 IP> failed没建反向区,装后补
Replica DNS records could not be added on master: Insufficient access装机中途的 ACI 时序问题,replica 自己的 DNS 段会补上 A 记录,装后核对
Could not add certificate to service ldap/... entry: no modifications to be performed证书已在,幂等跳过

装后必做

# 新主机
ipactl status                              # 9 个(无 adtrust)或 11 个服务全 RUNNING
getcert list | grep -c MONITORING          # 8 或 9

# 第一台
ipa server-find                            # 两台
ipa topologysegment-find domain            # 一段,Connectivity: both
dig +short <新主机 FQDN>                    # A 记录在

复制必须实测topologysegmentipa-replica-manage list 都不代表数据在流动:

# 第一台
ipa user-add repltest --first=a --last=b
# 新主机,等 15 秒
ipa user-show repltest
# 反向再来一次,然后在第一台删掉
ipa user-del repltest

反向区(装机警告过的)在任一台上建,两台自动同步:

ipa dnszone-add <反向>.in-addr.arpa.
ipa dnsrecord-add <反向>.in-addr.arpa. <> --ptr-rec=<新主机 FQDN>.

建之前先 dig -x 确认这个网段没有别的 DNS 在做权威,否则冲突。

复制不通

装机成功但 user-add 不同步,先看两边的复制状态:

ldapsearch -QY GSSAPI -o ldif-wrap=no -b "cn=mapping tree,cn=config" \
  "(objectclass=nsds5replicationagreement)" cn nsds5replicaLastUpdateStatusJSON | grep -E "^cn:|Status"
状态原因处理
Invalid credentials (49),DS 日志 gss_accept_sec_context新主机缺 /etc/krb5.conf.d/crypto-policies,KDC 签了 camellia 票补软链,systemctl restart krb5kdc,再 systemctl restart dirsrv@<REALM>
Local error (-2)KDC 不可用时留下的旧状态KDC 起来后 systemctl restart dirsrv@<REALM>,然后 dsconf slapd-<REALM> repl-agmt poke --suffix "dc=..." <协议名>
state: green 但数据不动RUV 里有失败安装留下的僵尸 replica iddsconf slapd-<REALM> repl-tasks cleanallruv --suffix "dc=..." --replica-id <id>,两台都跑

dsconf 以 root 通过 LDAPI 自动绑定为 Directory Manager,不需要口令。

在新主机用第一台的 KDC 强制拿票再绑定,可以直接分清是哪一侧的问题:

KRB5_TRACE=/dev/stdout ldapwhoami -Y GSSAPI -H ldap://<第一台 FQDN> 2>&1 | grep -E "tkt=|Invalid"

tkt=camellia256-cts-cmac 就是上面第一行的病。

装失败了重来

ipa-replica-install 失败后两边都有残留,都要清:

# 新主机
ipa-server-install --uninstall -U --ignore-topology-disconnect
dsctl slapd-<REALM> remove --do-it 2>/dev/null
rm -rf /etc/dirsrv/slapd-<REALM> /etc/pki/pki-tomcat /var/lib/pki/pki-tomcat /var/log/pki/pki-tomcat /etc/ipa/default.conf
rm -f /var/lib/ipa/sysrestore/sysrestore.state /var/lib/ipa/sysrestore/sysrestore.index
getcert list | grep -o "Request ID '[0-9]*'"     # 有就 getcert stop-tracking -i <id>
systemctl stop krb5kdc kadmin
sed -i 's/^hosts:.*/hosts:      files dns/' /etc/nsswitch.conf     # 卸载把它还原了

# 第一台
ipa server-del <新主机 FQDN> --force --ignore-topology-disconnect --ignore-last-of-role
ipa host-del <新主机 FQDN>
ipa server-find; ipa topologysegment-find domain      # 只剩第一台,0 段

ipa-server-install --uninstallIPA server is not configured 是正常的,它照样会去第一台摘 server 条目。报 Replication topology is disconnected 就加 --ignore-topology-disconnect

两边都干净了,从「装前检查」重新走一遍。装机中被 restart 过 KDC 的话记得它依赖目录服务,systemctl restart krb5kdc kadmin dirsrv@... 一起重启会让 KDC 先起而连不上 LDAP,用 ipactl restart 代替。

本页内容