DRBD+Corosync+PacemakerでHA MySQL構築

DBサーバは冗長化が難しい。

レプリケーションサーバはまだしも、マスターサーバは単一障害点になりがち。

そこで、DRBD, Corosync, Pacemakerを使ってHA(高可用性) MySQLサーバを構築してみた。

 

※参考サイト

http://wnapdlf.blogspot.nl/2015/05/drbdmysqlcorosyncpacemaker-on.html

http://www.mail-archive.com/ubuntu-cloud@lists.ubuntu.com/msg00588.html

 

0. 下準備

環境構築には、Vagrantを使用した。Vagrantfileの内容は下記の通り。

OS : Ubuntu 14.04 (vagrantのイメージ名は、ubuntu/trusty64 )

host1 : host名 db1, IP 192.168.56.31

host2 : host名 db2, IP 192.168.56.32

HAクラスターとしてのVirtual IP : 192.168.56.33 (mysqlのアクセス先IP)

 

Vagrant.configure(2) do |config|
	config.vm.box = "ubuntu/trusty64"

	config.vm.define "db1" do |db1|
		db1.vm.hostname = "db1"
		db1.vm.network :private_network, ip: "192.168.56.31"
		disk=['/{Path_to_Vagrantfile}/db1_disk1.vdi','/{Path_to_Vagrantfile}/db1_disk2.vdi','/{Path_to_Vagrantfile}/db1_disk3.vdi']
		disk_count=disk.size
		db1.vm.provider :virtualbox do |vb|
			for i in (0..(disk_count-1))
				unless File.exist?(disk[i])
					vb.customize ["createhd",'--filename',disk[i],'--size',10240]
				end
				vb.customize ['storageattach', :id,'--storagectl','SATAController', '--port',i+1,'--device',0,'--type','hdd','--medium',disk[i]]
			end
			vb.customize ["modifyvm", :id,"--memory","1024"]
			vb.cpus = 1
		end
	end

	config.vm.define "db2" do |db2|
		db2.vm.hostname = "db2"
		db2.vm.network :private_network, ip: "192.168.56.32"
		disk=['/{Path_to_Vagrantfile}/db2_disk1.vdi','/{Path_to_Vagrantfile}/db2_disk2.vdi','/{Path_to_Vagrantfile}/db2_disk3.vdi']
		disk_count=disk.size
		db2.vm.provider :virtualbox do |vb|
			for i in (0..(disk_count-1))
				unless File.exist?(disk[i])
					vb.customize ["createhd",'--filename',disk[i],'--size',10240]
				end
				vb.customize ['storageattach', :id,'--storagectl','SATAController', '--port',i+1,'--device',0,'--type','hdd','--medium',disk[i]]
			end
			vb.customize ["modifyvm", :id,"--memory","1024"]
			vb.cpus = 1
		end
	end
end

 

ここで、ストレージデバイスをdb1, db2に対し3つずつ作っているが、

これは論理ボリュームを作るときに1つにまとめているので、

ストレージも1つでいいかも。

なお、これらのストレージはmysqlデータ領域を格納するために使う。

 

Vagrantfileを作ったら、そのフォルダで下記を実行する。

vagrant up

コンソールを2つ立ち上げ、それぞれで下記を実行。

vagrant ssh db1

vagrant ssh db2

これで、各コンソール画面からそれぞれの仮想マシンを動かせるようになった。

ここから先は、各コンソールで作業をする。

 

 

1. mysqlデータ領域の作成

とりあえず、下記コマンドにより各VMで物理ボリュームを作成しておく。

primaryパーティションを選択して、他は全てデフォルト値を採用。

root@db1:~# fdisk /dev/sdb

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): w
The partition table has been altered!

 

同様に、/dev/sdc /dev/sdd にも領域を作成する。

root@db1:~# fdisk /dev/sdc

root@db1:~# fdisk /dev/sdd

 

これらのパーティションを統合して、物理ボリュームを作っておく。

root@db1:~# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

Physical volume “/dev/sdb1” successfully created
Physical volume “/dev/sdc1” successfully created
Physical volume “/dev/sdd1” successfully created

root@db1:~# vgcreate db1_vg /dev/sdb1 /dev/sdc1 /dev/sdd1

