UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS6 Samba4でDCの冗長化

 


■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 ]





 関連記事
 Samba4の概要
 Samba4を初期セットアップ

 Samba4をRSATで管理

 Samba4でsamba-toolを使う
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.