インストール
CentOS 7です。
yum install corosync paceaker pcs mysql-server
Corosyncの設定
以下の設定を、両ノードで行う。
/etc/corosync/corosync.conf
totem {
version: 2
crypto_cipher: none
crypto_hash: none
interface{
ringnumber:0
bindnetaddr: 192.168.10.0 # ネットワークアドレス
mcastport: 5405
ttl: 1
}
transport: udpu
}
nodelist {
node{
ring0_addr: hostname1 # ホスト名1
nodeid: 1
}
node{
ring0_addr: hostname2 # ホスト名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
一旦rebootする。
# pcs status
で動作していることを確認する。
# passwd hacluster
でクラスタの認証用ユーザhaclusterのパスワードを設定する。
クラスタの認証
両方のノードで認証を行い、# pcs status
で確認する。PCSD StatusがOnlineになっていればOK。
# pcs cluster auth <ホスト1> <ホスト2> -u hacluster -p <password> --force
MySQL (MariaDB)の設定
ホスト1ではserver-id=1、ホスト2ではserver-id=2で設定します。
etc/my.cnf
[mysqld]
log-bin=mariadb-bin
server-id=1
レプリケーションユーザの作成
ホスト1のみ。DBを起動してユーザを作成します。
# systemctl start mariadb.service
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;
DBを停止してデータベースファイル一式をホスト2にコピーします。
# systemctl stop mariadb.service
# ssh <ホスト2> rm -rf /var/lib/mysql
# tar cf - -C /var/lib mysql | ssh <ホスト2> tar xpvf - -C /var/lib/
クラスターリソースの設定
最初にSlaveとして稼働させるホスト2をStandbyにした後、リソースを登録します。
# pcs cluster standby <ホスト2>
# 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
Master/Slaveセットの作成し、クラスターリソースを開始します。
pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs resource start mysql-clone
ホスト1の起動確認後ホスト2を起動します。
pcs cluster unstandby <ホスト2>
フェイルオーバ確認
pcs cluster standby <ホスト1>
でMaster側をStandbyにするとMasterがホスト2に切り替わることを確認します。
Masterが切り替わったらpcs cluster unstandby <ホスト1>
でStandby解除するとホスト1はSlaveとして稼働を開始するはずです。