Volume group “db1_vg” successfully created

root@db1:~# lvcreate --name mysql-drbd --size 20G db1_vg

Logical volume “mysql-drbd” created

 

以上を、db2でも同様に実施しておく。

root@db2:~# fdisk /dev/sdb

root@db2:~# fdisk /dev/sdc

root@db2:~# fdisk /dev/sdd

root@db2:~# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

root@db2:~# vgcreate db2_vg /dev/sdb1 /dev/sdc1 /dev/sdd1

root@db2:~# lvcreate --name mysql-drbd --size 20G db2_vg

 

そのあとに念のため、ボリュームグループがうまく作られているか確認しておく。

root@db1:~# lvs

LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
mysql-drbd db1_vg -wi-a—- 20.00g

root@db2:~# lvs

LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
mysql-drbd db2_vg -wi-a—- 20.00g

 

これでOK!

ついでに、この後の作業のためにhostsを書き換えておく。

root@db1:~# vi /etc/hosts

root@db1:~# cat /etc/hosts

127.0.0.1 localhost
127.0.1.1 db1 db1
192.168.56.31 db1
192.168.56.32 db2

root@db2:~# vi /etc/hosts

root@db2:~# cat /etc/hosts

127.0.0.1 localhost
127.0.1.1 db2 db2
192.168.56.31 db1
192.168.56.32 db2

 

 

2. DRBDのセットアップ

まずはDRBDをインストール。

root@db1:~# sudo apt-get install drbd8-utils

root@db2:~# sudo apt-get install drbd8-utils

root@db1:~# vi /etc/drbd.conf

resource mysqldrbd {
        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";
        }

        startup {
           degr-wfc-timeout 120; # 2 minutes.
           outdated-wfc-timeout 2; #2 seconds
        }

        disk {
           on-io-error detach;
        }

        net {
           cram-hmac-alg "sha1";
           shared-secret "mysqldrbd";
           after-sb-0pri disconnect;
           after-sb-1pri disconnect;
           after-sb-2pri disconnect;
           rr-conflict disconnect;
        }

        syncer {
           rate 10M;
           al-extents 257;
           on-no-data-accessible io-error;
        }

        on db1{
           device      /dev/drbd0;
           disk        /dev/db1_vg/mysql-drbd;
           address     192.168.56.31:7788;
           meta-disk   internal;
        }

        on db2{
           device      /dev/drbd0;
           disk        /dev/db2_vg/mysql-drbd;
           address     192.168.56.32:7788;
           meta-disk   internal;
        }
}

 

このファイルを、db2にもコピーしておく。

なおここから先は、db1, db2間でファイルをやり取りすることが出てくるので、

db1のssh公開鍵をdb2に登録しておくと便利。

root@db1:~# ssh-keygen

root@db1:~# cat ~/.ssh/id_rsa.pub

ssh-rsa *******************************略********** root@db1

これをdb2のauthorized_keysに貼り付ける。

root@db2:~# vi ~/.ssh/authorized_keys

ssh-rsa *******************************略********** root@db1

これで準備OK。drbd.confをdb2にコピーできる。

root@db1:~# scp /etc/drbd.conf root@db2:/etc/

 

次に、drbdモジュールをロードしておく必要があるので、下記を実行しておく。

root@db1:~# apt-get install linux-image-extra-virtual

root@db1:~# depmod -a

root@db1:~# reboot

 

再起動後、もう一度db1に接続して、

root@db1:~# modprobe drbd

 

同様に、db2についても実施しておく。

root@db2:~# apt-get install linux-image-extra-virtual

root@db2:~# depmod -a

root@db2:~# reboot

root@db2:~# modprobe drbd

 

では、drbd用のmetadataを作成する。何度かEnterを入力する必要あり。

root@db1:~# drbdadm create-md mysqldrbd

success

 

root@db2:~# drbdadm create-md mysqldrbd

success

 

続いて、drbdを起動。

root@db1:~# service drbd start

…… [ OK ]

root@db2:~# service drbd start

…… [ OK ]

 

db1をプライマリ、db2をセカンダリとしておく。

root@db1:~# drbdadm -- --overwrite-data-of-peer primary all

