RHEL8/CentOS8の標準samba 4.12では新規Active Directoryサーバの構築は非サポート?


RHEL8/CentOS8/Oracle Linux 8で用意されているsambaパッケージを使ってActive Direcotryサーバを立てることができるか確認してみた。

公式資料:[Red Hat Enterprise Linux 8 にさまざまな種類のサーバーをデプロイするためのガイド]-[第3章 SAMBA をサーバーとして使用]

まずは、パッケージのインストール

# yum install samba
<略>
# rpm -qa|grep samba
samba-libs-4.12.3-12.el8.3.x86_64
samba-common-4.12.3-12.el8.3.noarch
samba-client-libs-4.12.3-12.el8.3.x86_64
samba-common-tools-4.12.3-12.el8.3.x86_64
samba-common-libs-4.12.3-12.el8.3.x86_64
samba-4.12.3-12.el8.3.x86_64
#

で、RHEL8/CentOS8での特徴の1つ、「samba-toolが無い」問題。

じゃぁ、どうするの?と前出のマニュアル見てみれば手動で /etc/samba/smb.conf を編集している。

初期状態でどんな設定になるのか

[root@samba48 ~]# ls -l /etc/samba/
合計 20
-rw-r--r--. 1 root root    20  8月 18 05:50 lmhosts
-rw-r--r--. 1 root root   706  8月 18 05:50 smb.conf
-rw-r--r--. 1 root root 11327  8月 18 05:50 smb.conf.example
[root@samba48 ~]# cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775
[root@samba48 ~]#

参考まで、samba-toolsで作った場合のsmb.confは下記の様になっている。

# Global parameters
[global]
        dns forwarder = 上DNSサーバIPアドレス
        netbios name = samba48
        realm = testad2.local
        server role = active directory domain controller
        workgroup = TESTAD2
        idmap_ldb:use rfc2307 = yes
        allow dns updates = nonsecure
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate dns
        ldap server require strong auth = no

[netlogon]
        path = /usr/local/samba/var/locks/sysvol/testad2.local/scripts
        read only = No

[sysvol]
        path = /usr/local/samba/var/locks/sysvol
        read only = No

で、[第3章 SAMBA をサーバーとして使用]を見ると、「スタンドアローンサーバとして単独WORKGROUPをたてる場合」と「既存Active Directory環境にメンバーサーバとして参加する場合」しか用意されておらず、「新規Active Directory環境を作る場合」というものが無い。

samba-toolコマンドを使用しない場合のActive Directory構築手順も見当たらないため、RHEL8/CentOS8が標準で用意しているsambaパッケージを使用しての構築はできないようだ。


CentOS8の場合「yum search samba」でパッケージ検索すると、「centos-releae-samba41?」といった追加レポジトリが出てくる。

[root@samba48 ~]# yum search samba
メタデータの期限切れの最終確認: 0:30:30 時間前の 2021年01月21日 09時31分03秒 に実施しました。
==================================== 名前 完全一致: samba ====================================
samba.x86_64 : Server and Client software to interoperate with Windows machines
================================== 名前 & 概要 一致: samba ===================================
centos-release-samba411.noarch : Samba 4.11 packages from the CentOS Storage SIG repository
centos-release-samba412.noarch : Samba 4.12 packages from the CentOS Storage SIG repository
centos-release-samba413.noarch : Samba 4.13 packages from the CentOS Storage SIG repository
ipa-client-samba.x86_64 : Tools to configure Samba on IPA client
pcp-pmda-samba.x86_64 : Performance Co-Pilot (PCP) metrics for Samba
python3-samba.i686 : Samba Python3 libraries
python3-samba.x86_64 : Samba Python3 libraries
python3-samba-test.x86_64 : Samba Python libraries
samba-client.x86_64 : Samba client programs
samba-client-libs.x86_64 : Samba client libraries
samba-client-libs.i686 : Samba client libraries
samba-common.noarch : Files used by both Samba servers and clients
samba-common-libs.x86_64 : Libraries used by both Samba servers and clients
samba-common-tools.x86_64 : Tools for Samba servers and clients
samba-krb5-printing.x86_64 : Samba CUPS backend for printing with Kerberos
samba-libs.x86_64 : Samba libraries
samba-libs.i686 : Samba libraries
samba-test.x86_64 : Testing tools for Samba servers and clients
samba-test-libs.x86_64 : Libraries need by the testing tools for Samba servers and clients
samba-winbind.x86_64 : Samba winbind
samba-winbind-clients.x86_64 : Samba winbind clients
samba-winbind-krb5-locator.x86_64 : Samba winbind krb5 locator
samba-winbind-modules.i686 : Samba winbind modules
samba-winbind-modules.x86_64 : Samba winbind modules
====================================== 名前 一致: samba ======================================
samba-pidl.noarch : Perl IDL compiler
====================================== 概要 一致: samba ======================================
ctdb.x86_64 : A Clustered Database based on Samba's Trivial Database (TDB)
[root@samba48 ~]#

