====== 51 Heartbeat + Pacemaker + galera(3 server) ====== ^ host ^ IP ^ |galera-1|10.0.0.11| |galera-2|10.0.0.12| |galera-3|10.0.0.13| | | vip: 10.0.0.10 +----------------+-----------------+ | | | | eth0:10.0.0.11 | eth0:10.0.0.12 | eth0:10.0.0.13 +-----+-----+ +-----+-----+ +-----+-----+ | galera-1 | | galera-2 | | galera-3 | +-----+-----+ +-----+-----+ +-----+-----+ ===== ①galeraインストール ===== [[01_linux:11_データベース:01_mysql:01_galera]] == Pacemakerを利用する場合、自動起動はOffにしておく == # chkconfig mysql off # chkconfig --list | grep mysql mysql 0:off 1:off 2:off 3:off 4:off 5:off 6:off ===== ②Heartbeat + Pacemaker インストール===== [[http://linux-ha.sourceforge.jp/wp/dl/packages]] から最新のパッケージを持ってくる。 今回は [[http://sourceforge.jp/projects/linux-ha/downloads/61791/pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz/|pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz]] を利用する。 # tar zxvf pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz # yum remove cluster-glue-libs # cd pacemaker-1.0.13-2.1.el6.x86_64.repo/rpm/ # yum localinstall pacemaker-1.0.13-2.el6.x86_64.rpm \ pacemaker-libs-1.0.13-2.el6.x86_64.rpm \ pacemaker-libs-devel-1.0.13-2.el6.x86_64.rpm \ cluster-glue-libs-devel-1.0.11-1.el6.x86_64.rpm \ corosynclib-devel-1.4.6-1.el6.x86_64.rpm \ heartbeat-3.0.5-1.1.el6.x86_64.rpm \ heartbeat-devel-3.0.5-1.1.el6.x86_64.rpm \ heartbeat-libs-3.0.5-1.1.el6.x86_64.rpm \ cluster-glue-libs-1.0.11-1.el6.x86_64.rpm \ corosynclib-1.4.6-1.el6.x86_64.rpm \ corosync-1.4.6-1.el6.x86_64.rpm \ cluster-glue-1.0.11-1.el6.x86_64.rpm \ cluster-glue-libs-1.0.11-1.el6.x86_64.rpm 別なやり方 [[http://mokky14.hatenablog.com/entry/2014/04/13/210821]] # cd /tmp # tar zxvf pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz # cd /tmp/pacemaker-1.0.13-2.1.el6.x86_64.repo yum -c pacemaker.repo install pacemaker-1.0.13 heartbeat-3.0.5 pm_crmgen pm_diskd pm_logconv-hb pm_extras ==== 1.Heartbeat設定 ==== galera_1 # cat /etc/ha.d/authkeys auth 1 1 sha1 secret # cat /etc/ha.d/ha.cf pacemaker on logfile /var/log/ha-log logfacility local0 debug 0 udpport 694 keepalive 2 warntime 10 deadtime 20 initdead 60 autojoin none #bcast eth0 mcast bond0 225.0.0.1 694 1 0 #ucast bond0 10.0.0.11 #ucast bond0 10.0.0.12 #ucast bond0 10.0.0.13 auto_failback off node galera-1 node galera-2 node galera-3 [[http://www.drbd.jp/users-guide/s-heartbeat-config.html|autojoin について参考サイト]] == 自動起動はOffにしておく == # chkconfig heartbeat off # chkconfig --list | grep heart heartbeat 0:off 1:off 2:off 3:off 4:off 5:off 6:off ==== 2.Heartbeat起動 ==== # /etc/init.d/heartbeat start # ps auxw| grep heart root 56081 0.2 0.0 50104 7152 ? SLs 08:51 0:00 heartbeat: master control process root 56086 0.0 0.0 49944 6992 ? SL 08:51 0:00 heartbeat: FIFO reader root 56087 0.0 0.0 49940 6988 ? SL 08:51 0:00 heartbeat: write: mcast bond0 root 56088 0.0 0.0 49940 6988 ? SL 08:51 0:00 heartbeat: read: mcast bond0 496 56091 0.0 0.0 36788 2264 ? S 08:51 0:00 /usr/lib64/heartbeat/ccm 496 56092 1.3 0.0 74132 5900 ? S 08:51 0:00 /usr/lib64/heartbeat/cib root 56093 0.0 0.0 77676 2500 ? S 08:51 0:00 /usr/lib64/heartbeat/lrmd -r root 56094 0.0 0.0 69652 8288 ? SL 08:51 0:00 /usr/lib64/heartbeat/stonithd 496 56095 0.0 0.0 75940 3216 ? S 08:51 0:00 /usr/lib64/heartbeat/attrd 496 56096 0.1 0.0 81520 4056 ? S 08:51 0:00 /usr/lib64/heartbeat/crmd root 56196 0.6 0.0 9724 1852 ? S 08:51 0:00 /bin/sh /usr/lib/ocf/resource.d//heartbeat/mysql start root 56977 0.0 0.0 103240 892 pts/1 S+ 08:52 0:00 grep heart == ※起動しない場合 == bugでHA_BINのパスが間違っているようなので、直接書いてあげる [[https://bugzilla.redhat.com/show_bug.cgi?id=1028127]] # vi /etc/init.d/heartbeat 141 HA_BIN=/usr/lib64/heartbeat 142 [ -x $HA_BIN/heartbeat ] || exit 0 ==== 3.Pacemakerの設定を入れる ==== Pacemakerはcrmで設定を行います。 == crm設定ファイル作成 == # echo << EOM > /root/galera.crm ## クラスタの全体設定 # stonith-enabled="false" : 制御不能なサーバを強制的にOFFにしない # property stonith-enabled="false" \ no-quorum-policy="ignore" ## resource-stickiness="INFINITY" :自動ファイルバックしない # 1回failしたらフェイルオーバー rsc_defaults resource-stickiness="INFINITY" \ migration-threshold="1" ## VIP定義 primitive p_ip_mysql_galera ocf:heartbeat:IPaddr2 \ params nic="bond0" iflabel="galera" \ ip="10.0.0.10" cidr_netmask="16" nic="bond0" ## MYSQLリソースを定義 primitive p_mysql ocf:heartbeat:mysql \ params config="/etc/my.cnf" \ pid="/var/run/mysqld/mysqld.pid" \ socket="/var/lib/mysql/mysql.sock" \ binary="/usr/bin/mysqld_safe" \ op monitor interval="20s" timeout="30s" \ op start interval="0" timeout="120s" \ op stop interval="0" timeout="120s" ## MYSQLリソースをクローン化 # 最大3ノードで1つのプロセスが起動、 # target-role : リソースをstartした時の動作 clone cl_mysql p_mysql \ meta interleave="true" clone-max="3" clone-node-max="1" target-role="Started" ## 重み付け、点数が高い方が優先される # galera-1が最優先 location rsc_location-1 p_ip_mysql_galera \ rule 300: #uname eq galera-1 \ rule 200: #uname eq galera-2 \ rule 100: #uname eq galera-3 ## 同居制約 MySQLと、VIPは同じところで起動 colocation c_ip_galera_on_mysql \ inf: p_ip_mysql_galera cl_mysql ## 起動順序 MySQLの方を先に起動させる order c_galera_order 0: cl_mysql p_ip_mysql_galera EOM == crm設定ファイルを読み込む == # crm configure load update /root/galera.crm [[http://www.oss-d.net/drbd-pacemaker-corosync|こちら]] crm設定について詳しく記述してくれてます。 ===== ③.テスト ===== == crm_monコマンド == リアルタイムで状態が見れる。 # crm_mon ============ Last updated: Thu Sep 11 09:59:02 2014 Stack: Heartbeat Current DC: galera-1 (61383def-55fa-472c-a75a-f8655ea458ea) - partition with quorum Version: 1.0.13-a83fae5 3 Nodes configured, unknown expected votes 2 Resources configured. ============ Online: [ galera-1 galera-2 galera-3 ] p_ip_mysql_galera (ocf::heartbeat:IPaddr2): Started galera-1 Clone Set: cl_mysql Started: [ galera-1 galera-2 galera-3 ] ==== 1.MySQL停止 ==== == galera-1のMySQLを停止すると、VIPがgalera-2に移動する事を確認 == Online: [ galera-1 galera-2 galera-3 ] p_ip_mysql_galera (ocf::heartbeat:IPaddr2): Started galera-2 Clone Set: cl_mysql Started: [ galera-2 galera-3 ] Stopped: [ p_mysql:0 ] Failed actions: p_mysql:0_monitor_20000 (node=galera-1, call=30, rc=7, status=complete): not running == 下記でリソースをクリーンアップしてあげると、MySQLが元に戻ります。 == # crm resource cleanup cl_mysql == galera-1のMySQLが起動し、VIPがgalera-2のままファイルバックしない事を確認 == Online: [ galera-1 galera-2 galera-3 ] p_ip_mysql_galera (ocf::heartbeat:IPaddr2): Started galera-2 Clone Set: cl_mysql Started: [ galera-1 galera-2 galera-3 ] ==== 2.ノード停止 ==== == 現在この状態 == Online: [ galera-1 galera-2 galera-3 ] p_ip_mysql_galera (ocf::heartbeat:IPaddr2): Started galera-2 Clone Set: cl_mysql Started: [ galera-1 galera-2 galera-3 ] == galera-2をシャットダウン == galera-2がOFFLINEとなり、VIPがgalera-1に戻る事を確認 Online: [ galera-1 galera-3 ] OFFLINE: [ galera-2 ] p_ip_mysql_galera (ocf::heartbeat:IPaddr2): Started galera-1 Clone Set: cl_mysql Started: [ galera-1 galera-3 ] Stopped: [ p_mysql:2 ] {{tag>pacemaker heartbeat}}