root@db2:~# drbdadm secondary mysqldrbd

 

これで、2つのサーバ間で同期が開始する。しばらく待って、下記の状態になればOK。

root@db1:~# service drbd status

drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
srcversion: F97798065516C94BE0F27DC
m:res cs ro ds p mounted fstype
0:mysqldrbd Connected Primary/Secondary UpToDate/UpToDate C

root@db2:~# service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
srcversion: F97798065516C94BE0F27DC
m:res cs ro ds p mounted fstype
0:mysqldrbd Connected Secondary/Primary UpToDate/UpToDate C

 

ここまでで、drbdにより2つのサーバ間でデータが同期されたボリュームが作られる。

ここで、本当に同期されているのかを確認してみる。

/mnt/mysql をmysql用のデータ領域にするということで、下記の通りフォーマットする。

root@db1:~# mkfs.ext4 /dev/drbd0

root@db1:~# mkdir /mnt/mysql

root@db1:~# mount /dev/drbd0 /mnt/mysql/

root@db1:~# vi /mnt/mysql/test
I’m from db1

 

このファイルが、db2にも同期されているのか?下記の通りになっていればOK!

root@db1:~# umount /mnt/mysql

root@db1:~# drbdadm secondary mysqldrbd

root@db2:~# drbdadm primary mysqldrbd

root@db2:~# mkdir /mnt/mysql

root@db2:~# mount /dev/drbd0 /mnt/mysql/

root@db2:~# cat /mnt/mysql/test
I’m from db1

 

3. Corosync & Pacemaker のセットアップ

続いて、drbdやmysqlを監視するCorosyncとPacemakerをインストールする。

Corosync用の鍵も、ここで共通化しておく。

root@db1:~# apt-get install corosync pacemaker

root@db2:~# apt-get install corosync pacemaker

root@db1:~# corosync-keygen

root@db1:~# scp /etc/corosync/authkey root@db2:/etc/corosync/

 

Corosyncの設定ファイルを作成。

root@db1:~# vi /etc/corosync/corosync.conf

totem {
	version: 2

	# How long before declaring a token lost (ms)
	token: 3000

	# How many token retransmits before forming a new configuration
	token_retransmits_before_loss_const: 10

	# How long to wait for join messages in the membership protocol (ms)
	join: 60

	# How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
	consensus: 3600

	# Turn off the virtual synchrony filter
	vsftype: none

	# Number of messages that may be sent by one processor on receipt of the token
	max_messages: 20

	# Limit generated nodeids to 31-bits (positive signed integers)
	clear_node_high_bit: yes

	# Disable encryption
 	#secauth: off
 	secauth: on

	# How many threads to use for encryption/decryption
 	threads: 0

	# Optionally assign a fixed node id (integer)
	# nodeid: 1234

	# This specifies the mode of redundant ring, which may be none, active, or passive.
 	rrp_mode: none

 	interface {
		# The following values need to be set based on your environment
		ringnumber: 0
		bindnetaddr: 192.168.56.0
		#bindnetaddr: 127.0.0.1
		mcastaddr: 226.94.1.1
		mcastport: 5405
	}
}

amf {
	mode: disabled
}

quorum {
	# Quorum for the Pacemaker Cluster Resource Manager
	provider: corosync_votequorum
	expected_votes: 1
}

aisexec {
	user:   root
	group:  root
}

logging {
	fileline: off
	to_stderr: yes
	to_logfile: no
	to_syslog: yes
	syslog_facility: daemon
	debug: off
	timestamp: on
	logger_subsys {
		subsys: AMF
		debug: off
		tags: enter|leave|trace1|trace2|trace3|trace4|trace6
	}
}

 

これもdb2へコピー。

root@db1:~# scp /etc/corosync/corosync.conf root@db2:/etc/corosync/

起動用に、下記ファイルも変更。具体的には、START=no -> yesに変更する。

root@db1:~# vi /etc/default/corosync

# start corosync at boot [yes|no]
START=yes

root@db2:~# vi /etc/default/corosync

# start corosync at boot [yes|no]
START=yes

 

Pacemaker用のファイルも作成。

root@db1:~# vi /etc/corosync/service.d/pcmk

service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 1
} 

