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の実行ノード
項目 | 推奨値・コメント |
---|---|
OS | CentOS 7 |
メモリー | 2Gバイト以上 |
ストレージ | 8GB(OS領域+Ansible) |
DRBD/Pacemakerの実行ノード x 3
項目 | 推奨値・コメント |
---|---|
OS | CentOS 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が4つの情報が必要になります。下記のリンクボタンにアクセスすると、サイオステクノロジーのWebページから申請ができます。
申請していただいた方には、ユーザ名、パスワード、契約ID、クラスターIDを期間限定で発行します。
4.Playbookファイルのダウンロード
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="ユーザ名" -e lb_pass="パスワード" -e lb_con_id="契約ID" -e lb_clu_id="クラスターID" 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サービスがちゃんと起動しています。