centos-release-samba413をインストールしてみる

[root@samba48 ~]# yum install centos-release-samba413
メタデータの期限切れの最終確認: 1:32:19 時間前の 2021年01月21日 09時31分03秒 に実施しました。
依存関係が解決しました。
==============================================================================================
 パッケージ                            Arch           バージョン         リポジトリー   サイズ
==============================================================================================
インストール:
 centos-release-samba413               noarch         1.0-1.el8          extras         8.8 k
依存関係のインストール:
 centos-release-storage-common         noarch         2-2.el8            extras         9.4 k

トランザクションの概要
==============================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 18 k
インストール済みのサイズ: 2.0 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): centos-release-samba413-1.0-1.el8.noarch.rpm           231 kB/s | 8.8 kB     00:00
(2/2): centos-release-storage-common-2-2.el8.noarch.rpm       252 kB/s | 9.4 kB     00:00
----------------------------------------------------------------------------------------------
合計                                                           31 kB/s |  18 kB     00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                      1/1
  インストール     : centos-release-storage-common-2-2.el8.noarch                         1/2
  インストール     : centos-release-samba413-1.0-1.el8.noarch                             2/2
  scriptletの実行中: centos-release-samba413-1.0-1.el8.noarch                             2/2
  検証             : centos-release-samba413-1.0-1.el8.noarch                             1/2
  検証             : centos-release-storage-common-2-2.el8.noarch                         2/2

インストール済み:
  centos-release-samba413-1.0-1.el8.noarch    centos-release-storage-common-2-2.el8.noarch

完了しました!
[root@samba48 ~]#

そうすると、インストールされていたsmba 4.12がアップデートできるようになりました

[root@samba48 ~]# yum check-update
メタデータの期限切れの最終確認: 0:02:42 時間前の 2021年01月21日 11時03分56秒 に実施しました。

libwbclient.x86_64                            4.13.3-1.el8                     centos-samba413
samba.x86_64                                  4.13.3-1.el8                     centos-samba413
samba-client-libs.x86_64                      4.13.3-1.el8                     centos-samba413
samba-common.noarch                           4.13.3-1.el8                     centos-samba413
samba-common-libs.x86_64                      4.13.3-1.el8                     centos-samba413
samba-common-tools.x86_64                     4.13.3-1.el8                     centos-samba413
samba-libs.x86_64                             4.13.3-1.el8                     centos-samba413
[root@samba48 ~]#

yum updateすると、「/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません」って出てるけど、これは大丈夫なんだろうか….

[root@samba48 ~]# yum update -y
メタデータの期限切れの最終確認: 0:03:30 時間前の 2021年01月21日 11時03分56秒 に実施しました。
依存関係が解決しました。
==============================================================================================
 パッケージ                Arch    バージョン                          リポジトリー     サイズ
==============================================================================================
アップグレード:
 libwbclient               x86_64  4.13.3-1.el8                        centos-samba413   37 k
 samba                     x86_64  4.13.3-1.el8                        centos-samba413  757 k
 samba-client-libs         x86_64  4.13.3-1.el8                        centos-samba413  5.5 M
 samba-common              noarch  4.13.3-1.el8                        centos-samba413  135 k
 samba-common-libs         x86_64  4.13.3-1.el8                        centos-samba413  124 k
 samba-common-tools        x86_64  4.13.3-1.el8                        centos-samba413  416 k
 samba-libs                x86_64  4.13.3-1.el8                        centos-samba413  110 k
依存関係のインストール:
 checkpolicy               x86_64  2.9-1.el8                           baseos           348 k
 glusterfs                 x86_64  6.0-37.2.el8                        baseos           662 k
 glusterfs-api             x86_64  6.0-37.2.el8                        appstream         95 k
 glusterfs-client-xlators  x86_64  6.0-37.2.el8                        baseos           870 k
 glusterfs-libs            x86_64  6.0-37.2.el8                        baseos           413 k
 python3-audit             x86_64  3.0-0.17.20191104git1c2f876.el8     baseos            86 k
 python3-libsemanage       x86_64  2.9-3.el8                           baseos           127 k
 python3-policycoreutils   noarch  2.9-9.el8                           baseos           2.2 M
 python3-setools           x86_64  4.3.0-2.el8                         baseos           626 k
 samba-vfs-glusterfs       x86_64  4.13.3-1.el8                        centos-samba413   40 k

トランザクションの概要
==============================================================================================
インストール    10 パッケージ
アップグレード   7 パッケージ

