AnsibleでLINBIT HAを動かそう

レッドハットが開発しているオープンソースの構成管理ツールのAnsibleを使って、LINBIT HAのシステムを動かしてみましょう。

もともとDRBDとPacemakerはLinuxのコマンドで操作するように開発されているので、Ansibleとの親和性はきわめて高くなっています。

Ansibleを使ってDRBDとPacemakerを設定する例がLINBIT社から公開されていますので、下記のURLからAnsibleのPlaybookファイルを入手してください。

https://github.com/kermat/linbit-ansible-nfs

このURLから入手できるのはDRBD 9でNFSクラスターを構築する例になります。

1.実行環境の準備

テストのために4つのサーバを準備します。サーバは実際の機器でも、仮想環境でも問題ありません。1つをAnsibleを実行するノード、3つをDRBDとPacemakerを実行するノードとします。

Ansibleの実行ノード

項目推奨値・コメント
OSCentOS 7
メモリー2Gバイト以上
ストレージ8GB(OS領域+Ansible)

DRBD/Pacemakerの実行ノード x 3

項目推奨値・コメント
OSCentOS 7
メモリー2Gバイト以上
ストレージシステム用に8GB、データ用に4GB程度

※動作試験の環境なので、メモリーとストレージのサイズは少なく設定しています。

各ノードのホスト名とネットワークの設定は次のようにしました。

 

各ノードにCentOS 7をインストールして、OSのアップデートまで済ませておきます。

Ansibleの実行ノードからホスト名でアクセスができるように/etc/hostsファイルを下記のように設定します。

