LoginSignup
7
10

More than 5 years have passed since last update.

Pacemaker+CorosyncでMySQL(MariaDB)のMaster/Slave構成

Last updated at Posted at 2016-08-02

インストール

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として稼働を開始するはずです。

参考

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10