ダウンロードサイズの合計: 12 M
パッケージのダウンロード:
(1/17): glusterfs-api-6.0-37.2.el8.x86_64.rpm                 1.2 MB/s |  95 kB     00:00
(2/17): checkpolicy-2.9-1.el8.x86_64.rpm                      1.4 MB/s | 348 kB     00:00
(3/17): glusterfs-6.0-37.2.el8.x86_64.rpm                     2.4 MB/s | 662 kB     00:00
(4/17): python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64. 3.0 MB/s |  86 kB     00:00
(5/17): python3-libsemanage-2.9-3.el8.x86_64.rpm              3.2 MB/s | 127 kB     00:00
(6/17): glusterfs-libs-6.0-37.2.el8.x86_64.rpm                3.4 MB/s | 413 kB     00:00
(7/17): glusterfs-client-xlators-6.0-37.2.el8.x86_64.rpm      2.5 MB/s | 870 kB     00:00
(8/17): python3-setools-4.3.0-2.el8.x86_64.rpm                4.4 MB/s | 626 kB     00:00
(9/17): samba-vfs-glusterfs-4.13.3-1.el8.x86_64.rpm           253 kB/s |  40 kB     00:00
(10/17): libwbclient-4.13.3-1.el8.x86_64.rpm                  379 kB/s |  37 kB     00:00
(11/17): samba-4.13.3-1.el8.x86_64.rpm                        2.4 MB/s | 757 kB     00:00
(12/17): python3-policycoreutils-2.9-9.el8.noarch.rpm         3.9 MB/s | 2.2 MB     00:00
(13/17): samba-common-4.13.3-1.el8.noarch.rpm                 2.6 MB/s | 135 kB     00:00
(14/17): samba-common-libs-4.13.3-1.el8.x86_64.rpm            1.4 MB/s | 124 kB     00:00
(15/17): samba-common-tools-4.13.3-1.el8.x86_64.rpm           3.2 MB/s | 416 kB     00:00
(16/17): samba-libs-4.13.3-1.el8.x86_64.rpm                   1.4 MB/s | 110 kB     00:00
(17/17): samba-client-libs-4.13.3-1.el8.x86_64.rpm            5.0 MB/s | 5.5 MB     00:01
----------------------------------------------------------------------------------------------
合計                                                          4.2 MB/s |  12 MB     00:02
警告: /var/cache/dnf/centos-samba413-5ae787790677bc21/packages/samba-vfs-glusterfs-4.13.3-1.el8.x86_64.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID e451e5b5: NOKEY
CentOS-8 - Samba 4.13                                         1.0 MB/s | 1.0 kB     00:00
GPG 鍵 0xE451E5B5 をインポート中:
 Userid     : "CentOS Storage SIG (http://wiki.centos.org/SpecialInterestGroup/Storage) <security@centos.org>"
 Fingerprint: 7412 9C0B 173B 071A 3775 951A D4A2 E50B E451 E5B5
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                      1/1
  scriptletの実行中: samba-common-4.13.3-1.el8.noarch                                     1/1
  scriptletの実行中: samba-common-4.13.3-1.el8.noarch                                    1/24
  アップグレード   : samba-common-4.13.3-1.el8.noarch                                    1/24
  scriptletの実行中: samba-common-4.13.3-1.el8.noarch                                    1/24
  アップグレード   : samba-common-libs-4.13.3-1.el8.x86_64                               2/24
  scriptletの実行中: samba-common-libs-4.13.3-1.el8.x86_64                               2/24
  アップグレード   : samba-client-libs-4.13.3-1.el8.x86_64                               3/24
  scriptletの実行中: samba-client-libs-4.13.3-1.el8.x86_64                               3/24
/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません


  アップグレード   : libwbclient-4.13.3-1.el8.x86_64                                     4/24
  アップグレード   : samba-libs-4.13.3-1.el8.x86_64                                      5/24
  scriptletの実行中: samba-libs-4.13.3-1.el8.x86_64                                      5/24
/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません


  インストール     : glusterfs-libs-6.0-37.2.el8.x86_64                                  6/24
  scriptletの実行中: glusterfs-libs-6.0-37.2.el8.x86_64                                  6/24
/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません


  scriptletの実行中: glusterfs-6.0-37.2.el8.x86_64                                       7/24
  インストール     : glusterfs-6.0-37.2.el8.x86_64                                       7/24
  scriptletの実行中: glusterfs-6.0-37.2.el8.x86_64                                       7/24
/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません


  インストール     : glusterfs-client-xlators-6.0-37.2.el8.x86_64                        8/24
  インストール     : glusterfs-api-6.0-37.2.el8.x86_64                                   9/24
  scriptletの実行中: glusterfs-api-6.0-37.2.el8.x86_64                                   9/24