[root@es ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.3.10 es ansible-node

192.168.3.81 an-node1
192.168.3.82 an-node2
192.168.3.83 an-node3

各実行ノードの/etc/hostsにも同じ値を設定してください。

2.SSHの設定

本設定ではSSHでAnsibleノードから各DRBD/Pacemakerノードにアクセスします。
そのためSSHの公開鍵を各ノードに登録します。

Ansibleノードで公開鍵を作成します。
作成した公開鍵をssh-copy-idコマンドでan-node1〜3にコピーします。

[root@es ~]# ssh-copy-id root@an-node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'an-node1 (192.168.3.81)' can't be established.
ECDSA key fingerprint is SHA256:BoYBHJ+DUKmji6YrmQkdMQHpBThtWMKGQqjBVk8d1Og.
ECDSA key fingerprint is MD5:3b:d7:30:31:60:45:5c:14:1a:2a:f8:d4:52:b6:e4:ac.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@an-node1's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@an-node1'"
and check to make sure that only the key(s) you wanted were added.

 

3.LINBITアカウントの取得

本設定にはLINBIT社のバイナリーを利用するため、LINBIT HAクラスタスタックサポートのユーザIDとパスワードが必要になります。インストールに必要なユーザIDとパスワード、顧客IDとクラスタIDの情報はサイオステクノロジーまでお問い合わせください。

 

4.Playbackのダウンロード

https://github.com/kermat/linbit-ansible-nfsにアクセスします。

 

Codeボタンを押して、git cloneのURLを得ます。画面上のコピーボタンを押すと、お使いのデスクトップ環境のクリップボードにURLがコピーされます。

Ansibleの実行ノードにログインしているターミナルソフトでURLをペーストします。git clone をキーボード入力してからURLをペーストしてください。

[root@es blog]# git clone https://github.com/kermat/linbit-ansible-nfs.git
Cloning into 'linbit-ansible-nfs'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 22 (delta 1), reused 6 (delta 1), pack-reused 14
Unpacking objects: 100% (22/22), done.
[root@es blog]#

※URLは将来変更されることがありますので、Webサイトから最新のURLを入手してください。

linbit-ansible-nfsというディレクトリが作成されて、NFSサーバのPlaybookファイルが配置されます。

次はlinbit-ansible-nfs内のファイルとディレクトのリストになります。

README.md
ansible.cfg
hosts.ini
site.yaml
templates
templates/cib.j2
templates/corosync.j2
templates/r0.j2

5.設定ファイルの修正

ダウンロードしたディレクトリ内のhosts.iniファイルを環境に合わせて修正します。

[root@es linbit-ansible-nfs]# cat hosts.ini 
[nodes]
192.168.3.81
192.168.3.82
192.168.3.83

[nodes:vars]
cluster_vip="192.168.3.80"
cluster_vip_cidr="24"
drbd_backing_disk="/dev/sdb1"
drbd_replication_network="10.8.0.0/24"

# do not change ansible_user
ansible_user="root"

[nodes]の部分にAnsibleから設定したいホストのIPアドレスを列記します。

cluster_vipはクラスターの仮想IPアドレス(VIP)を設定します。
cluster_vip_cidrは仮想IPアドレスのネットワークのネットマスクの長さです。
drbd_backing_diskはDRBDで同期するパーティション(ディスク)のデバイス名です。
drbd_replication_networkはDRBDの同期に使用するネットワークのネットワークプレフィックスとネットマスクの長さを設定してください。

今回の環境ではansible_userはrootに設定します。

6.Ansibleの実行

ansible-playbookコマンドを実行します。実行時にユーザ名、パスワード、顧客ID、クラスターIDが4つの情報が必要です。

[root@es linbit-ansible-nfs]# ansible-playbook -e lb_user="yourname" -e lb_pass="XXXXX" -e lb_con_id="1234" -e lb_clu_id="5678" site.yaml

PLAY [nodes] ***********************************************************************************

TASK [Gathering Facts] *************************************************************************
ok: [192.168.3.83]
ok: [192.168.3.82]
ok: [192.168.3.81]

.......
.......
実行ログはかなり長いので省略します。
.......
.......

TASK [start cluster resources after replacement from one node] *********************************
changed: [192.168.3.81]

PLAY RECAP *************************************************************************************
192.168.3.81 : ok=37 changed=28 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0 
192.168.3.82 : ok=24 changed=17 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0 
192.168.3.83 : ok=24 changed=17 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0

[root@es linbit-ansible-nfs]#

3ノードともfailed=0と出力されると実行成功です。
failedが0でない場合は、エラーが発生したタスクを調べてみてください。

7.動作確認

ansible-playbookが問題なく終了したら、DRBD/Pecamakerのノードにログインして動作を確認しましょう。

an-node1にアクセスして実行状態を確認します。

[root@es linbit-ansible-nfs]# ssh -l root an-node1 
Last login: Tue Nov 17 14:29:10 2020 from 192.168.3.10

ますDRBDの状態を確認します。

[root@an-node1 ~]# drbdadm status
r0 role:Primary
disk:UpToDate
an-node2 role:Secondary
peer-disk:UpToDate
an-node3 role:Secondary
peer-disk:UpToDate

ノードの1つがPrimaryで、残りのノードがSecondaryになっていれば問題ありません。disk:、peer-disk:がUpToDateになっていることも確認のポイントです。

次にファイルシステムのマウントの確認します。

[root@an-node1 ~]# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 495568 0 495568 0% /dev
tmpfs 507376 38784 468592 8% /dev/shm
tmpfs 507376 13296 494080 3% /run
tmpfs 507376 0 507376 0% /sys/fs/cgroup
/dev/mapper/centos-root 14034944 3209428 10825516 23% /
/dev/sda1 1038336 228644 809692 23% /boot
/dev/drbd0 8376796 33104 8343692 1% /drbd

/drbdにマウントされているのがわかります。

仮想IPアドレスのチェックして、設定どおりに、192.168.3.80が仮想IPとして設定されているか確認します。

[root@an-node1 ~]# ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:88:85:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.81/24 brd 192.168.3.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 192.168.3.80/24 brd 192.168.3.255 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fd75:c598:39ec:1:d227:1ef:42ec:f1ad/64 scope global noprefixroute dynamic 
valid_lft 1641sec preferred_lft 1641sec
inet6 fe80::383a:e3eb:67ce:1334/64 scope link noprefixroute 
valid_lft forever preferred_lft forever

VIPに設定した192.168.3.80があります。

最後のPacemakerの状態を確認します。

[root@an-node1 ~]# crm_mon -frAD1

Online: [ an-node1 an-node2 an-node3 ]

Full list of resources:

Resource Group: g_nfs
p_fs_drbd (ocf::heartbeat:Filesystem): Started an-node1
p_nfsserver (ocf::heartbeat:nfsserver): Started an-node1
p_exportfs_root (ocf::heartbeat:exportfs): Started an-node1
p_vip_ip (ocf::heartbeat:IPaddr2): Started an-node1
Clone Set: ms_drbd_r0 [p_drbd_r0] (promotable)
Masters: [ an-node1 ]
Slaves: [ an-node2 an-node3 ]

Node Attributes:
* Node an-node1:
+ master-p_drbd_r0 : 10000 
* Node an-node2:
+ master-p_drbd_r0 : 10000 
* Node an-node3:
+ master-p_drbd_r0 : 10000

Migration Summary:
* Node an-node1:
* Node an-node2:
* Node an-node3:

an-node1でNFSサービスがちゃんと起動しています。