root@db1:~# scp /etc/corosync/service.d/pcmk root@db2:/etc/corosync/service.d/

 

では、CorosyncとPacemakerを再起動して、状態を確認する。

root@db1:~# service corosync restart; service pacemaker restart

root@db2:~# service corosync restart; service pacemaker restart

root@db1:~# crm status

Last updated: Wed May 6 07:15:21 2015
Last change: Wed May 6 07:06:33 2015 via crmd on db1
Stack: corosync
Current DC: db1 (167772185) – partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured

Online: [ db1 db2 ]

 

root@db2:/etc/corosync# crm status

Last updated: Wed May 6 07:19:55 2015
Last change: Wed May 6 07:06:33 2015 via crmd on db1
Stack: corosync
Current DC: db1 (167772185) – partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured

Online: [ db1 db2 ]

 

上記のようにならない場合は、CorosyncとPacemakerをもう一度再起動してみる。

その場合、db1, db2の両方でなるべく同時に再起動するべき。

それでもダメなら、サーバ自体の再起動なども試してみる。

 

4. MySQLのセットアップ

最後に、メインリソースとなるMySQLをセットアップする。

このとき、AppArmorからmysqlを除外しておく必要がある。手順は下記。

root@db1:~# apt-get install mysql-server-5.6

root@db1:~# apt-get install apparmor-utils

root@db1:~# aa-disable /etc/apparmor.d/usr.sbin.mysqld

Disabling /etc/apparmor.d/usr.sbin.mysqld.

 

root@db2:~# apt-get install mysql-server-5.6

root@db2:~# apt-get install apparmor-utils

root@db2:~# aa-disable /etc/apparmor.d/usr.sbin.mysqld

Disabling /etc/apparmor.d/usr.sbin.mysqld.

 

ひとまず、現在のmy.cnfを退避。

root@db1:~# cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf

 

続いて、権限の調整。

root@db1:~# chown -R mysql:mysql /mnt/mysql/

root@db2:~# chown -R mysql:mysql /mnt/mysql/

 

drbdのマウント領域に、mysql用のデータ領域を作成。

root@db1:/mnt/mysql# mount /dev/drbd0 /mnt/mysql/

root@db1:~# mkdir /mnt/mysql/data

root@db1:~# chown -R mysql:mysql /mnt/mysql/data/

root@db1:~# chmod 700 /mnt/mysql/data

root@db1:/mnt/mysql# mysql_install_db -no-defaults --datadir=/mnt/mysql/data --user=mysql

ここでエラーが出てしまったら、AppArmorの設定をもう一度見なおしてみる。

 

drbdとmysqlは、Corosyncにより起動される必要があるので、serviceコマンドから一度停止しておく。

root@db1:~# service drbd stop

root@db2:~# service drbd stop

root@db2:~# service mysql stop

root@db1:~# service mysql stop

 

Corosyncの設定を変更するため、下記スクリプトを作成。

root@db1:~# vi crc.sh

#!/usr/bin/env bash
crm configure rsc_defaults resource-stickiness=100
crm configure property stonith-enabled=false
crm configure primitive p_drbd_mysqldrbd ocf:linbit:drbd params drbd_resource="mysqldrbd" op monitor interval="15s"
crm configure ms ms_drbd_mysqldrbd p_drbd_mysqldrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
crm configure primitive p_fs_mysqldrbd ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mnt/mysql" fstype="ext4"
crm configure primitive p_ip_mysqldrbd ocf:heartbeat:IPaddr2 params ip="192.168.56.33" cidr_netmask="24" nic="eth1"
crm configure primitive p_mysqldrbd ocf:heartbeat:mysql params binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf"  datadir="/mnt/mysql/data" pid="/var/mysql/mysqld/mysql.pid" socket="/var/run/mysqld/mysql.sock" user="mysql" group="mysql" additional_parameters="--bind-address=192.168.56.33 --user=mysql" op start timeout=120s op stop timeout=120s op monitor interval=20s timeout=30s
crm configure group g_mysqldrbd p_fs_mysqldrbd p_ip_mysqldrbd p_mysqldrbd
crm configure colocation c_mysql_on_drbd inf: g_mysqldrbd ms_drbd_mysqldrbd:Master
crm configure order o_drbd_before_mysql inf: ms_drbd_mysqldrbd:promote g_mysqldrbd:start