/sbin/ldconfig: /lib64/libsmbldap.so.2 はシンボリックリンクではありません


  アップグレード   : samba-common-tools-4.13.3-1.el8.x86_64                             10/24
  インストール     : python3-setools-4.3.0-2.el8.x86_64                                 11/24
  インストール     : python3-libsemanage-2.9-3.el8.x86_64                               12/24
  インストール     : python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64               13/24
  インストール     : checkpolicy-2.9-1.el8.x86_64                                       14/24
  インストール     : python3-policycoreutils-2.9-9.el8.noarch                           15/24
  アップグレード   : samba-4.13.3-1.el8.x86_64                                          16/24
  scriptletの実行中: samba-4.13.3-1.el8.x86_64                                          16/24
  インストール     : samba-vfs-glusterfs-4.13.3-1.el8.x86_64                            17/24
  scriptletの実行中: samba-4.12.3-12.el8.3.x86_64                                       18/24
  整理             : samba-4.12.3-12.el8.3.x86_64                                       18/24
  scriptletの実行中: samba-4.12.3-12.el8.3.x86_64                                       18/24
  整理             : samba-common-tools-4.12.3-12.el8.3.x86_64                          19/24
  整理             : samba-libs-4.12.3-12.el8.3.x86_64                                  20/24
  整理             : samba-common-libs-4.12.3-12.el8.3.x86_64                           21/24
  整理             : samba-client-libs-4.12.3-12.el8.3.x86_64                           22/24
  scriptletの実行中: libwbclient-4.12.3-12.el8.3.x86_64                                 23/24
  整理             : libwbclient-4.12.3-12.el8.3.x86_64                                 23/24
  整理             : samba-common-4.12.3-12.el8.3.noarch                                24/24
  scriptletの実行中: libwbclient-4.13.3-1.el8.x86_64                                    24/24
  scriptletの実行中: samba-vfs-glusterfs-4.13.3-1.el8.x86_64                            24/24
  scriptletの実行中: samba-common-4.12.3-12.el8.3.noarch                                24/24
  検証             : glusterfs-api-6.0-37.2.el8.x86_64                                   1/24
  検証             : checkpolicy-2.9-1.el8.x86_64                                        2/24
  検証             : glusterfs-6.0-37.2.el8.x86_64                                       3/24
  検証             : glusterfs-client-xlators-6.0-37.2.el8.x86_64                        4/24
  検証             : glusterfs-libs-6.0-37.2.el8.x86_64                                  5/24
  検証             : python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64                6/24
  検証             : python3-libsemanage-2.9-3.el8.x86_64                                7/24
  検証             : python3-policycoreutils-2.9-9.el8.noarch                            8/24
  検証             : python3-setools-4.3.0-2.el8.x86_64                                  9/24
  検証             : samba-vfs-glusterfs-4.13.3-1.el8.x86_64                            10/24
  検証             : libwbclient-4.13.3-1.el8.x86_64                                    11/24
  検証             : libwbclient-4.12.3-12.el8.3.x86_64                                 12/24
  検証             : samba-4.13.3-1.el8.x86_64                                          13/24
  検証             : samba-4.12.3-12.el8.3.x86_64                                       14/24
  検証             : samba-client-libs-4.13.3-1.el8.x86_64                              15/24
  検証             : samba-client-libs-4.12.3-12.el8.3.x86_64                           16/24
  検証             : samba-common-4.13.3-1.el8.noarch                                   17/24
  検証             : samba-common-4.12.3-12.el8.3.noarch                                18/24
  検証             : samba-common-libs-4.13.3-1.el8.x86_64                              19/24
  検証             : samba-common-libs-4.12.3-12.el8.3.x86_64                           20/24
  検証             : samba-common-tools-4.13.3-1.el8.x86_64                             21/24
  検証             : samba-common-tools-4.12.3-12.el8.3.x86_64                          22/24
  検証             : samba-libs-4.13.3-1.el8.x86_64                                     23/24
  検証             : samba-libs-4.12.3-12.el8.3.x86_64                                  24/24

アップグレード済み:
  libwbclient-4.13.3-1.el8.x86_64               samba-4.13.3-1.el8.x86_64
  samba-client-libs-4.13.3-1.el8.x86_64         samba-common-4.13.3-1.el8.noarch
  samba-common-libs-4.13.3-1.el8.x86_64         samba-common-tools-4.13.3-1.el8.x86_64
  samba-libs-4.13.3-1.el8.x86_64

インストール済み:
  checkpolicy-2.9-1.el8.x86_64          glusterfs-6.0-37.2.el8.x86_64
  glusterfs-api-6.0-37.2.el8.x86_64     glusterfs-client-xlators-6.0-37.2.el8.x86_64
  glusterfs-libs-6.0-37.2.el8.x86_64    python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64
  python3-libsemanage-2.9-3.el8.x86_64  python3-policycoreutils-2.9-9.el8.noarch
  python3-setools-4.3.0-2.el8.x86_64    samba-vfs-glusterfs-4.13.3-1.el8.x86_64

完了しました!
[root@samba48 ~]#

