今回の目標は、仮想マシンdb-p と仮想マシンdb-s をクラスタ組んで、仮想マシンstorage の mariadb に iscsi で接続する、というところまで想定です。
だいぶ殴り書きなので、分かる人だけ分かればというのと、コマンドメモくらいになればです。
(折を見てまとめなおしたい。。。)
pcs 関連のインストール実施
■ モジュールインストール (db両方)
yum install corosync pacemaker pcs mysql-server
■ 設定ファイルの準備 (db両方)
# vi /etc/corosync/corosync.conf
totem {
version: 2
crypto_cipher: none
crypto_hash: none
interface{
ringnumber:0
bindnetaddr: 192.168.1.0 # ネットワークアドレス
mcastport: 5405
ttl: 1
}
transport: udpu
}
nodelist {
node{
ring0_addr: db-primary # ホスト名1
nodeid: 1
}
node{
ring0_addr: db-secondary # ホスト名2
nodeid: 2
}
}
logging {
fileline: off
to_syslog: yes
to_logfile: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
provider: corosync_votequorum
expected_votes: 2
}
※ 上の日本語のコメントは削除しないといけない。
# firewall-cmd --add-port=5405/udp --permanent
# firewall-cmd --add-port=2224/tcp --permanent
# systemctl enable corosync
# systemctl enable pacemaker
# systemctl enable pcsd
■ hosts に登録 (db両方)
# vi /etc/hosts
192.168.1.105 db-primary
192.168.1.106 db-secondary
dns があったら便利だねー。
■ hacluster のパスワード変更 (db両方)
# passwd hacluster
hapassword
■ クラスタの認証
# pcs cluster auth db-primary db-secondary -u hacluster -p hapassword --force
■ ここでスナップショット作成
■ mariadb インストール (db両方)
yum -y install mariadb-server
■ mriadb の設定
# vi /etc/my.cnf
[mysqld]
log-bin=mariadb-bin
server-id=1
# vi /etc/my.cnf
[mysqld]
log-bin=mariadb-bin
server-id=2
■ レプリケーションユーザーの作成 (db-primary)
※ db-primary のみ
# systemctl start mariadb.service
# mysql
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';
mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';
mysql> FLUSH PRIVILEGES;
mysql> quit;
■ DBを停止してデータベースファイル一式をホスト2にコピーします。 (db-primary)
# systemctl stop mariadb.service
# ssh db-secondary rm -rf /var/lib/mysql
# tar cf - -C /var/lib mysql | ssh db-secondary tar xpvf - -C /var/lib/
※ db-secondary のログインパスワードは都度入力
■ クラスターリソースの設定 (db-primary)
# pcs cluster standby db-secondary
# pcs cluster cib mysql_repl
# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql
# pcs -f mysql_repl resource update mysql binary=/usr/bin/mysqld_safe
# pcs -f mysql_repl resource update mysql datadir=/var/lib/mysql
# pcs -f mysql_repl resource update mysql log=/var/log/mariadb/mariadb.log
# pcs -f mysql_repl resource update mysql pid=/run/mariadb/mariadb.pid
# pcs -f mysql_repl resource update mysql replication_user=repl
# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
# pcs -f mysql_repl resource op add mysql start interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql stop interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql monitor interval=20s timeout=30s
# pcs -f mysql_repl resource op add mysql monitor interval=10s role=Master timeout=30s
# pcs -f mysql_repl resource op add mysql monitor interval=30s role=Slave timeout=30s
# pcs -f mysql_repl resource op add mysql promote interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql demote interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql notify interval=0 timeout=90s
# pcs cluster cib-push mysql_repl
■ クラスタリソース作成 & 開始 (db-primary)
# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
# pcs property set stonith-enabled=false
# pcs resource enable mysql
# pcs resource start mysql-clone ← いらない??? きっといらない。
ホスト1の起動確認後ホスト2を起動します。
# pcs cluster unstandby db-secondary
■ クラスタ切り替えテスト
- db-primary をスタンバイにして Master を切り替える
# pcs cluster standby db-primary
- db-primary をアンスタンバイにして Slave として復活する
# pcs cluster unstandby db-primary
※ Msater/Slave のどちらかがシャットダウンしてしまうと、クラスタが切れてしまう。
→ どちらか単体での動作継続ができない。
■ 起動メモ
※ pacemaker でコントロールしているけど、systemctl で mariadb を実行できる。はて。
db-primary OS 起動
db-secondary OS 起動
db-primary で systemctl start mariadb
db-secondary で systemctl start mariadb
db-primary で pcs cluster standby db-secondary
db-primary で pcs cluster unstandby db-secondary
db-primary で pcs resource cleanup
※ standby 状態になっていると、db-primary、db-secondary 共に mariadb は起動している状態となっている。
■ 仮想IP の追加
http://kan3aa.hatenablog.com/entry/2015/06/05/135150
pcs resource create VIP ocf:heartbeat:IPaddr2 \
ip=192.168.1.107 cidr_netmask=24 op monitor interval=10s
とりあえず、上の操作だけでVIPは設定できたみたい。
先に iSCSI ターゲットの設定を進める。
■ iSCSI ターゲットの設定
※ まず、storage となる仮想マシンに /dev/sdb 用のディスクを追加。
↑ 大きめにサイズとっとく。
[root@storage ~]# cat /proc/partitions
major minor #blocks name
8 0 52428800 sda
8 1 1048576 sda1
8 2 51379200 sda2
8 16 52428800 sdb
11 0 1048575 sr0
253 0 49274880 dm-0
253 1 2097152 dm-1
[root@storage ~]#
[root@storage ~]#
[root@storage ~]#
以降は以下のページにしたがって設定開始。
http://ossfan.net/setup/linux-28.html
※ iqn の設定
ルールがあるので従おうと思ったが、適当。
=== ルール ===
iqn.yyyy-mm.naming-authority:unique-name
iqn : 先頭は iqn の3文字で固定です
yyyy-mm : ドメインを取得した年月です。ossfan.netを取得したのは2011年2月なので、2011-02 となります。
naming-authority : 取得したドメインを逆にした形です。ossfan.net は net.ossfan となります。
unique-name : ドメイン内で一意になる名前です。今回は storage1 としました。
=== ここまで ===
今回は、以下とします。
iqn.2019-01.jp.ne.sample.amegon:storage
以下は db-primary、db-secondary 用の iqn 設定。
iqn.2019-01.jp.ne.sample.amegon:db-primary
iqn.2019-01.jp.ne.sample.amegon:db-secondary
以下で、iSCSIのログイン → ディスクマウント → フォーマットを実施
[root@db-primary ~]# cat /proc/partitions
major minor #blocks name
11 0 1048575 sr0
8 0 8388608 sda
8 1 1048576 sda1
8 2 7339008 sda2
253 0 6496256 dm-0
253 1 839680 dm-1
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# iscsiadm -m discovery -t st -p 192.168.1.110:3260
192.168.1.110:3260,1 iqn.2019-01.jp.ne.sample.amegon:storage
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# iscsiadm -m node -T iqn.2019-01.jp.ne.sample.amegon:storage -p 192.168.1.110:3260 -l
Logging in to [iface: default, target: iqn.2019-01.jp.ne.sample.amegon:storage, portal: 192.168.1.110,3260] (multiple)
Login to [iface: default, target: iqn.2019-01.jp.ne.sample.amegon:storage, portal: 192.168.1.110,3260] successful.
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# cat /proc/partitions
major minor #blocks name
11 0 1048575 sr0
8 0 8388608 sda
8 1 1048576 sda1
8 2 7339008 sda2
253 0 6496256 dm-0
253 1 839680 dm-1
8 16 52424704 sdb
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000be007
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 16777215 7339008 8e Linux LVM
Disk /dev/mapper/centos-root: 6652 MB, 6652166144 bytes, 12992512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk /dev/mapper/centos-swap: 859 MB, 859832320 bytes, 1679360 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk /dev/sdb: 53.7 GB, 53682896896 bytes, 104849408 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 33550336 バイト
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# parted --script /dev/sdb "mklabel msdos"
[root@db-primary ~]#
[root@db-primary ~]# parted --script /dev/sdb "mkpart primary 0% 100%"
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# mkfs -t xfs /dev/sdb
mkfs.xfs: /dev/sdb appears to contain a partition table (dos).
mkfs.xfs: Use the -f option to force overwrite.
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# mkfs.xfs -s size=4096 /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=3274353 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=13097409, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=6395, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# cat /proc/partitions
major minor #blocks name
11 0 1048575 sr0
8 0 8388608 sda
8 1 1048576 sda1
8 2 7339008 sda2
253 0 6496256 dm-0
253 1 839680 dm-1
8 16 52424704 sdb
8 17 52389636 sdb1
[root@db-primary ~]#
メモ
■ ディスクのフォーマット (db-primary のみ)
fdisk -l
parted --script /dev/sdb "mklabel msdos"
parted --script /dev/sdb "mkpart primary 0% 100%"
mkfs -t xfs /dev/sdb
mkfs.xfs -s size=4096 /dev/sdb1
■ マウント
mount /dev/sdb1 /mnt/test/
umount /mnt/test/
iscsiadm --mode node --targetname iqn.2019-01.jp.ne.sample.amegon:storage --logout
iscsiadm --mode node --op delete --targetname iqn.2019-01.jp.ne.sample.amegon:storage
iscsiadm --mode discovery --op delete --portal 192.168.1.110
■ pacemaker 用のファイル設定 (db-primary、db-secondary ともに)
yum -y install wget
cd /usr/lib/ocf/resource.d/heartbeat/
wget https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/iscsi --no-check-certificate
chmod +x iscsi
■ pacemaker 設定 (db-primary のみ)
pcs resource delete VIP
pcs resource delete mysql-clone
pcs resource create db-vip ocf:heartbeat:IPaddr2 \
ip=192.168.1.107 cidr_netmask=24 op monitor interval=10s \
--group resource-group
pcs resource create db-shared_device ocf:heartbeat:iscsi \
portal="192.168.1.110:3260" \
target="iqn.2019-01.jp.ne.sample.amegon:storage" \
op start on-fail=block \
op stop on-fail=block \
op monitor on-fail=restart \
--group resource-group
pcs resource create db-shared_mount ocf:heartbeat:Filesystem \
device="/dev/sdb1" \
directory="/var/lib/mysql" \
fstype="xfs" \
op start on-fail=block \
op stop on-fail=block \
op monitor on-fail=restart \
--group resource-group
pcs resource create mariadb ocf:heartbeat:mysql
pcs resource update mariadb log=/var/lib/mysql/error.log
pcs resource group add db-cluster db-vip
pcs resource group add db-cluster db-shared_device
pcs resource group add db-cluster db-shared_mount
pcs resource group add db-cluster mariadb