■DCの冗長化とレプリケーション機能
DCの冗長化機能は各DC間でユーザ情報やADの構成情報などを複製 ( レプリケーション ) しあうものです。複製はマルチマスター方式を採用しているため全てのDCが互いに対等な関係にあり、どのDCでもデータが更新可能です。
ADを構成する要素はドメインだけではなくそれらを包括するフォレストという概念もあります。そしてフォレスト全体で共有すべきデータには違いがあります。ADのデータベースは4つの論理的なパーティションに分類されます。
パーティション | 概要 | レプリケーション範囲 |
アプリケーション | アプリケーション固有の情報を格納 ( DNSのレコードなど ) | アプリにより異なる |
ドメイン | ドメイン固有の情報を格納 ( ユーザなど ) | ドメイン内 |
スキーマ | データベースのデータ型などに関する情報を格納 | フォレスト内 |
構成 | レプリケーションのスケジュールやレプリカセットなどに関する情報を格納 | フォレスト内 |
それぞれのドメイン内のDC間で共有すべきもの、フォレスト全体のDCで共有すべきものにわけられ、ADデータベースの論理パーティションのようになっています。
なお、アプリケーションパーティションは特定のDCのみにレプリケーションされるデータを格納します。例えばDNSのレコード情報などが格納されます。AD DCを構成する上ではDNSとの連携は不可欠ですが全てのDCにDNSが必要というわけではありません。そのためDNSのレコード情報はDNSサーバがインストールされたDCのみにレプリケーションされれば良いということになります。
実際のレプリケーションの流れは以下の通りです。
(1) データ更新が特定のDCで生じる
(2) 更新元DCからレプリケーションが可能であることを各DCに通知
(3) 通知を受け取ったDCから変更要求が返され直ちに複製開始
■2台目のDC構築
ActiveDirectoryのドメインコントローラはその組織において1台だけというのはあまりなく、2台以上で冗長化しておくのが一般的です。ここでは2台目のドメインコントローラを追加するメモ書きです。2台目のLinuxにおいてもやはりSamba4が必要ですので1台目のときと同様にepelおよびwingリポジトリを追加後、samba4をインストールします。
# wget http://wing-net.ddo.jp/wing/6/EL6.wing.repo # mv EL6.wing.repo /etc/yum.repos.d/ # vi /etc/yum.repos.d/EL6.wing.repo [wing] name=EL $releasever - $basearch - wing Repository baseurl=http://wing-net.ddo.jp/wing/$releasever/$basearch/ enabled=1 gpgcheck=0 priority=2 [wing-source] name=EL $releasever - $basearch - wing source Repository baseurl=http://wing-net.ddo.jp/wing/$releasever/SRPMS/ enabled=1 gpgcheck=0 priority=2 |
そしてyumからインストールを行います。
# yum install samba4 samba4-clients ldb-tools krb5-workstation # rpm -qa | grep samba4 samba4-python-4.0.3-5.el6_5.wing.i686 samba4-common-4.0.3-5.el6_5.wing.i686 samba4-libs-4.0.3-5.el6_5.wing.i686 samba4-dc-4.0.3-5.el6_5.wing.i686 samba4-4.0.3-5.el6_5.wing.i686 samba4-dc-libs-4.0.3-5.el6_5.wing.i686 samba4-client-4.0.3-5.el6_5.wing.i686 |
■事前準備
Samba4で構築しているドメインに2台目のドメインコントローラとしてドメインに参加します。DNSの向け先を1台目のドメインコントローラ1 ( 192.168.12.20 ) に変更します。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DNS1=192.168.12.20 # /etc/rc.d/init.d/network restart |
続いてkerberosの設定を行なっておきます。
# vi /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = UNIX-POWER.LOCAL dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = kerberos.example.com } UNIX-POWER.LOCAL = { kdc = samba.unix-power.local } [domain_realm] .unix-power.local = UNIX-POWER.LOCAL unix-power.local = UNIX-POWER.LOCAL |
続いて/etc/samba/smb.confを編集しておきます。
# vi /etc/samba/smb.conf [global] dns forwarder = 192.168.12.1 |
事前準備が整いましたのでドメインに参加します。まず既存ドメインコントローラが認識できるか確認します。
# kinit administrator@UNIX-POWER.LOCAL Password for administrator@UNIX-POWER.LOCAL: Warning: Your password will expire in 41 days on Fri Apr 26 18:37:34 2013 |
次にSamba4を起動してドメインに参加します。
# /etc/rc.d/init.d/samba start # samba-tool domain join unix-power.local DC -U administrator Finding a writeable DC for domain 'unix-power.local' Found DC samba.unix-power.local Password for [WORKGROUP\administrator]: workgroup is UNIX-POWER realm is unix-power.local checking sAMAccountName Adding CN=SAMBA2,OU=Domain Controllers,DC=unix-power,DC=local Adding CN=SAMBA2,CN=Servers,・・・・ Adding CN=NTDS Settings,CN=SAMBA2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,\ DC=unix-power,DC=local Adding SPNs to CN=SAMBA2,OU=Domain Controllers,DC=unix-power,DC=local Setting account password for SAMBA2$ Enabling account Calling bare provision No IPv6 address will be assigned Provision OK for domain DN DC=unix-power,DC=local Starting replication Schema-DN[CN=Schema,CN=Configuration,DC=unix-power,DC=local] objects[402/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=unix-power,DC=local] objects[804/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=unix-power,DC=local] objects[1206/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=unix-power,DC=local] objects[1550/1550] linked_values[0/0] Analyze and apply schema objects Partition[CN=Configuration,DC=unix-power,DC=local] objects[402/1614] linked_values[0/0] Partition[CN=Configuration,DC=unix-power,DC=local] objects[804/1614] linked_values[0/0] Partition[CN=Configuration,DC=unix-power,DC=local] objects[1206/1614] linked_values[0/0] Partition[CN=Configuration,DC=unix-power,DC=local] objects[1608/1614] linked_values[0/0] Partition[CN=Configuration,DC=unix-power,DC=local] objects[1614/1614] linked_values[28/0] Replicating critical objects from the base DN of the domain Partition[DC=unix-power,DC=local] objects[97/97] linked_values[23/0] Partition[DC=unix-power,DC=local] objects[310/213] linked_values[23/0] Done with always replicated NC (base, config, schema) Replicating DC=DomainDnsZones,DC=unix-power,DC=local Partition[DC=DomainDnsZones,DC=unix-power,DC=local] objects[41/41] linked_values[0/0] Replicating DC=ForestDnsZones,DC=unix-power,DC=local Partition[DC=ForestDnsZones,DC=unix-power,DC=local] objects[18/18] linked_values[0/0] Partition[DC=ForestDnsZones,DC=unix-power,DC=local] objects[36/18] linked_values[0/0] Committing SAM database Sending DsReplicateUpdateRefs for all the replicated partitions Setting isSynchronized and dsServiceName Setting up secrets database Joined domain UNIX-POWER (SID S-1-5-21-550813945-2811651742-35839859) as a DC |
これで2台目のDC ( samba2 ) がDNSに登録されたか確認してみます。
# samba-tool dns query 127.0.0.1 unix-power.local @ A -U administrator Password for [UNIX-POWER\administrator]: Name=, Records=3, Children=0 A: 192.168.11.20 (flags=600000f0, serial=1, ttl=900) A: 192.168.12.20 (flags=600000f0, serial=110, ttl=900) A: 192.168.12.21 (flags=600000f0, serial=110, ttl=900) Name=_msdcs, Records=0, Children=0 Name=_sites, Records=0, Children=1 Name=_tcp, Records=0, Children=4 Name=_udp, Records=0, Children=2 Name=DomainDnsZones, Records=0, Children=2 Name=ForestDnsZones, Records=0, Children=2 Name=samba, Records=2, Children=0 A: 192.168.12.20 (flags=f0, serial=110, ttl=900) A: 192.168.11.20 (flags=f0, serial=110, ttl=900) Name=samba2, Records=1, Children=0 A: 192.168.12.21 (flags=f0, serial=110, ttl=900) Name=win2008, Records=1, Children=0 A: 192.168.12.201 (flags=f0, serial=110, ttl=1200) |
無事登録されているのが確認できます。
あとはsamba ( 既存DC ) にRSATで接続してユーザ登録、削除などを行いそれがsamba2にも反映されることを確認してください。その確認がとれればレプリケーションも行われているということになります。それ以降はRSATでWindows Serverと同様にLinuxのSambaであることを意識せずにActiveDirectoryを操作可能です。
■FSMO ( Flexible Single Master Operation )
Active Directoryにおけるドメイン・コントローラは、同じドメイン内のDCはすべて同じActive Directoryデータベース情報を共有し、それらは同等な役割を担っています。しかし完全に同等というわけではなく、いくつかの特別な用途(役割)に関しては、特定の1台のコンピュータだけが処理を担当していおり、この特別な役割のことを「操作マスタ(FSMO:Flexible Single Master Operation)」といい、次の5つがあります。
FSMOの役割 | 処理内容 | 単位 |
スキーママスタ | ActiveDirectoryデータベースのスキーマ変更処理 | フォレスト |
ドメイン名前付操作マスタ | フォレストに対するドメインの追加や削除 | フォレスト |
RIDマスタ | ユーザアカウントなどで利用されるSIDの一部であるRIDの生成 | ドメイン |
PDCマスタ | NTドメインのPDCの役割のエミュレーション | ドメイン |
インフラストラクチャマスタ | グループアカウントにおけるメンバーの割り当て | ドメイン |
ドメインコントローラが1台だけであれば上記は全てその1台が役割を持つわけですが、2台以上ある場合、最初に構築したドメインコントローラから後から追加したドメインコントローラに役割を転送することができます。まず現状のFSMOがどうなっているか下記コマンドで確認してみます。
# samba-tool fsmo show InfrastructureMasterRole owner: CN=NTDS Settings,CN=SAMBA,CN=Servers,・・・・ RidAllocationMasterRole owner: CN=NTDS Settings,CN=SAMBA2,CN=Servers,・・・・ PdcEmulationMasterRole owner: CN=NTDS Settings,CN=SAMBA,CN=Servers,・・・・ DomainNamingMasterRole owner: CN=NTDS Settings,CN=SAMBA,CN=Servers,・・・・ SchemaMasterRole owner: CN=NTDS Settings,CN=SAMBA,CN=Servers,・・・・ |
これらを別のDCに転送する場合、転送先のDCで以下のコマンドを実施することにより役割を転送できます。
# samba-tool fsmo transfer --role [ rid | pdc | infrastructure | schema | naming | all ] |