まぁ、アップデート完了してもsamba-tool はいませんでしたけどね

[root@samba48 ~]# which samba-tool
/usr/bin/which: no samba-tool in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@samba48 ~]#

というわけで、おとなしくsambaをソースからコンパイルするしかなさそうです。

Backup ExecでNetAppのNDMPバックアップを行おうとしたときに0x20500106(542114054)というエラーになる


Backup ExecでNetAppのNDMPバックアップを行おうとしたときに0x20500106(542114054)というエラーになるという問題が発生した。

技術的詳細をみてみてもよく分からない。

該当の共有を確認すると日本語のディレクトリがある。

そして、NetApp上でボリュームの言語を確認するとja_JP.PCK_v2とUTF-8以外を使用している。

nas01c::> volume show -fields language
vserver   volume language
--------- ------ --------
<略>
svm1      testlang2
                 ja_JP.PCK_v2
nas01c::> 

では、日本語ではなく英数のディレクトリ名に変更

Backup Exec上で問題なく開くことができるようになった。

とりあえず、ボリュームの言語設定の問題であることは判明。

検索すると「How to enable Unicode or UTF-8 Language Support for the NDMP Option」というBackup Exec 11時代の古い記述を発見

ここに書かれている HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\Backup Exec For Windows\Backup Exec\NDMP の UseUTF8の値は「0」であり、UTF-8じゃないボリュームという設定になっているように見える。

この値の変更は、NDMPアクセスをするごとに反映されるようでBackupExecサービスやサーバ再起動は不要だった。

が・・・今回のja_JP.PCK_v2ボリューム上の日本語ディレクトリ問題には対処できなかった。

では、この値変更はBackupExec 21.0で不要かというとそうではなくて、ja_JP.UTF-8ボリュームだと日本語ディレクトリが文字化けで表示される、という問題が発生している。

これが「UseUTF8」の値を「1」に設定することで文字化けが解消されることは確認できた。

さて、本題に戻って、ja_JP.PCK_v2ボリューム上に日本語ディレクトリがある場合にエラーとなる件の対処方法があるかです。

とりあえずボリューム名をクリックするとバックアップ選択はされ、バックアップも完了できました。(レジストリ UseUTF8は0で実施)

リストアを選択すると、きちんと日本語で表示されています。

共有内のファイルを削除してリストアしてみると、正常にリストアされました。

しかし、「実験」だけをリストアしようとするとエラーとなりました。

というわけで、ja_JP.PCK_v2上に日本語ディレクトリがあっても、ボリューム全体をバックアップするのであれば問題無く動作する。

リストア時も全体であればリストアが成功するが、日本語ディレクトリは個別に指定するリストアは失敗する、という動作となりました。

ちなみにja_JP.UTF-8ボリューム上の日本語ディレクトリは文字化けでした。(レジストリUseUTF8は0)

文字化けしている状態であっても、文字化けディレクトリだけを指定してリストアすると正常にリストアできていました。(レジストリUseUTF8は0)


逆にレジストリUseUTF8を1にしてバックアップしたものはリストアできるか検証

ja_JP.UTF-8ボリューム上の日本語は表示できているが、ja_JP.PCK_v2ボリューム上は文字化けています。

リストアジョブを実行してみると成功します。

ja_JP.UTF-8ボリュームではファイル名も問題無くリストアできています。

ja_JP.PCK2_v2の方は文字化けでリストアされています。

ややこしいことにディレクトリ内のファイルについては文字化けせずにリストアされています。

おそらく、指定した階層についてだけ影響があり、それ以下の階層についてはNetApp側で処理されるため元のファイル名のままリストアできたものと想定されます。

NetApp ONTAP9.xでNDMPバックアップする場合の設定項目


NetApp ONTAP 9.xでNDMPバックアップを取得する際に必要な設定項目についての覚え書き

公式のマニュアル:SVMを対象としたNDMPの設定FlexVolのSVMを対象としたNDMPモードの管理

以前は各物理ノードがNDMPを受け付けていたものが、現在はNetAppの管理Storage VM(クラスタ)がNDMPの命令を受け付けるようになっている。

(1) NDMPの有効化

まず、現状有効になっているかを「vserver services ndmp status」を実行して確認する。

ontap-select-cluster::> vserver services ndmp status
This table is currently empty.

ontap-select-cluster::>

有効にするには「vserver services ndmp on -vserver 管理SVM名」を実行する

ontap-select-cluster::> vserver services ndmp on -vserver ontap-select-cluster

ontap-select-cluster::> 

有効になったことを「vserver services ndmp show」を実行して確認する。

ontap-select-cluster::> vserver services ndmp show
VServer       Enabled   Authentication type
------------- --------- -------------------
ontap-select-cluster
              true      challenge
svm0          false     challenge
2 entries were displayed.

ontap-select-cluster::> 

