クラスタ構築(2)MySQL/MariaDBレプリケーション

前回PacemakerCorosync を用いてクラスタ環境のセットアップを行った。今回は、MySQL/MariaDBをリソースに設定し、レプリケーション設定を行う。

MySQL/MariaDBレプリケーション

レプリケーションの実行環境を以下のように定義する。

項目 内容
マスター 192.168.0.11
スレーブ 192.168.0.12
対象データベース mydatabase
レプリケーションユーザ repl
レプリケーションユーザパスワード replpass

レプリケーションユーザは、REPLICATION SLAVE もしくは REPLICATION CLIENT の権限を必要とする。なお、Pacemaker と Corosyncでレプリケーションを行う場合は、これに加えて、GRANT, SUPER, RELOAD, PROCESS の権限も必要とする。

レプリケーション設定

マスターDBに対して以下の操作を行う。

  • server-idの設定
vi /etc/my.cnf

# レプリケーション対象DBの指定
replicate-do-db=mydatabase
# サーバ固有のIDを設定
server-id=1
# バイナリログを出力
log-bin=mysql-bin
  • データベースをロック
FLUSH TABLES WITH READ LOCK;
  • データベースの内容をダンプファイルに吐き出し
mysqldump --skip-lock-tables -h 192.168.0.11 -u repl -preplpass mydatabase > /tmp/database.sql
  • バイナリログの状態を確認
    スレーブDBにマスターDBのバイナリログの位置を指定するために事前に確認しておく。
SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

スレーブDBに対して以下の操作を行う。

  • server-idの設定
vi /etc/my.cnf

# レプリケーション対象DBの指定
replicate-do-db=mydatabase
# サーバ固有のIDを設定
server-id=2
# バイナリログを出力
log-bin=mysql-bin
# マスターDBの更新もバイナリログに記録する
log_slave_updates
  • 既存のDBを削除と再作成
DROP DATABASE IF EXISTS mydatabase;
CREATE DATABASE IF NOT EXISTS mydatabase;
  • ダンプファイルの読み込み
    さきほどダンプしたマスターDBのダンプファイルをスレーブDBに読み込ませる。
mysql -u repl -h 192.168.0.12 -preplpass mydatabase < /tmp/database.sql
  • マスターDBの指定
CHANGE MASTER TO MASTER_HOST='192.168.0.11', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=245;
  • スレーブの開始
SLAVE START;

最後にマスターDBで以下の操作を行う

  • データベースのロックを解除
UNLOCK TABLES;

Pacemaker と Corosyncを用いたレプリケーション設定

Pacemaker と Corosync を用いてレプリケーションを設定する場合は、以下の手順で行う。

  • DBリソースの登録
    mariadb-replという名前でDBリソースを登録する。
pcs resource create mariadb-repl ocf:heartbeat:mysql binary=/usr/bin/mysqld_safe pid=/var/run/mariadb/mariadb.pid datadir=/var/lib/mysql log=/var/log/mariadb/mariadb.log replication_user=repl replication_passwd=replpass op start interval=0 timeout=120s op stop interval=0 timeout=120s op monitor interval=20s timeout=30s op monitor interval=10s role=Master timeout=30s op monitor interval=30s role=Slave timeout=30s op promote interval=0 timeout=120s op demote interval=0 timeout=120s op notify interval=0 timeout=90s
  • レプリケーションリソースの登録
    mariadb-cloneという名前でレプリケーションリソースを登録する。
pcs resource master mariadb-clone mariadb-repl master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true"
  • リソース制約の設定
    192.168.0.11がマスターDBとなるようにリソース制約を設定する。
pcs constraint location mariadb-clone prefers 192.168.0.11

Zabbix(1)CentOS7にZabbix3.0をインストールする

サーバ

サーバの構築環境は、CentOS7、およびZabbix Server 3.0とする。また、サーバにもエージェントをインストールし、自身を自身で監視する体制とする。Zabbixを設定する際には、FirewallやSElinuxの設定にも変更が必要となる。ただし、今回は閉じたネットワーク内で監視を行うことを想定して設定するため、FirewallもSElinuxも無効にしている。

Zabbixサーバの設定

  • Zabbixリポジトリの追加
sudo yum install http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
  • パッケージのインストール
sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent
sudo yum install mariadb-server
  • MariaDBを設定
    文字コードの設定を追記

    sudo vi /etc/my.cnf.d/server.cnf
    
    [mysqld]
    character-set-server = utf8
    collation-server     = utf8_bin
    skip-character-set-client-handshake
    innodb_file_per_table
    

    SQLサーバを起動

    sudo systemctl start mariadb
    sudo systemctl enable mariadb
    

  • MariaDBを初期化
    データベースとユーザの追加

    mysql -u root
    
    create database zabbix;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'password' ;
    exit;
    

    初期データのインポート

    zcat /usr/share/doc/zabbix-server-mysql-3.0.4/create.sql.gz | mysql -uroot zabbix
    

  • Zabbixサーバの設定を変更

    sudo vi /etc/zabbix/zabbix_server.conf
    
    # データベースのパスワードを設定
    DBPassword=password
    # Zabbix discoverer processes more than 75% busyが発生する場合は以下を設定
    StartDiscoverers=3
    

  • Apacheの設定を変更
    タイムゾーンの設定

    sudo vi /etc/httpd/conf.d/zabbix.conf
    
    php_value date.timezone Asia/Tokyo
    

  • サービスの起動

    sudo systemctl start zabbix-agent
    sudo systemctl start zabbix-server
    sudo systemctl start httpd
    sudo systemctl enable zabbix-agent
    sudo systemctl enable zabbix-server
    sudo systemctl enable httpd
    

関連するサービスの設定

ログの時刻を正確な値にするため、定期的にNTPによる時刻合わせを行う

sudo yum install -y ntpdate
sudo crontab -e

0 * * * *       /usr/sbin/ntpdate XXX.XXX.XXX.XXX

エラーメールを送信するためのSMTP設定を行う

myhostname = XXX.surbiton.jp
relayhost = [XXX.XXX.XXX.XXX]

メールサーバ起動

sudo systemctl start postfix
sudo systemctl enable postfix

エージェント

監視対象のサーバにはエージェントをインストールする。サーバの構築環境は、CentOS6、およびZabbix Server 2.4とする。

Zabbixエージェントの設定

  • Zabbixリポジトリの追加
sudo yum install http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
  • パッケージのインストール
sudo yum install -y zabbix-agent-2.4.8-1.el6
  • エージェントの設定を変更
    sudo vi /etc/zabbix/zabbix_agentd.conf
    
    # ZabbixサーバのIPアドレス
    Server=XXX.XXX.XXX.XXX
    # アクティブチェック用のZabbixサーバのIPアドレス
    ServerActive=XXX.XXX.XXX.XXX
    # ホスト名
    Hostname=hoge
    

  • サービスの起動

    sudo systemctl start zabbix-agent
    sudo systemctl enable zabbix-agent
    

参考URL

Zabbix 3.0をCentOS 7にインストール