Keepalived+drbd+nfs実現nfs高可用性
22244 ワード
前言
Centos7.5 Keepalive+drbd+nfs練習ノート
ホストの準備
drbdサービスホストには、使用可能なパーティションまたはディスクが必要です.
ホスト名
IP
test(導入およびnfsクライアント)
192.168.0.35
drbd-0001
192.168.0.81
drbd-0002
192.168.0.82
testホストansibleの配備
ansible環境導入[root@test ~]# yum -y install ansible
[root@test ~]# vim /etc/hosts
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
[root@test ~]# vim /etc/ansible/hosts
[drbd]
drbd-000[1:2]
[root@test ~]# ssh-copy-id drbd-0001
[root@test ~]# ssh-copy-id drbd-0002
ansible環境検出[root@test ~]# ansible drbd -m ping
drbd-0001 | SUCCESS => {
"changed": false,
"ping": "pong"
}
drbd-0002 | SUCCESS => {
"changed": false,
"ping": "pong"
}
drbd導入
使用可能なディスクの確認[root@test ~]# ansible drbd -m shell -a 'ls /dev/vdb'
drbd-0002 | SUCCESS | rc=0 >>
/dev/vdb
drbd-0001 | SUCCESS | rc=0 >>
/dev/vdb
ディスクパーティションvdb 1は、データディスクvdb 2としてメタデータとして格納される[root@test ~]# ansible drbd -m shell -a 'parted /dev/vdb mklabel GPT ;parted /dev/vdb mkpart primary 1M 90%;parted /dev/vdb mkpart primary 90% 100%'
[root@test ~]# ansible drbd -m shell -a 'lsblk'
drbd-0001 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
drbd-0002 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
構成/etc/hostsここでホスト名はdrbdホスト名と一致する必要があります[root@test ~]# vim hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# ansible drbd -m copy -a 'src=hosts dest=/etc/hosts'
drbd 84とkmod-drbd 84のインストール[root@test ~]# ansible drbd -m yum -a 'name=drbd84-utils,kmod-drbd84 state=installed'
ロードモジュール[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
drbd-0002 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
drbd-0001 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
上記のエラーが発生した場合は、カーネルアップグレードパッケージを再インストールし、モジュールを再ロードする必要があります.[root@test ~]# ansible drbd -m yum -a 'name=kernel-devel,kernel,kernel-headers state=installed'
[root@test ~]# ansible drbd -m shell -a 'reboot'
[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
[root@test ~]# ansible drbd -m shell -a 'lsmod | grep drbd'
drbd-0001 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
drbd-0002 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
/dev/vdb 1にファイルシステムメタデータディスクを作成するファイルシステムを作成できません[root@test ~]# ansible drbd -m shell -a 'mkfs.ext4 /dev/vdb1'
drbdプロファイルの編集[root@test ~]# vim global_common.conf
global {
usage-count no;
}
common {
protocol C; #c ( )
disk {
on-io-error detach;
}
syncer {
rate 100M; #
}
}
resource data { # data
on drbd-0001 { #
device /dev/drbd1; # drbd
disk /dev/vdb1; #
address 192.168.0.81:7899;
meta-disk /dev/vdb2[0]; #
}
on drbd-0002 {
device /dev/drbd1;
disk /dev/vdb1;
address 192.168.0.82:7899;
meta-disk /dev/vdb2[0];
}
}
[root@test ~]# ansible drbd -m copy -a 'src=global_common.conf dest=/etc/drbd.d/global_common.conf'
リソース名dataのメタデータの作成[root@test ~]# ansible drbd -m shell -a 'drbdadm create-md data'
リソース名dataのメタデータの起動[root@test ~]# ansible drbd -m shell -a 'drbdadm up data'
drbd-0001ノードで情報を表示する場合、両方ともスレーブ状態[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9435904
drbd-0001をプライマリとして同期データを設定する[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
データの同期[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:1028096 nr:0 dw:0 dr:1030168 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:8408064
[=>..................] sync'ed: 11.0% (8208/9212)M
finish: 0:03:31 speed: 39,680 (39,540) K/sec
データ同期が完了するとdrbd-0001がメインとなり、データ同期が完了すると構成が完了する[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:9436160 nr:0 dw:0 dr:9438232 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
テストdrbd構成仮想ディスク/dev/drbd 1をマウント/dataしてテストファイルを作成する[root@test ~]# ansible drbd-0001 -m shell -a 'mkdir /data;mount /dev/drbd1 /data;touch /data/a.txt'
drbd-0002ノードでdrbdサービスを閉じ、/dev/vdb 1をマウントしてテストファイルが存在するかどうかを確認します.[root@test ~]# ansible drbd-0002 -m shell -a 'drbdadm down data;mkdir /data ;mount /dev/vdb1 /data;ls /data'
drbd-0002 | SUCCESS | rc=0 >>
a.txt
lost+found
drbdノードのdrbdサービスのリカバリ[root@test ~]# ansible drbd-0002 -m shell -a 'umount /data;drbdadm up data'
keepavle+nfs導入
keepalivedとnfs-utilsをインストールします.192.168.0.210はvipです.[root@test ~]# ansible drbd -m yum -a 'name=keepalived,nfs-utils state=installed'
keepalivedプロファイルdrbd-0001を編集するには[root@drbd-0001 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
drbd-0002の構成は[root@drbd-0002 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd2
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049 "
interval 2
weight -50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
nfsファイルの構成[root@test ~]# vim exports
/data 192.168.0.0/24(ro)
[root@test ~]# ansible drbd -m copy -a 'src=exports dest=/etc/'
スクリプトファイルの設定[root@test ~]# vim notify_master.sh
#!/bin/bash
drbdadm primary data
mount /dev/drbd1 /data
systemctl start nfs
[root@test ~]# vim notify_backup.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
[root@test ~]# vim notify_stop.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
systemctl restart nfs
[root@test ~]# ansible drbd -m copy -a 'src=notify_master.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_backup.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_stop.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m shell -a 'chmod +x /etc/keepalived/noti*'
サービスデバッグの開始
drbd主従検査[root@test ~]# ansible drbd -m shell -a 'cat /proc/drbd'
nfsサービスの開始ansible drbd -m shell -a 'systemctl start nfs'
keepaliveの起動[root@test ~]# ansible drbd -m shell -a 'systemctl start keepalived'
nfsクライアントマウント[root@test ~]# mkdir /data
[root@test ~]# mount 192.168.0.210:/data /data/
プライマリノードでkeepaliveサービスまたはnfsサービステストを停止
drbdサービスホストには、使用可能なパーティションまたはディスクが必要です.
ホスト名
IP
test(導入およびnfsクライアント)
192.168.0.35
drbd-0001
192.168.0.81
drbd-0002
192.168.0.82
testホストansibleの配備
ansible環境導入[root@test ~]# yum -y install ansible
[root@test ~]# vim /etc/hosts
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
[root@test ~]# vim /etc/ansible/hosts
[drbd]
drbd-000[1:2]
[root@test ~]# ssh-copy-id drbd-0001
[root@test ~]# ssh-copy-id drbd-0002
ansible環境検出[root@test ~]# ansible drbd -m ping
drbd-0001 | SUCCESS => {
"changed": false,
"ping": "pong"
}
drbd-0002 | SUCCESS => {
"changed": false,
"ping": "pong"
}
drbd導入
使用可能なディスクの確認[root@test ~]# ansible drbd -m shell -a 'ls /dev/vdb'
drbd-0002 | SUCCESS | rc=0 >>
/dev/vdb
drbd-0001 | SUCCESS | rc=0 >>
/dev/vdb
ディスクパーティションvdb 1は、データディスクvdb 2としてメタデータとして格納される[root@test ~]# ansible drbd -m shell -a 'parted /dev/vdb mklabel GPT ;parted /dev/vdb mkpart primary 1M 90%;parted /dev/vdb mkpart primary 90% 100%'
[root@test ~]# ansible drbd -m shell -a 'lsblk'
drbd-0001 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
drbd-0002 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
構成/etc/hostsここでホスト名はdrbdホスト名と一致する必要があります[root@test ~]# vim hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# ansible drbd -m copy -a 'src=hosts dest=/etc/hosts'
drbd 84とkmod-drbd 84のインストール[root@test ~]# ansible drbd -m yum -a 'name=drbd84-utils,kmod-drbd84 state=installed'
ロードモジュール[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
drbd-0002 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
drbd-0001 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
上記のエラーが発生した場合は、カーネルアップグレードパッケージを再インストールし、モジュールを再ロードする必要があります.[root@test ~]# ansible drbd -m yum -a 'name=kernel-devel,kernel,kernel-headers state=installed'
[root@test ~]# ansible drbd -m shell -a 'reboot'
[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
[root@test ~]# ansible drbd -m shell -a 'lsmod | grep drbd'
drbd-0001 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
drbd-0002 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
/dev/vdb 1にファイルシステムメタデータディスクを作成するファイルシステムを作成できません[root@test ~]# ansible drbd -m shell -a 'mkfs.ext4 /dev/vdb1'
drbdプロファイルの編集[root@test ~]# vim global_common.conf
global {
usage-count no;
}
common {
protocol C; #c ( )
disk {
on-io-error detach;
}
syncer {
rate 100M; #
}
}
resource data { # data
on drbd-0001 { #
device /dev/drbd1; # drbd
disk /dev/vdb1; #
address 192.168.0.81:7899;
meta-disk /dev/vdb2[0]; #
}
on drbd-0002 {
device /dev/drbd1;
disk /dev/vdb1;
address 192.168.0.82:7899;
meta-disk /dev/vdb2[0];
}
}
[root@test ~]# ansible drbd -m copy -a 'src=global_common.conf dest=/etc/drbd.d/global_common.conf'
リソース名dataのメタデータの作成[root@test ~]# ansible drbd -m shell -a 'drbdadm create-md data'
リソース名dataのメタデータの起動[root@test ~]# ansible drbd -m shell -a 'drbdadm up data'
drbd-0001ノードで情報を表示する場合、両方ともスレーブ状態[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9435904
drbd-0001をプライマリとして同期データを設定する[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
データの同期[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:1028096 nr:0 dw:0 dr:1030168 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:8408064
[=>..................] sync'ed: 11.0% (8208/9212)M
finish: 0:03:31 speed: 39,680 (39,540) K/sec
データ同期が完了するとdrbd-0001がメインとなり、データ同期が完了すると構成が完了する[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:9436160 nr:0 dw:0 dr:9438232 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
テストdrbd構成仮想ディスク/dev/drbd 1をマウント/dataしてテストファイルを作成する[root@test ~]# ansible drbd-0001 -m shell -a 'mkdir /data;mount /dev/drbd1 /data;touch /data/a.txt'
drbd-0002ノードでdrbdサービスを閉じ、/dev/vdb 1をマウントしてテストファイルが存在するかどうかを確認します.[root@test ~]# ansible drbd-0002 -m shell -a 'drbdadm down data;mkdir /data ;mount /dev/vdb1 /data;ls /data'
drbd-0002 | SUCCESS | rc=0 >>
a.txt
lost+found
drbdノードのdrbdサービスのリカバリ[root@test ~]# ansible drbd-0002 -m shell -a 'umount /data;drbdadm up data'
keepavle+nfs導入
keepalivedとnfs-utilsをインストールします.192.168.0.210はvipです.[root@test ~]# ansible drbd -m yum -a 'name=keepalived,nfs-utils state=installed'
keepalivedプロファイルdrbd-0001を編集するには[root@drbd-0001 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
drbd-0002の構成は[root@drbd-0002 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd2
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049 "
interval 2
weight -50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
nfsファイルの構成[root@test ~]# vim exports
/data 192.168.0.0/24(ro)
[root@test ~]# ansible drbd -m copy -a 'src=exports dest=/etc/'
スクリプトファイルの設定[root@test ~]# vim notify_master.sh
#!/bin/bash
drbdadm primary data
mount /dev/drbd1 /data
systemctl start nfs
[root@test ~]# vim notify_backup.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
[root@test ~]# vim notify_stop.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
systemctl restart nfs
[root@test ~]# ansible drbd -m copy -a 'src=notify_master.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_backup.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_stop.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m shell -a 'chmod +x /etc/keepalived/noti*'
サービスデバッグの開始
drbd主従検査[root@test ~]# ansible drbd -m shell -a 'cat /proc/drbd'
nfsサービスの開始ansible drbd -m shell -a 'systemctl start nfs'
keepaliveの起動[root@test ~]# ansible drbd -m shell -a 'systemctl start keepalived'
nfsクライアントマウント[root@test ~]# mkdir /data
[root@test ~]# mount 192.168.0.210:/data /data/
プライマリノードでkeepaliveサービスまたはnfsサービステストを停止
[root@test ~]# yum -y install ansible
[root@test ~]# vim /etc/hosts
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
[root@test ~]# vim /etc/ansible/hosts
[drbd]
drbd-000[1:2]
[root@test ~]# ssh-copy-id drbd-0001
[root@test ~]# ssh-copy-id drbd-0002
[root@test ~]# ansible drbd -m ping
drbd-0001 | SUCCESS => {
"changed": false,
"ping": "pong"
}
drbd-0002 | SUCCESS => {
"changed": false,
"ping": "pong"
}
使用可能なディスクの確認
[root@test ~]# ansible drbd -m shell -a 'ls /dev/vdb'
drbd-0002 | SUCCESS | rc=0 >>
/dev/vdb
drbd-0001 | SUCCESS | rc=0 >>
/dev/vdb
ディスクパーティションvdb 1は、データディスクvdb 2としてメタデータとして格納される
[root@test ~]# ansible drbd -m shell -a 'parted /dev/vdb mklabel GPT ;parted /dev/vdb mkpart primary 1M 90%;parted /dev/vdb mkpart primary 90% 100%'
[root@test ~]# ansible drbd -m shell -a 'lsblk'
drbd-0001 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
drbd-0002 | SUCCESS | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 10G 0 disk
├─vdb1 253:17 0 9G 0 part
└─vdb2 253:18 0 1023M 0 part
構成/etc/hostsここでホスト名はdrbdホスト名と一致する必要があります
[root@test ~]# vim hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.81 drbd-0001
192.168.0.82 drbd-0002
[root@test ~]# ansible drbd -m copy -a 'src=hosts dest=/etc/hosts'
drbd 84とkmod-drbd 84のインストール
[root@test ~]# ansible drbd -m yum -a 'name=drbd84-utils,kmod-drbd84 state=installed'
ロードモジュール
[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
drbd-0002 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
drbd-0001 | FAILED | rc=1 >>
modprobe: FATAL: Module drbd not found.non-zero return code
上記のエラーが発生した場合は、カーネルアップグレードパッケージを再インストールし、モジュールを再ロードする必要があります.
[root@test ~]# ansible drbd -m yum -a 'name=kernel-devel,kernel,kernel-headers state=installed'
[root@test ~]# ansible drbd -m shell -a 'reboot'
[root@test ~]# ansible drbd -m shell -a 'modprobe drbd'
[root@test ~]# ansible drbd -m shell -a 'lsmod | grep drbd'
drbd-0001 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
drbd-0002 | SUCCESS | rc=0 >>
drbd 397041 0
libcrc32c 12644 1 drbd
/dev/vdb 1にファイルシステムメタデータディスクを作成するファイルシステムを作成できません
[root@test ~]# ansible drbd -m shell -a 'mkfs.ext4 /dev/vdb1'
drbdプロファイルの編集
[root@test ~]# vim global_common.conf
global {
usage-count no;
}
common {
protocol C; #c ( )
disk {
on-io-error detach;
}
syncer {
rate 100M; #
}
}
resource data { # data
on drbd-0001 { #
device /dev/drbd1; # drbd
disk /dev/vdb1; #
address 192.168.0.81:7899;
meta-disk /dev/vdb2[0]; #
}
on drbd-0002 {
device /dev/drbd1;
disk /dev/vdb1;
address 192.168.0.82:7899;
meta-disk /dev/vdb2[0];
}
}
[root@test ~]# ansible drbd -m copy -a 'src=global_common.conf dest=/etc/drbd.d/global_common.conf'
リソース名dataのメタデータの作成
[root@test ~]# ansible drbd -m shell -a 'drbdadm create-md data'
リソース名dataのメタデータの起動
[root@test ~]# ansible drbd -m shell -a 'drbdadm up data'
drbd-0001ノードで情報を表示する場合、両方ともスレーブ状態
[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9435904
drbd-0001をプライマリとして同期データを設定する
[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
データの同期
[root@test ~]# ansible drbd-0001 -m shell -a 'drbdadm -- --overwrite-data-of-peer primary data'
[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:1028096 nr:0 dw:0 dr:1030168 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:8408064
[=>..................] sync'ed: 11.0% (8208/9212)M
finish: 0:03:31 speed: 39,680 (39,540) K/sec
データ同期が完了するとdrbd-0001がメインとなり、データ同期が完了すると構成が完了する
[root@test ~]# ansible drbd-0001 -m shell -a 'cat /proc/drbd'
drbd-0001 | SUCCESS | rc=0 >>
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:9436160 nr:0 dw:0 dr:9438232 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
テストdrbd構成仮想ディスク/dev/drbd 1をマウント/dataしてテストファイルを作成する
[root@test ~]# ansible drbd-0001 -m shell -a 'mkdir /data;mount /dev/drbd1 /data;touch /data/a.txt'
drbd-0002ノードでdrbdサービスを閉じ、/dev/vdb 1をマウントしてテストファイルが存在するかどうかを確認します.
[root@test ~]# ansible drbd-0002 -m shell -a 'drbdadm down data;mkdir /data ;mount /dev/vdb1 /data;ls /data'
drbd-0002 | SUCCESS | rc=0 >>
a.txt
lost+found
drbdノードのdrbdサービスのリカバリ
[root@test ~]# ansible drbd-0002 -m shell -a 'umount /data;drbdadm up data'
keepavle+nfs導入
keepalivedとnfs-utilsをインストールします.192.168.0.210はvipです.[root@test ~]# ansible drbd -m yum -a 'name=keepalived,nfs-utils state=installed'
keepalivedプロファイルdrbd-0001を編集するには[root@drbd-0001 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
drbd-0002の構成は[root@drbd-0002 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd2
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049 "
interval 2
weight -50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
nfsファイルの構成[root@test ~]# vim exports
/data 192.168.0.0/24(ro)
[root@test ~]# ansible drbd -m copy -a 'src=exports dest=/etc/'
スクリプトファイルの設定[root@test ~]# vim notify_master.sh
#!/bin/bash
drbdadm primary data
mount /dev/drbd1 /data
systemctl start nfs
[root@test ~]# vim notify_backup.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
[root@test ~]# vim notify_stop.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
systemctl restart nfs
[root@test ~]# ansible drbd -m copy -a 'src=notify_master.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_backup.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_stop.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m shell -a 'chmod +x /etc/keepalived/noti*'
サービスデバッグの開始
drbd主従検査[root@test ~]# ansible drbd -m shell -a 'cat /proc/drbd'
nfsサービスの開始ansible drbd -m shell -a 'systemctl start nfs'
keepaliveの起動[root@test ~]# ansible drbd -m shell -a 'systemctl start keepalived'
nfsクライアントマウント[root@test ~]# mkdir /data
[root@test ~]# mount 192.168.0.210:/data /data/
プライマリノードでkeepaliveサービスまたはnfsサービステストを停止
[root@test ~]# ansible drbd -m yum -a 'name=keepalived,nfs-utils state=installed'
[root@drbd-0001 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
[root@drbd-0002 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id drbd2
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_service {
script "ss -nualpt | grep 2049 "
interval 2
weight -50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_service
}
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
notify_stop /etc/keepalived/notify_stop.sh
virtual_ipaddress {
192.168.0.210 dev eth0 label eth0:1
}
}
[root@test ~]# vim exports
/data 192.168.0.0/24(ro)
[root@test ~]# ansible drbd -m copy -a 'src=exports dest=/etc/'
[root@test ~]# vim notify_master.sh
#!/bin/bash
drbdadm primary data
mount /dev/drbd1 /data
systemctl start nfs
[root@test ~]# vim notify_backup.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
[root@test ~]# vim notify_stop.sh
#!/bin/bash
systemctl stop nfs
umount /data
drbdadm secondary data
systemctl restart nfs
[root@test ~]# ansible drbd -m copy -a 'src=notify_master.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_backup.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m copy -a 'src=notify_stop.sh dest=/etc/keepalived/'
[root@test ~]# ansible drbd -m shell -a 'chmod +x /etc/keepalived/noti*'
drbd主従検査
[root@test ~]# ansible drbd -m shell -a 'cat /proc/drbd'
nfsサービスの開始
ansible drbd -m shell -a 'systemctl start nfs'
keepaliveの起動
[root@test ~]# ansible drbd -m shell -a 'systemctl start keepalived'
nfsクライアントマウント
[root@test ~]# mkdir /data
[root@test ~]# mount 192.168.0.210:/data /data/
プライマリノードでkeepaliveサービスまたはnfsサービステストを停止