(2) ユーザ作成

NDMPアクセス用のユーザを、NetAppのローカルユーザとして作成する。

下記の例では「backupadmin」というユーザを作成している。「role:backup」という権限で作成することが重要です。

なお、ここで指定するパスワードをそのままNDMPバックアップ時に指定するわけではありません。

ontap-select-cluster::> security login create -user-or-group-name backupadmin -application ssh -authmethod password -role backup

Please enter a password for user 'backupadmin':
Please enter it again:
ontap-select-cluster::> 

NDMPバックアップ時に使用するパスワードは、自動生成のパスワードになります。

「vserver services ndmp generate-password -vserver 管理SVM名 -user ユーザ名」でパスワードを確認します。なお、ユーザ作成時のパスワードを元に生成しているので、generate-passwordを実行するたびにパスワードが変わるということはありません。

ontap-select-cluster::>  vserver services ndmp generate-password -vserver ontap-select-cluster -user backupadmin

 Vserver: ontap-select-cluster
    User: backupadmin
Password: qG5CqQHYxw9fE57g
ontap-select-cluster::> 

(3) LIFの作成

NDMPバックアップは、ネットワークインタフェースのroleがinterclusterであるものを使用します。

現状のinterclusterを確認するには「network interface show -role intercluster」を実行します

ontap-select-cluster::> network interface show -role intercluster
There are no entries matching your query.

ontap-select-cluster::>

存在しない場合は、新規で作成するか、既存のLIFを流用するための設定を行います。

流用する場合は公式マニュアルの「LIFの設定」をみていろいろやります。(面倒くさいはず)

作成する際は、「-home-node」と「-home-port」で主として使用する物理ノードとネットワークポートを指定します。

ontap-select-cluster::> network interface create -vserver ontap-select-cluster -lif cluster_intercluster -role intercluster -service-policy default-intercluster -address 172.17.44.109 -netmask 255.255.0.0 -home-node ontap-select-node -home-port e0a

ontap-select-cluster::>

作成されたことを「network interface show -role intercluster」を実行して確認します。

ontap-select-cluster::> network interface show -role intercluster
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
ontap-select-cluster
            cluster_intercluster
                         up/up    172.17.44.109/16   ontap-select-node
                                                                   e0a     true

ontap-select-cluster::> 

メモ

「vserver show -ins」で表示される「Allowed Protocols」「Disallowed Protocols」の扱い

物理ノードに対するNDMPが有効になっていないか?「system service ndmp show」で「Enabled:false」を確認

対象となるSVMと、必要となるロールの違い:SVMを対象としたNDMPモードでのユーザ認証

Storage Virtual Machine(SVM)を対象としたNDMPモードでは、NDMPユーザ認証がロールベース アクセス制御と統合されます。SVMのコンテキストでは、NDMPユーザのロールはvsadminまたはvsadmin-backupのどちらかである必要があります。クラスタのコンテキストでは、NDMPユーザのロールはadminまたはbackupのどちらかである必要があります。

SVMのfirewall policy設定でinterclusterのポリシーでNDMPが許可されているか「system services firewall policy show -policy intercluster」

NetApp NDMP設定の詳細確認「vserver services ndmp show -ins」の「Preferred Interface Role」に書かれているroleのインタフェースがNDMPに使用できる

2段階のNFSマウントをする方法


直接アクセスできないネットワークにあるNFSサーバをNFSでマウントすることはできないか試行錯誤してみた。

普通にCentOS7やSolaris11からやってみたところ、NFSマウントした領域のNFS exportでの公開はnfsd側から「Cannot export /mnt, possibly unsupported filesystem or fsid= required」とか、「Invalid filesystem」とか言われて設定できない。

これはuser-spaceで動作するnfsdを使えば回避できるんじゃないかと探してみた結果、unfs3というものを発見。ソースコードは https://github.com/unfs3/unfs3

Linux,FreeBSD,Solaris,AIX,Irix,MacOSXで動く以外に、Windows上でも制限ありで動作するとのこと。

Windows上で動かした場合は、unfsdが使用するWindowsユーザを1つ割り当てる形になるので、NFS経由のアクセスは全てそのWindowsユーザがアクセスしている、という扱いになるようだ。

あと、このunfs3はNFS ver3のみ使え、NFS v4やNFS v2でのアクセスには対応していない。また、NFS v3でもREADDIRPLUS(属性付きディレクトリの読み取り)周りは実装していないとのこと。

READDIRPLUSはOracle/Solarisのドキュメントによればlsコマンドなどでディレクトリ内のファイル一覧を表示させる動作を高速化するためのものなので、まぁ、なくてもなんとかなる感じのもの。