root@db1:~# bash crc.sh

WARNING: p_drbd_mysqldrbd: default timeout 20s for start is smaller than the advised 240
WARNING: p_drbd_mysqldrbd: default timeout 20s for stop is smaller than the advised 100
WARNING: p_drbd_mysqldrbd: action monitor not advertised in meta-data, it may not be supported by the RA
WARNING: p_fs_mysqldrbd: default timeout 20s for start is smaller than the advised 60
WARNING: p_fs_mysqldrbd: default timeout 20s for stop is smaller than the advised 60

root@db1:~# service corosync restart; service pacemaker restart

root@db2:~# service corosync restart; service pacemaker restart

 

これがうまく設定されれば、CorosyncによりVirtual IPが作られる。下記で応答を確認。

root@db1:~# ping 192.168.56.33

PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data.
64 bytes from 192.168.56.33: icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from 192.168.56.33: icmp_seq=2 ttl=64 time=0.040 ms

応答がなければ、設定に誤りがある可能性がある。

設定をもう一度やり直すには、下記コマンドを実行後、再度crc.shを編集して実行する。

root@db1:~# crm configure erase

root@db1:~# vi crc.sh

root@db1:~# bash crc.sh

 

root@db1:~# crm status

Last updated: Fri Jun 1 08:37:03 2016
Last change: Fri Jun 1 08:33:52 2016 via cibadmin on db1
Stack: corosync
Current DC: db1 (1084766239) – partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
5 Resources configured

Online: [db1 db2 ]

Master/Slave Set: ms_drbd_mysqldrbd [p_drbd_mysqldrbd]
Masters: [ db1 ]
Slaves: [ db2 ]
Resource Group: g_mysqldrbd
p_fs_mysqldrbd (ocf::heartbeat:Filesystem): Started db1
p_ip_mysqldrbd (ocf::heartbeat:IPaddr2): Started db1
p_mysqldrbd (ocf::heartbeat:mysql): Started db1

 

ステータスがOKなら、続いて設定を反映。

root@db1:~# vi crc2.sh

crm configure primitive p_ping ocf:pacemaker:ping params name="ping" multiplier="1000" host_list="192.168.56.1" op monitor interval="15s" timeout="60s" start timeout="60s"
crm configure clone cl_ping p_ping meta interleave="true"
crm configure location l_drbd_master_on_ping ms_drbd_mysqldrbd rule role="Master" -inf: not_defined ping or ping number:lte 0

root@db1:~# bash crc2.sh

WARNING: p_ping: default timeout 20s for start is smaller than the advised 60

root@db1:~# service corosync restart; service pacemaker restart

root@db2:~# service corosync restart; service pacemaker restart

 

もう一度、ステータスを確認。なお、どちらがMasterになるかは、Corosyncの起動順で決まる様子。

root@db1:~# crm status

Online: [ db1 db2 ]

Master/Slave Set: ms_drbd_mysqldrbd [p_drbd_mysqldrbd]
Masters: [ db1 ]
Slaves: [ db2 ]
Resource Group: g_mysqldrbd
p_fs_mysqldrbd (ocf::heartbeat:Filesystem): Started db1
p_ip_mysqldrbd (ocf::heartbeat:IPaddr2): Started db1
p_mysqldrbd (ocf::heartbeat:mysql): Started db1
Clone Set: cl_ping [p_ping]
Started: [ db1 db2 ]

 

mysqlとdrbdはCorosyncから起動するので、システムブート時に勝手に起動しないよう調整。

root@db1:~# vi /etc/init/mysql.conf

description “MySQL 5.6 Server”
author “Mario Limonciello

start on runlevel [345]
stop on starting rc RUNLEVEL=[0216]

root@db1:~# update-rc.d -f drbd disable

