drbdとcorosyncを組み合わせたmysqlの高可用性クラスタサービス
DRBD:Distributed Replicated Block Dvice分散型レプリケーションブロックデバイスは、2つのホストのハードディスクまたはパーティションをミラーデバイスにすることができ、RAID 1の原理に似ているが、プライマリノードのデータをアクティブにネットワークを通じてノードからミラーに同期させ、プライマリノードに障害が発生した場合、セカンダリノードをプライマリノードにし、ミラーデバイスであるため、だからデータは失われません.corosyncのここでの役割はdrbdをpacemakerを介して高利用可能なサービスのリソースにし、プライマリ・スレーブ・ノード間の自動切り替えを容易にすることである.drbdは、各ノード間の独自のハードディスクデバイスを使用するため、共有ストレージが必要なシーンに対してコスト削減の解決策となる.
一、実験計画:
1,本実験は2つのノードnode 1とnode 2を採用し,システムプラットフォームはRedhat 5.8 x 86を採用した.
Node 1のipアドレスは192.168.1.65です
Node 2のipアドレスは192.168.1.66です.
仮想vip:192.168.1.60
2 drbd関連パッケージをインストールし、drbdを構成して起動し、drbdが正常に動作しているかどうかをテストする
3、各ノードにmysqlをインストールし、ここでmysql-5.5.42を使用して汎用バイナリインストールを使用し、ログインをテストします.
4 corosyncおよびpacemakerをインストールし、drbdとmysqlをリソースとしてmysqlベースの高可用性クラスタを実現する
二、実験手順:
1,インストール構成drbd
(1)準備作業
a.ホスト名を変更し、再起動後も有効になるようにする
node1:
node2:
b.両ノードのホスト名解析が正常であることを確認し、/etc/hostsファイルを修正する
c.構成ssh鍵認証に基づく(デュアルマシン相互通信)
node1:
node2:
d.drbdカーネルモジュールとユーザ空間ツールをダウンロードしてインストールし、ここでdrbd 8を使用する.3バージョン、ダウンロードアドレスはhttp://mirrors.sohu.com/centos/5/extras/i386/RPMS/drbd 83-8.3.8-1.el5.centos.i386.rpm(ユーザ空間コマンドラインツール)kmod-drbd 83-8.3.8-1.el5.centos.i686.rpm(drbdカーネルモジュール)
node 1とnode 2にそれぞれインストールすればいいです.
e.drbdをコピーしたサンプルファイルはプロファイル(node 1で完了)
f.構成/etc/drbd.d/global-common.conf
g.リソース/etc/drbdを定義する.d/mydrbd.res、内容は以下の通りです.
h.node 1上のプロファイルをnode 2上にコピーし、両ノードのプロファイルを一致させる
i.2つのノードでそれぞれリソースを初期化し、サービスを開始する
j.起動状態の表示
この場合、両方のノードはまだ一致していないため、node 1で次のコマンドを構成するprimaryノードとして手動で構成する必要があります.
ステータスの再表示:
データの同期が完了したら、再度確認します.
# drbd-overview
k.プライマリノードにファイルシステムを作成し、drbdはプライマリノードのみがファイルシステムをマウントおよび読み書きでき、ノードからマウントできない
テスト/etc/issueファイルを/mydataにコピー
node 1のファイルシステムをアンインストールし、drbdロールをsecondaryに変換し、node 2をprimaryに変換し、issueファイルが存在するかどうかをテストします.
node1:
node2:
ls/mydataは、以前にコピーしたissueファイルが存在するかどうかを確認し、存在する場合はdrbd構成が完了します.
2.node 1とnode 2に構成mysql-5.5.42をインストールする
準備作業:mysqlユーザー、mysqlグループ、データディレクトリの作成
(1)mysql-5.5.42をローカルにダウンロードし、/usr/local/
(2)/usr/local/ソフト接続の作成
(3)mysqlディレクトリの変更権限
(4)mysqlデータベースの初期化
(5)mysqlプロファイルとmysql起動スクリプトのコピーと変更
(6)テストはmysqlを起動し、テストデータベースtestdbを作成する(テスト前にdrbdを起動し、2つのノードでそれぞれテストする)
(7)テストが完了しmysqlサービスをオフにし、起動させない
両方のノードのmysqlサービスが構成されていることを確認してください.
3.構成corosyncのインストール、drbdベースのmysql高可用性サービスの構成
(1)corosyncとpacemakerをインストールし、アドレス(32ビット)をダウンロードするhttp://clusterlabs.org/rpm/epel-5/i386/
必要なインストールパッケージ:cluster-glue,cluster-glue-libs,heartbeat,resource-agents,corosync,heartbeat-libs,pacemaker,corosynclib,libesmtp,pacemaker-libs(以下node 1で完了)
(2)テンプレートプロファイルを/etc/corosync/にコピーし、変更する
(3)ノード間の通信を生成する鍵ファイル
(4)corosync.confとauthkeyをnode 2にコピー
(5)corosyncログが存在するディレクトリの作成
(6)node 1でcorosyncを起動してみる
corosyncエンジンが正常に起動しているかどうかを確認します.
初期化メンバーノード通知が正常に発行されているかどうかを確認します.
起動中にエラーが発生したかどうかを確認します.
Pacemakerが正常に起動しているかどうかを確認します.
node 1のcorosyncとpacemakerの起動に問題がなければ、node 2の対応するサービスを起動できます.
(7)corosyncステータスの表示
(8)stonithを無効にします.ここにstonithデバイスはありませんので、無効にする必要があります.
(9)法定票数を持たないデフォルトポリシーの設定
(10)リソースの定義
a.drbd主従リソースの定義
b.自動マウントファイルシステムのリソースの定義
c.リソース制約、位置制約、順序制約を定義する
d.mysqlリソースの定義
e.vipの定義
これでdrbdとcorosyncに基づいて実装されたmysql高可用性クラスタが完了し,主従テストサービスの効果を切り替えることができる.
一、実験計画:
1,本実験は2つのノードnode 1とnode 2を採用し,システムプラットフォームはRedhat 5.8 x 86を採用した.
Node 1のipアドレスは192.168.1.65です
Node 2のipアドレスは192.168.1.66です.
仮想vip:192.168.1.60
2 drbd関連パッケージをインストールし、drbdを構成して起動し、drbdが正常に動作しているかどうかをテストする
3、各ノードにmysqlをインストールし、ここでmysql-5.5.42を使用して汎用バイナリインストールを使用し、ログインをテストします.
4 corosyncおよびpacemakerをインストールし、drbdとmysqlをリソースとしてmysqlベースの高可用性クラスタを実現する
二、実験手順:
1,インストール構成drbd
(1)準備作業
a.ホスト名を変更し、再起動後も有効になるようにする
node1:
# sed -i 's@\(HOSTNAME=\).*@\1node1.test.com' /etc/sysconfig/network
# hostname node1.test.com
node2:
# sed -i 's@\(HOSTNAME=\).*@\1node2.test.com' /etc/sysconfig/network
# hostname node2.test.com
b.両ノードのホスト名解析が正常であることを確認し、/etc/hostsファイルを修正する
192.168.1.65 node1.test.com node1
192.168.1.66 node2.test.com node2
c.構成ssh鍵認証に基づく(デュアルマシン相互通信)
node1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
node2:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
d.drbdカーネルモジュールとユーザ空間ツールをダウンロードしてインストールし、ここでdrbd 8を使用する.3バージョン、ダウンロードアドレスはhttp://mirrors.sohu.com/centos/5/extras/i386/RPMS/drbd 83-8.3.8-1.el5.centos.i386.rpm(ユーザ空間コマンドラインツール)kmod-drbd 83-8.3.8-1.el5.centos.i686.rpm(drbdカーネルモジュール)
node 1とnode 2にそれぞれインストールすればいいです.
# yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
e.drbdをコピーしたサンプルファイルはプロファイル(node 1で完了)
# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
f.構成/etc/drbd.d/global-common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
syncer {
rate 300M;
}
}
g.リソース/etc/drbdを定義する.d/mydrbd.res、内容は以下の通りです.
resource mydrbd {
device /dev/drbd0;
meta-disk internal;
disk /dev/vg_root/mydrbd;
on node1.test.com {
address 192.168.1.65:7789;
}
on node2.test.com {
address 192.168.1.66:7789;
}
}
h.node 1上のプロファイルをnode 2上にコピーし、両ノードのプロファイルを一致させる
# scp -r /etc/drbd.* node2:/etc
i.2つのノードでそれぞれリソースを初期化し、サービスを開始する
# drbdadm create-md web
# service drbd start
j.起動状態の表示
# drbd-overview
0:mydrbd Connected Secondary/Secondary Inconsistent/Inconsistent C r----
この場合、両方のノードはまだ一致していないため、node 1で次のコマンドを構成するprimaryノードとして手動で構成する必要があります.
# drbdadm -- --overwrite-data-of-peer primary mydrbd
ステータスの再表示:
# drbd-overview
0:mydrbd SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[============>.......] sync'ed: 86.2% (17240/1024300)K delay_probe: 25
データの同期が完了したら、再度確認します.
# drbd-overview
0:mydrbd Connected Primary/Secondary UpToDate/UpToDate C r----
k.プライマリノードにファイルシステムを作成し、drbdはプライマリノードのみがファイルシステムをマウントおよび読み書きでき、ノードからマウントできない
# mkfs.ext3 /dev/drbd0
# mkdir /mydata
# mount /dev/drbd0 /mydata
テスト/etc/issueファイルを/mydataにコピー
# cp /etc/issue /mydata
node 1のファイルシステムをアンインストールし、drbdロールをsecondaryに変換し、node 2をprimaryに変換し、issueファイルが存在するかどうかをテストします.
node1:
# umount /mydata
# drbdadm secondary mydrbd
node2:
# drbdadm primary mydrbd
# mkdir /mydata
# mount /dev/drbd0 /mydata
ls/mydataは、以前にコピーしたissueファイルが存在するかどうかを確認し、存在する場合はdrbd構成が完了します.
2.node 1とnode 2に構成mysql-5.5.42をインストールする
準備作業:mysqlユーザー、mysqlグループ、データディレクトリの作成
# groupadd -g 3306 mysql
# useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql
# mkdir /mydata/data
(1)mysql-5.5.42をローカルにダウンロードし、/usr/local/
# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local
(2)/usr/local/ソフト接続の作成
# cd /usr/local
# ln -sv mysql-5.5.42-linux2.6-i686 mysql
# cd mysql
(3)mysqlディレクトリの変更権限
# chown -R root:mysql ./*
(4)mysqlデータベースの初期化
# scripts/mysql_install_db --user=mysql datadir=/mydata/data
(5)mysqlプロファイルとmysql起動スクリプトのコピーと変更
# cp support-files/my-large.cnf /etc/my.cnf
# cp support-files/mysql.server /etc/init.d/mysqld
# vim /etc/my.cnf
datadir = /mydata/data/
innodb_file_per_table = 1
(6)テストはmysqlを起動し、テストデータベースtestdbを作成する(テスト前にdrbdを起動し、2つのノードでそれぞれテストする)
# service mysqld start
# mysql
mysql> create database testdb;
mysql>\q
(7)テストが完了しmysqlサービスをオフにし、起動させない
# service mysqld stop
# chkconfig mysqld off
# chkconfig mysqld --list
両方のノードのmysqlサービスが構成されていることを確認してください.
3.構成corosyncのインストール、drbdベースのmysql高可用性サービスの構成
(1)corosyncとpacemakerをインストールし、アドレス(32ビット)をダウンロードするhttp://clusterlabs.org/rpm/epel-5/i386/
必要なインストールパッケージ:cluster-glue,cluster-glue-libs,heartbeat,resource-agents,corosync,heartbeat-libs,pacemaker,corosynclib,libesmtp,pacemaker-libs(以下node 1で完了)
# yum -y --nogpgcheck localinstall /root/cluster/*.rpm
(2)テンプレートプロファイルを/etc/corosync/にコピーし、変更する
# cd /etc/corosync
# cp corosync.conf.example corosync.conf
# vim corosync.conf #
secauth: on
bindnetaddr: 192.168.1.0
#
service {
ver: 0
name: pacemaker
}
aisexec {
user: root
group: root
}
(3)ノード間の通信を生成する鍵ファイル
# corosync-keygen
(4)corosync.confとauthkeyをnode 2にコピー
# scp -p corosync.conf authkey node2:/etc/corosync/
(5)corosyncログが存在するディレクトリの作成
# mkdir /var/log/cluster
# ssh node2 'mkdir /var/log/cluster'
(6)node 1でcorosyncを起動してみる
# /etc/init.d/corosync start
corosyncエンジンが正常に起動しているかどうかを確認します.
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
Jul 28 12:17:28 corosync [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jul 28 12:17:28 corosync [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
Jul 28 22:32:06 corosync [MAIN ] Corosync Cluster Engine exiting with status 0 at main.c:170.
Jul 28 22:32:46 corosync [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jul 28 22:32:46 corosync [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
初期化メンバーノード通知が正常に発行されているかどうかを確認します.
# grep TOTEM /var/log/cluster/corosync.log
Jul 28 12:17:28 corosync [TOTEM ] Initializing transport (UDP/IP).
Jul 28 12:17:28 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jul 28 12:17:29 corosync [TOTEM ] The network interface [192.168.1.65] is now up.
Jul 28 12:17:30 corosync [TOTEM ] Process pause detected for 913 ms, flushing membership messages.
Jul 28 12:17:30 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
起動中にエラーが発生したかどうかを確認します.
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
Pacemakerが正常に起動しているかどうかを確認します.
# grep pcmk_startup /var/log/cluster/corosync.log
Jul 28 12:17:30 corosync [pcmk ] info: pcmk_startup: CRM: Initialized
Jul 28 12:17:30 corosync [pcmk ] Logging: Initialized pcmk_startup
Jul 28 12:17:30 corosync [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
Jul 28 12:17:30 corosync [pcmk ] info: pcmk_startup: Service: 9
Jul 28 12:17:30 corosync [pcmk ] info: pcmk_startup: Local hostname: node1.test.com
Jul 28 22:32:49 corosync [pcmk ] info: pcmk_startup: CRM: Initialized
node 1のcorosyncとpacemakerの起動に問題がなければ、node 2の対応するサービスを起動できます.
# ssh node2 '/etc/init.d/corosync start'
(7)corosyncステータスの表示
# crm_mon
============
Last updated: Fri Jul 31 22:52:48 2015
Stack: openais
Current DC: node1.test.com - partition with quorum
Version: 1.0.12-unknown
2 Nodes configured, 2 expected votes
0 Resources configured.
============
Online: [ node1.hpf.com node2.hpf.com ]
(8)stonithを無効にします.ここにstonithデバイスはありませんので、無効にする必要があります.
# crm configure property stonith-enabled=false
(9)法定票数を持たないデフォルトポリシーの設定
# crm configure property no-quorum-policy=ignore
(10)リソースの定義
a.drbd主従リソースの定義
# crm
crm(live)# configure
crm(live)configure# primitive mysqldrbd ocf:heartbeat:drbd params drbd_resource=mydrbd op start timeout=240 op stop timeout=100 op monitor interval=20 role=Master timeout=30 op monitor interval=30 role=Slave timeout=30
crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
crm(live)configure# verify
crm(live)configure# commit
b.自動マウントファイルシステムのリソースの定義
crm(live)# configure
crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mydata fstype=ext3 op start timeout=60 op stop timeout=60
c.リソース制約、位置制約、順序制約を定義する
crm(live)configure#
crm(live)configure#
d.mysqlリソースの定義
crm(live)configure#
e.vipの定義
crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip=192.168.1.60 nic=eth0 cidr_netmask=255.255.255.0
crm(live)configure# colocation myip_with_ms_mysqldrbd inf: ms_mysqldrbd:Master myip
vip drbd ,
crm(live)configure# verify
crm(live)configure# commit
これでdrbdとcorosyncに基づいて実装されたmysql高可用性クラスタが完了し,主従テストサービスの効果を切り替えることができる.
# crm node standby
# crm node online