属性付きディレクトリの読み取り
NFS バージョン 3 では、READDIRPLUS と呼ばれる操作があります。たとえば、ls や ls -l などの、大部分の READDIR が READDIRPLUS コールとして発行されます。バージョン 3 で ls -l コマンドを実行すると、ディレクトリ内の名前リストと共に、ファイルハンドルと属性が返されます。バージョン 2 では、名前が最初に返され、ファイルハンドルと属性を取得するには、続いてサーバーを呼び出す必要があります。
バージョン 3 の READDIRPLUS 操作の利点は、ファイルごとに GETATTR 要求を送信する必要がないため時間が短縮され、ls と ls -l の速度が同程度になることです。

要件は満たせそうなので、とりあえずテスト用CentOS7環境でunfs3を動作させてみる。

準備

環境をインストール

# yum install git
# yum groupinstall "開発ツール"

コンパイル

まず、ソースコードの入手

$ git clone https://github.com/unfs3/unfs3.git

READMEにあるとおりbootstrap&configureを実行

$ cd unfs3/unfs3
$ ./bootstrap
$ ./configure

そしてmake

$ make
for i in Config ; do (cd $i &amp;&amp; make all) || exit; done
make[1]: ディレクトリ `/root/unfs3/Config' に入ります
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o lex.yy.o lex.yy.c
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o y.tab.o y.tab.c
ar crs lib.a lex.yy.o y.tab.o
make[1]: ディレクトリ `/root/unfs3/Config' から出ます
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afsgettimes.o afsgettimes.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afssupport.o afssupport.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o attr.o attr.c
attr.c: 関数 ‘get_free_bad_dir_entry’ 内:
attr.c:550:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
attr.c:550:5: 備考: オプション -std=c99 または -std=gnu99 をコードコンパイル時に使用してください
attr.c: 関数 ‘find_bad_dir_entry’ 内:
attr.c:573:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
make: *** [attr.o] エラー 1
$

エラーとなってしまいます。

これはコンパイル時のオプションに「-std=c99」を指定するようにして解決

$ export CPPFLAGS="-std=c99";./configure
$ make
<略>
$

インストールと設定

普通にmake installすると/usr/local以下にインストールされます。

# make install
/usr/bin/install -c -d /usr/local/sbin
/usr/bin/install -c -d /usr/local/share/man/man7
/usr/bin/install -c -d /usr/local/share/man/man8
/usr/bin/install -c unfsd /usr/local/sbin/unfsd
/usr/bin/install -c -m 644 ./Extras/tags.7 /usr/local/share/man/man7/tags.7
/usr/bin/install -c -m 644 ./unfsd.8       /usr/local/share/man/man8/unfsd.8
#

NFSで公開するディレクトリの設定は、普通のnfsdと同じく /etc/exports ファイルを使用。「-e」オプションで別のファイルを指定することも可能です。

注意点としては、Linuxだとホスト名指定に「*」とnetgroupが使用できず、ログに「unfsd[20479]: syntax error in ‘/etc/exports’, exporting nothing」といった出力が出てしまうという点です。

「*」については「0.0.0.0/0」で代替できます。

/etc/exports ファイルを編集した場合、変更にはexportfsコマンドは使用できません。

unfsdに対してHUPシグナルを送ることで反映されます。(kill -HUP unfsdのPID)

unfsdの起動は「/usr/local/sbin/unfsd」の実行、停止はunfsdへのTERMシグナル送信(kill -TERM unfsdのPID)です。

東京証券取引所arrowheadを止めた設定 on_panic


10月1日に東京証券取引所arrowheadシステムは共有ディスク装置のメモリ障害が起因になって発生したとのこと。

ようやく情報が出そろって何が原因だったのかがわかってきた。

書かれていた情報をまとめると後述のようになる。
(注:Data ONTAP 7G, Data ONTAP 8, ONTAP 9という正式表記がありますがめんどいので全部ONTAPで統一します)

なお、富士通が直接やった案件ではどうなのかわかりませんが、それ以外からNetAppを購入している場合、この設定項目を変更するなんてことはしないので、影響ありません。心配しなくて大丈夫です。

前提条件について

・NetApp FASシリーズのOEMである富士通 NR1000Fを使用している

・NetAppはONTAP OSというOSで動作している

・arrowheadで使用していたNASのOSバージョンは(制御機構バージョン)、初代(2010/01)は 7、2代目(2015/09)は8、今回障害が発生した3代目(2019/11)は9

・ONTAP OSはversion 8からシステムが作り直されておりシステム体系がだいぶ変わった。ただ、いままでの操作を新システムに変換する為の一覧(7-Modeオプションとclustered Data ONTAPコマンドのマッピング)が用意されている

・ONTAP 8は7-modeとClusteredの2種類がある
 7-modeはONTAP 7と同じコマンド体系だが内部はClusteredベース

