GlusterFS分散型ストレージ構築デュアルマシンレプリケーションボリュームとKeepalivedを組み合わせたストレージ高可用性
16211 ワード
GlusterFS分散型ストレージ高可用性シナリオ設計
1.GlusterFSレプリケーションボリュームの構築(少なくとも2つのストレージノードを使用)
2、Keepalived管理GlusterFS主従ストレージノードの配置
3、KeepalivedフローティングIP(VIP)を配置して外部にストレージサービスを提供する
4、ストレージの高可用性を実現する(即ち、2台のGlusterFSサーバーを使用して二重ノードレプリケーションボリュームを提供し、快速なフェイルオーバを提供し、ストレージの持続的高可用性を実現する)
5、重要データストレージのビジネスシーンに適用できる
一、環境準備
IP
Hostname
きおく
システム
VIP
172.16.10.10
data-node-01
/dev/sdb1
CentOS7
172.16.10.020説明:ストレージ・サービスの対外提供
172.16.10.11
data-node-02
/dev/sdb1
CentOS7
172.16.10.12
web-node-12
クライアント
/etc/hosts構成
GlusterFSストレージマウントポイントの確立
二、GlusterFSサービス端ソフトウェアのインストール
1、glusterソースをインストールし、glusterfs及び関連パッケージをインストールする
2、クライアントはGlusterFSクライアントソフトウェアをインストールする
3、Glusterdサービスを起動する
4、いずれかのノードに信頼ノードを追加する
5、いずれかのノードで複製ボリュームを作成する
6、複製ボリュームの起動
7、複製ボリュームの状態を表示する
8、クライアントテストマウントコピーボリューム
9、クライアントテストコピーボリュームデータストレージ
三、Keepalivedのインストールと配置
1、Keepalivedを取り付ける
2、keepalivedサービスの起動
3、メインノードkeepalived配置
4、スペアノードkeepalived配置
5、keepalived vrrp監視スクリプト
6、keepalived通知スクリプト(Glusterdサービスの管理)
四、Keepalived自動引き継ぎGlusterFSサービス及びストレージの可用性をテストする
1、keepalivedサービスを再起動する
2、VIPの管理状況を確認する
3、クライアントにVIPを使用してGlusterFSから提供されたコピーボリュームをマウントし、使用可能かどうかをテストする
GluserFSノードコピーボリュームの使用状況の表示
3.GlusterFSサービスのフェイルオーバーをテストする
プライマリノード(ノード1)をシャットダウンまたは再起動し、GlusterFSサービスとVIPがノード2に移行しているかどうかを確認します.
クライアントでストレージがまだ使用可能かどうかをテスト
ノード1のステータスの表示
keepalivedサービスの再起動
keepalivedログの表示(プライマリ・スタンバイ・ステータス)
このことから、ノード1の障害が回復するとkeepalivedはスタンバイ状態に入り、GlusterFSサービスの監督管理を継続し、ノード2の障害が発生するとサービス、ストレージ、VIPをノード1に切り替え、外部にストレージサービスを提供し続け、ストレージの高可用性を実現する
1.GlusterFSレプリケーションボリュームの構築(少なくとも2つのストレージノードを使用)
2、Keepalived管理GlusterFS主従ストレージノードの配置
3、KeepalivedフローティングIP(VIP)を配置して外部にストレージサービスを提供する
4、ストレージの高可用性を実現する(即ち、2台のGlusterFSサーバーを使用して二重ノードレプリケーションボリュームを提供し、快速なフェイルオーバを提供し、ストレージの持続的高可用性を実現する)
5、重要データストレージのビジネスシーンに適用できる
一、環境準備
IP
Hostname
きおく
システム
VIP
172.16.10.10
data-node-01
/dev/sdb1
CentOS7
172.16.10.020説明:ストレージ・サービスの対外提供
172.16.10.11
data-node-02
/dev/sdb1
CentOS7
172.16.10.12
web-node-12
クライアント
/etc/hosts構成
172.16.10.10 data-node-01
172.16.10.11 data-node-02
GlusterFSストレージマウントポイントの確立
mkdir -p /glusterfs/storage1
echo "/dev/sdb1 /glusterfs/storage1 xfs defaults 0 0" >> /etc/fstab
mount -a
二、GlusterFSサービス端ソフトウェアのインストール
1、glusterソースをインストールし、glusterfs及び関連パッケージをインストールする
yum install centos-release-gluster -y
yum install glusterfs glusterfs-server glusterfs-cli glusterfs-geo-replication glusterfs-rdma -y
2、クライアントはGlusterFSクライアントソフトウェアをインストールする
yum install glusterfs-fuse
3、Glusterdサービスを起動する
systemctl start glusterd
4、いずれかのノードに信頼ノードを追加する
gluster peer probe data-node-02
gluster peer probe data-node-01
gluster peer status
5、いずれかのノードで複製ボリュームを作成する
mkdir /glusterfs/storage1/rep_vol1
gluster volume create rep_vol1 replica 2 data-node-01:/glusterfs/storage1/rep_vol1 data-node-02:/glusterfs/storage1/rep_vol1
6、複製ボリュームの起動
gluster volume start rep_vol1
7、複製ボリュームの状態を表示する
gluster volume status
gluster volume info
8、クライアントテストマウントコピーボリューム
mount -t glusterfs data-node-01:rep_vol1 /data/
9、クライアントテストコピーボリュームデータストレージ
for i in `seq -w 1 3`;do cp -rp /var/log/messages /data/test-$i;done
[root@localhost ~]# ls /data/
111 1.txt 2.txt anaconda-ks.cfg test-1 test-2 test-3
三、Keepalivedのインストールと配置
1、Keepalivedを取り付ける
yum -y install keepalived
2、keepalivedサービスの起動
systemctl start keepalived
3、メインノードkeepalived配置
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id GFS_HA_MASTER
vrrp_skip_check_adv_addr
}
vrrp_sync_group GFS_HA_GROUP {
group {
GFS_HA_1
}
}
vrrp_script monitor_glusterfs_status {
script "/etc/keepalived/scripts/monitor_glusterfs_status.sh"
interval 5
fall 3
rise 1
weight 20
}
vrrp_instance GFS_HA_1 {
state BACKUP
interface ens34
virtual_router_id 107
priority 100
advert_int 2
nopreempt
authentication {
auth_type PASS
auth_pass 11112222
}
virtual_ipaddress {
172.16.10.220/24 dev ens34
}
track_script {
monitor_glusterfs_status
}
track_interface {
ens34
}
notify_master "/etc/keepalived/scripts/keepalived_notify.sh master"
notify_backup "/etc/keepalived/scripts/keepalived_notify.sh backup"
notify_fault "/etc/keepalived/scripts/keepalived_notify.sh fault"
notify_stop "/etc/keepalived/scripts/keepalived_notify.sh stop"
}
4、スペアノードkeepalived配置
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id GFS_HA_MASTER
vrrp_skip_check_adv_addr
}
vrrp_sync_group GFS_HA_GROUP {
group {
GFS_HA_1
}
}
vrrp_script monitor_glusterfs_status {
script "/etc/keepalived/scripts/monitor_glusterfs_status.sh"
interval 5
fall 3
rise 1
weight 20
}
vrrp_instance GFS_HA_1 {
state BACKUP
interface ens34
virtual_router_id 107
priority 90
advert_int 2
authentication {
auth_type PASS
auth_pass 11112222
}
virtual_ipaddress {
172.16.10.220/24 dev ens34
}
track_script {
monitor_glusterfs_status
}
track_interface {
ens34
}
notify_master "/etc/keepalived/scripts/keepalived_notify.sh master"
notify_backup "/etc/keepalived/scripts/keepalived_notify.sh backup"
notify_fault "/etc/keepalived/scripts/keepalived_notify.sh fault"
notify_stop "/etc/keepalived/scripts/keepalived_notify.sh stop"
}
5、keepalived vrrp監視スクリプト
#!/bin/bash
#check glusterfsd and glusterd process
systemctl status glusterd &>/dev/null
if [ $? -eq 0 ];then
systemctl status glusterfsd &>/dev/null
if [ $? -eq 0 ];then
exit 0
else
exit 2
fi
else
systemctl start glusterd &>/dev/null
systemctl stop keepalived &>/dev/null && exit 1
fi
6、keepalived通知スクリプト(Glusterdサービスの管理)
#!/bin/bash
#keepalived script for glusterd
master() {
systemctl status glusterd
if [ $? -ne 0 ];then
systemctl start glusterd
else
systemctl restart glusterd
fi
}
backup() {
systemctl status glusterd
if [ $? -ne 0 ];then
systemctl start glusterd
fi
}
case $1 in
master)
master
;;
backup)
backup
;;
fault)
backup
;;
stop)
backup
systemctl restart keepalived
;;
*)
echo $"Usage: $0 {master|backup|fault|stop}"
esac
四、Keepalived自動引き継ぎGlusterFSサービス及びストレージの可用性をテストする
1、keepalivedサービスを再起動する
systemctl restart keepalived.service
2、VIPの管理状況を確認する
## 1
[root@data-node-01 ~]# ip a show dev ens34
3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b2:b5:2a brd ff:ff:ff:ff:ff:ff
inet 172.16.10.10/24 brd 172.16.10.255 scope global ens34
valid_lft forever preferred_lft forever
inet 172.16.10.220/24 scope global secondary ens34
valid_lft forever preferred_lft forever
inet6 fe80::ce9a:ee2e:7b6c:a6bb/64 scope link
valid_lft forever preferred_lft forever
## 2
[root@data-node-02 ~]# ip a show dev ens34
3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ba:42:cf brd ff:ff:ff:ff:ff:ff
inet 172.16.10.11/24 brd 172.16.10.255 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::e23:ce0:65c3:ffbf/64 scope link
valid_lft forever preferred_lft forever
3、クライアントにVIPを使用してGlusterFSから提供されたコピーボリュームをマウントし、使用可能かどうかをテストする
mount -t glusterfs 172.16.10.220:rep_vol1 /data/
[root@localhost ~]# ls /data/
111 1.txt 2.txt anaconda-ks.cfg test test-1 test-2 test-3
[root@localhost ~]# mkdir /data/test
[root@localhost ~]# echo 1111 >/data/test/1.txt
[root@localhost ~]# ls /data/test
1.txt
[root@localhost ~]# cat /data/test/1.txt
1111
GluserFSノードコピーボリュームの使用状況の表示
[root@data-node-02 ~]# ls /glusterfs/storage1/rep_vol1/
111 1.txt 2.txt anaconda-ks.cfg test test-1 test-2 test-3
3.GlusterFSサービスのフェイルオーバーをテストする
プライマリノード(ノード1)をシャットダウンまたは再起動し、GlusterFSサービスとVIPがノード2に移行しているかどうかを確認します.
[root@data-node-01 ~]# reboot
[root@data-node-02 ~]# ip a show dev ens34
3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ba:42:cf brd ff:ff:ff:ff:ff:ff
inet 172.16.10.11/24 brd 172.16.10.255 scope global ens34
valid_lft forever preferred_lft forever
inet 172.16.10.220/24 scope global secondary ens34
valid_lft forever preferred_lft forever
inet6 fe80::e23:ce0:65c3:ffbf/64 scope link
valid_lft forever preferred_lft forever
[root@data-node-02 ~]# tail -f /var/log/messages
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: SECURITY VIOLATION - scripts are being executed but script_security not enabled.
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: Sync group GFS_HA_GROUP has only 1 virtual router(s) - removing
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) removing protocol VIPs.
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: Using LinkWatch kernel netlink reflector...
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Entering BACKUP STATE
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: VRRP sockpool: [ifindex(3), proto(112), unicast(0), fd(10,11)]
Aug 27 22:56:19 data-node-02 Keepalived_vrrp[2563]: VRRP_Script(monitor_glusterfs_status) succeeded
Aug 27 22:56:19 data-node-02 kernel: nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
Aug 27 22:56:19 data-node-02 kernel: IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
Aug 27 22:56:19 data-node-02 kernel: IPVS: Connection hash table configured (size=4096, memory=64Kbytes)
Aug 27 22:56:19 data-node-02 kernel: IPVS: Creating netns size=2040 id=0
Aug 27 22:56:19 data-node-02 kernel: IPVS: ipvs loaded.
Aug 27 22:56:19 data-node-02 Keepalived_healthcheckers[2562]: Opening file '/etc/keepalived/keepalived.conf'.
Aug 27 22:56:21 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Changing effective priority from 90 to 110
Aug 27 23:01:01 data-node-02 systemd: Started Session 3 of user root.
Aug 27 23:01:01 data-node-02 systemd: Starting Session 3 of user root.
Aug 27 23:03:09 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Transition to MASTER STATE
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Entering MASTER STATE
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) setting protocol VIPs.
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Sending/queueing gratuitous ARPs on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:11 data-node-02 systemd: Stopping GlusterFS, a clustered file-system server...
Aug 27 23:03:11 data-node-02 systemd: Starting GlusterFS, a clustered file-system server...
Aug 27 23:03:12 data-node-02 systemd: Started GlusterFS, a clustered file-system server.
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: VRRP_Instance(GFS_HA_1) Sending/queueing gratuitous ARPs on ens34 for 172.16.10.220
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
Aug 27 23:03:16 data-node-02 Keepalived_vrrp[2563]: Sending gratuitous ARP on ens34 for 172.16.10.220
クライアントでストレージがまだ使用可能かどうかをテスト
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/cl-root xfs 40G 1.2G 39G 3% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 139M 876M 14% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
172.16.10.220:rep_vol1 fuse.glusterfs 10G 136M 9.9G 2% /data
[root@localhost ~]# ls /data/
111 1.txt 2.txt anaconda-ks.cfg test test-1 test-2 test-3
[root@localhost ~]# touch /data/test.log
[root@localhost ~]# ls -l /data/
total 964
drwxr-xr-x 3 root root 4096 Aug 27 21:58 111
-rw-r--r-- 1 root root 10 Aug 27 21:23 1.txt
-rw-r--r-- 1 root root 6 Aug 27 21:36 2.txt
-rw------- 1 root root 2135 Aug 27 21:44 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 Aug 27 22:59 test
-rw------- 1 root root 324951 Aug 27 21:23 test-1
-rw------- 1 root root 324951 Aug 27 21:23 test-2
-rw------- 1 root root 324951 Aug 27 21:23 test-3
-rw-r--r-- 1 root root 0 Aug 27 23:05 test.log
ノード1のステータスの表示
[root@data-node-01 ~]# ip a show dev ens34
3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b2:b5:2a brd ff:ff:ff:ff:ff:ff
inet 172.16.10.10/24 brd 172.16.10.255 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::ce9a:ee2e:7b6c:a6bb/64 scope link
valid_lft forever preferred_lft forever
keepalivedサービスの再起動
[root@data-node-01 ~]# systemctl start keepalived.service
keepalivedログの表示(プライマリ・スタンバイ・ステータス)
Aug 27 23:07:42 data-node-01 systemd: Starting LVS and VRRP High Availability Monitor...
Aug 27 23:07:43 data-node-01 Keepalived[2914]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Aug 27 23:07:43 data-node-01 Keepalived[2914]: Opening file '/etc/keepalived/keepalived.conf'.
Aug 27 23:07:43 data-node-01 Keepalived[2915]: Starting Healthcheck child process, pid=2916
Aug 27 23:07:43 data-node-01 systemd: Started LVS and VRRP High Availability Monitor.
Aug 27 23:07:43 data-node-01 Keepalived[2915]: Starting VRRP child process, pid=2917
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Registering Kernel netlink reflector
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Registering Kernel netlink command channel
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Registering gratuitous ARP shared channel
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Opening file '/etc/keepalived/keepalived.conf'.
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: SECURITY VIOLATION - scripts are being executed but script_security not enabled.
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Sync group GFS_HA_GROUP has only 1 virtual router(s) - removing
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: VRRP_Instance(GFS_HA_1) removing protocol VIPs.
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: Using LinkWatch kernel netlink reflector...
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: VRRP_Instance(GFS_HA_1) Entering BACKUP STATE
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: VRRP sockpool: [ifindex(3), proto(112), unicast(0), fd(10,11)]
Aug 27 23:07:43 data-node-01 Keepalived_vrrp[2917]: VRRP_Script(monitor_glusterfs_status) succeeded
Aug 27 23:07:43 data-node-01 kernel: nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
Aug 27 23:07:43 data-node-01 kernel: IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
Aug 27 23:07:43 data-node-01 kernel: IPVS: Connection hash table configured (size=4096, memory=64Kbytes)
Aug 27 23:07:43 data-node-01 kernel: IPVS: Creating netns size=2040 id=0
Aug 27 23:07:43 data-node-01 Keepalived_healthcheckers[2916]: Opening file '/etc/keepalived/keepalived.conf'.
Aug 27 23:07:43 data-node-01 kernel: IPVS: ipvs loaded.
Aug 27 23:07:45 data-node-01 Keepalived_vrrp[2917]: VRRP_Instance(GFS_HA_1) Changing effective priority from 100 to 120
このことから、ノード1の障害が回復するとkeepalivedはスタンバイ状態に入り、GlusterFSサービスの監督管理を継続し、ノード2の障害が発生するとサービス、ストレージ、VIPをノード1に切り替え、外部にストレージサービスを提供し続け、ストレージの高可用性を実現する