update-rc.d: warning: start runlevel arguments (none) do not match drbd Default-Start values (2 3 4 5)
update-rc.d: warning: stop runlevel arguments (none) do not match drbd Default-Stop values (0 1 6)
Disabling system startup links for /etc/init.d/drbd …
Removing any system startup links for /etc/init.d/drbd …
/etc/rc0.d/K20drbd
/etc/rc1.d/K20drbd
/etc/rc2.d/S20drbd
/etc/rc3.d/S20drbd
/etc/rc4.d/S20drbd
/etc/rc5.d/S20drbd
/etc/rc6.d/K20drbd
Adding system startup for /etc/init.d/drbd …
/etc/rc0.d/K20drbd -> ../init.d/drbd
/etc/rc1.d/K20drbd -> ../init.d/drbd
/etc/rc6.d/K20drbd -> ../init.d/drbd
/etc/rc2.d/K80drbd -> ../init.d/drbd
/etc/rc3.d/K80drbd -> ../init.d/drbd
/etc/rc4.d/K80drbd -> ../init.d/drbd
/etc/rc5.d/K80drbd -> ../init.d/drbd

root@db2:~# vi /etc/init/mysql.conf

description “MySQL 5.6 Server”
author “Mario Limonciello

start on runlevel [345]
stop on starting rc RUNLEVEL=[0216]

root@db2:~# update-rc.d -f drbd disable

update-rc.d: warning: start runlevel arguments (none) do not match drbd Default-Start values (2 3 4 5)
update-rc.d: warning: stop runlevel arguments (none) do not match drbd Default-Stop values (0 1 6)
Disabling system startup links for /etc/init.d/drbd …
Removing any system startup links for /etc/init.d/drbd …
/etc/rc0.d/K20drbd
/etc/rc1.d/K20drbd
/etc/rc2.d/S20drbd
/etc/rc3.d/S20drbd
/etc/rc4.d/S20drbd
/etc/rc5.d/S20drbd
/etc/rc6.d/K20drbd
Adding system startup for /etc/init.d/drbd …
/etc/rc0.d/K20drbd -> ../init.d/drbd
/etc/rc1.d/K20drbd -> ../init.d/drbd
/etc/rc6.d/K20drbd -> ../init.d/drbd
/etc/rc2.d/K80drbd -> ../init.d/drbd
/etc/rc3.d/K80drbd -> ../init.d/drbd
/etc/rc4.d/K80drbd -> ../init.d/drbd
/etc/rc5.d/K80drbd -> ../init.d/drbd

 

mysqlにログインするユーザーを作成する。今回は、192.168.56.0/24からログイン可能としたい。

root@db1:~# mysqld_safe --skip-grant-tables --datadir=/mnt/mysql/data&

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

mysql> insert into user(user,host,password)values(‘root’,”192.168.56.%”,’test’);
Query OK, 1 row affected, 3 warnings (0.01 sec)

mysql> update user set password=password(‘yourpass’) where user=’root’ and host=”192.168.56.%”;

mysql> exit;

 

以上で、ようやくセットアップが終了!

 

 

5. 動作確認

適当にデータをinsertして、Master側をダウンさせた時にSlave側が自動的に立ち上がり、

insertしたデータがSlave側に反映されているのかを見ておきたい。

root@db1:~# mysql -u root -h 192.168.56.33 -p

Enter password:

mysql> use test;

mysql> create table test(id int(11));

mysql> insert into test (id) values (1);

mysql> insert into test (id) values (2);

mysql> select * from test;
+——+
| id |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.00 sec)

mysql> exit;

 

では、db1をSlaveに変更してみる。

root@db1:~# crm node standby db1

root@db1:~# crm node online db1

 

これで、db2側でmysqlが起動し、データ領域もマウントされているはず。

root@db2:~# mysql -u root -h 192.168.56.33 -p

Enter password:

mysql> use test;

mysql> select * from test;
+——+
| id |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.00 sec)

 

データが、db2に正常に移行されている!

 

 

長かったが、以上でHA構成のMySQLサーバが構築できた。

Masterサーバのトラブル時には、自動的にSlaveサーバが立ち上がり、サービスを継続できる。

ただ、切り替わりには5〜10秒程度要するので、

どうしてもその影響が出てしまう点は、頭に入れておく必要がある。

 

なかなか面倒だけれど、構築する価値のある構成だと思う。

Date

カンボジアでITエンジニアをやっています。

Leave a Reply

Your email address will not be published. Required fields are marked *