・ONTAP 8を7-modeかClusteredのどちらで使っていたのか不明
 2代目(2015/09)だと、8.1.x最終バージョンの8.1.4(July 2014)はサポート切れになるので
 September 2014リリースの8.2.2、April 2015リリースの8.2.3?
 7-modeが廃止されてClusteredに一本化されたONTAP 8.3はApril 2015リリース

・ONTAP 7とONTAP 8 7-modeではサーバの上でNFS/CIFSファイルサービスが動く形式
 管理とファイルサービスは同一サーバ上で動作
 1物理ノード=1ファイルサービス

・ONTAP 8 Clustered/ONTAP 9は仮想基盤の上でNFS/CIFSサービス用仮想マシン(StorageVM/SVM)が動く形式
 管理とファイルサービスは別扱いで動作
 1つの物理ノードの上で複数のStorageVMを動作可能

設定内容について

・今回問題となった設定は「storage failoverのonpanicオプション」に関するもの

・このオプションに相当するONTAP 7時代の設定はマッピングには「cf.takeover.on_panic」<=>「storage failover modify -onpanic」と記載されている。

・cf.takeover.on_panic設定についてONTAP 7.3.2のドキュメントではデフォルトが「on」となっている(それ以前のバージョンの同一箇所にはデフォルト記載が無い)

・ONTAP 7.xのリリース時期を比較すると、初代稼働が2010/01ということは2009/夏前には試験が始まってそうなので、7.3.2だと時期が早すぎるので、 7.3.1.1 あたりと想定される
 7.3.1: 23 January 2009, 7.3.1.1: April 2009, 7.3.2: Aug 14 2009
 7.3.3: 18 June 2010,7.3.4: 14 March 2011

・ONTAP 7.3時代のマニュアルには「iSCSIライセンスを入れるとcf.takeover.on_panicがonに設定される」という記述もあり、on_panic設定がデフォルト「off」だった時代もあるようだ

・ONTAP 7.3のマニュアルの「Reasons for takeover」にcf.takeover.on_panicはデフォルト「off」と明記。ONTAP7.3.2の同じ箇所にもデフォルトoffと書いてある。ONTAP7.3.2は同一マニュアル内でon_panicのデフォルト値が異なっているという事態に。どっちなんだよ

・ONTAP 8の7-modeの場合はcf.takeover.on_panicオプションがあるがoff時の説明が「a node panic will not cause an automatic takeover.」に変わっており、「You should not turn this option off unless you are instructed by technical support to do so.」と記載されている。

さて、問題となった設定の「ONTAP7のcf.takeover.on_panic」と「ONTAP8以降のstorage failoverのonpanicオプション」の違いを見てみる

まず、ONTAP 7での「cf.takeover.on_panic

この値は「on」でも「off」でもサービスが切り替わるのは変わらない。

ONTAP 7では相手ノードからの応答が15秒以内になかったら相手が死んだと判断して切り替える、というのが基本となっている。

しかし、PANICが発生し、それがちゃんと検出できた場合は相手が死んでいるのは確定しているので、15秒待たないで切り替えていいんじゃないか?というのが「cf.takeover.on_panic」の扱いになる。

ONTAP 7時代の cf.takeover.on_panic
 on = PANICを検出したら即座に切り替える
 off = 通常の障害検出である15秒待ってから切り替える

ONTAP 8以降ではこのcf.takeover.on_panicオプションは storage failoverのonpanicオプション に置き換えられた、とマッピングに記載されている。

storage failoverのonpanicオプションについて確認するとonrebootオプションとあわせて、「自動テイクオーバーの制御用コマンド」として掲載されている。

役割は「ノードでのパニック」「ノード再起動」が発生した場合に、ストレージサービス(StorageVM)が使用しているストレージを活きているノード上に所有権を移動して継続稼働させるか、というものになっている。

また、この動作の説明はONTAP8 7-mode時のcf.takeover.on_panicに書かれている説明とも合致する。

ONTAP 8以降のstorage failoverのonpanicオプションとONTAP 8 7-modeのcf.takeover.on_panic
 on = 切り替えを行う
 off = 切り替えない

ただ、ここらへんの違いを下記のドキュメント記述だけで判断できるのか?という感じではある。

ONTAP 7.3.2のcf.takeover.on_panic設定についての記述

ONTAP 8.2.1の7-modeでのcf.takeover.on_panicについての記述

ONTAP 9でのstorage failoverについての記述

ONTAP 7.3の「Reasons for takeover

ONTAP 7.3.2の「Reasons for takeover


プレスリリースからの引用

JPX 2020/10/05付け「arrowhead の障害に関する原因と対策について」より

画像
画像

JPX 2020/10/19付け「10月1日に株式売買システムで発生した障害について

富士通 2020/10/19付け「東京証券取引所様の株式売買システム「arrowhead」で発生した障害の原因と対策について」と「[重要]ストレージシステム「ETERNUS NR1000 series」におけるコントローラ自動切替の仕様に関する重要なお知らせ

画像
画像
画像