mySQLレプリケーションとネットワークプロトコルCARPに基づくフェールオーバーシステム

タスクも同様です。

2つのサーバーがあります:1-マスター、2-スレーブ。 フォールトトレラントシステムを構成する必要があります。このシステムは、1番目のサーバーやデータベースが落ちた場合に、最小のダウンタイムで2番目に自動的に切り替わります。 マスターの回復後、彼はスレーブになり、スレーブになります-マスター。 OS FreeBSD。



「魚」について少し。



手始めに、CARPに対処しましょう

CARP CARP (英語のCommon Address Redundancy Protocol)は、ネットワークセグメント内の複数のホストが単一のIPアドレスを使用することを主なタスクとするネットワークプロトコルです。 // ウィキペディアから取得



## 192.168.10.1-マスター1

## 192.168.10.2-スレーブ2



1. carpを構成に追加し、カーネルを再構築します。



master1#ee / usr / src / sys / i386 / conf / MYKERNEL

device carp#共通アドレス冗長プロトコル

master1#cd / usr / src /

master1#make biuldkernel KERNCONF = MYKERNEL

master1#makekernel KERNCONF = MYKERNELを作成します



// 2番目のサーバーでも同じことを行います。



2.次に、次のエントリをMaster1の/etc/rc.confに追加します。



master1#ee /etc/rc.conf



## CARPを構成する

clone_interfaces = "carp0"

ifconfig_carp0 = "vhid 1 advskew 100 pass seCret 192.168.10.3/24"



#vhidは、インターフェースが機能するグループの番号です。

#passは、グループ内の認証用のパスワードです。

#advskewは優先度が低く、重要度が低いほど重要です。

#192.168.10.3 / 24-これは一般的なIPです。



2番目のサーバー(Slave2という名前にします)で、/ etc / rc.confに次のエントリを追加します。



slave2#ee /etc/rc.conf



## CARPを構成する

clone_interfaces = "carp0"

ifconfig_carp0 = "vhid 1 advskew 200 pass seCret 192.168.10.3/24"



3.次に、両方のマシンでsysctlオプションを設定します



master1#sysctl net.inet.carp.preempt = 1

slave2#sysctl net.inet.carp.preempt = 1



/etc/sysctl.confの両方のサーバーでこのオプションを追加します。

net.inet.carp.preempt = 1



#システムが正常にシャットダウンすると、カープインターフェイスに切断信号を送信します。



4.サーバーを再起動します。 再起動後

マスターシステム上のifconfig carp0:



carp0:フラグ= 49メトリック0 mtu 1500

inet 192.168.10.3ネットマスク0xffff0000

コイ:マスターvhid 1 advbase 1 advskew 100



スレーブシステムでifconfig carp0を作成します。



carp0:フラグ= 49メトリック0 mtu 1500

inet 192.168.10.3ネットマスク0xffff0000

コイ:バックアップvhid 1 advbase 1 advskew 200



「魚」が完成したら、レプリケーションのセットアップに移りましょう。



レプリケーション構成



複製スキーム

mySQLレプリケーションの詳細についてはここで説明しているので、すぐに構成に移りましょう。



両方のサーバーで、ポートからmySQLをインストールします。



Master1#cd / usr / ports / databases / mysql55-server

Master1#インストールをクリーンにし、再ハッシュする



例から設定をコピーします

Master1#cp /usr/local/share/mysql/my-huge.cnf /etc/my.cnf



1. Wizard1でconfig /etc/my.cnfを開き、追加します

[mysqld]セクションへ



##マスター1

auto_increment_increment = 2

auto_increment_offset = 1

サーバーID = 1

relay-log = mysql-relay-bin

log_slave_updates = 1

skip_slave_start

relay-log-space-limit = 1G

log-bin = mysql-bin



2.スレーブ2で、構成/etc/my.cnfに追加します



##マスター2

auto_increment_increment = 2

auto_increment_offset = 2

log-bin = mysql-bin

サーバーID = 2

relay-log = mysql-relay-bin

log_slave_updates = 1

skip_slave_start

relay-log-space-limit = 1G



//もちろん、設定を使用してmySQLの作業を最適化するには、「ファイル」を使用する必要があります。 誰が非常に怠け者であるか、設定の複雑さを知りたくない場合は、デフォルトのままにしておくことができます。 しかし、設定にはPercona Serverの便利なtools.percona.comサービスを使用することをお勧めします。ところで、mySQL-serverの代わりにperconを使用できます。



3. mysqlを起動します

/usr/local/etc/rc.d/mysql-server start

mysqlを起動しています。



3. Master1でmysqlを入力します。

mysql @ master1>マスターステータスを表示。

+ ------------------ + ---------- + -------------- + ---- -------------- +

| ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB |

+ ------------------ + ---------- + -------------- + ---- -------------- +

| mysql-bin.000001 | 499 | | |

+ ------------------ + ---------- + -------------- + ---- -------------- +

セット内の1行(0.00秒)



4. Slave2でmysqlと入力します。

mysql @ slave2>マスターステータスを表示。

+ ------------------ + ---------- + -------------- + ---- -------------- +

| ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB |

+ ------------------ + ---------- + -------------- + ---- -------------- +

| mysql-bin.000002 | 499 | | |

+ ------------------ + ---------- + -------------- + ---- -------------- +

セット内の1行(0.00秒)



5. master1でmysqlを入力し、ユーザーを追加します。



mysql @ master1> GRANT REPLICATION SLAVE ON *。* to repl@192.168.10.1 IDENTIFIED BY 'replpass';

mysql @ master1> GRANT REPLICATION SLAVE ON *。* REPL@192.168.10.2 TO 'replpass'で識別;

mysql @ master1>フラッシュ特権;



6.同様にslave2でも:



mysql @ slave2> GRANT REPLICATION SLAVE ON *。* to repl@192.168.10.1 IDENTIFIED BY 'replpass';

mysql @ slave2> GRANT REPLICATION SLAVE ON *。* to repl@192.168.10.2 IDENTIFIED BY 'replpass';

mysql @ slave2>フラッシュ特権;



7. slave2で:

mysql @ slave2> MASTER_HOST = "192.168.10.1"、MASTER_USER = "repl"、MASTER_PASSWORD = "replpass"、MASTER_LOG_FILE = "mysql-bin.000001"、MASTER_LOG_POS = 499に変更します。



mysql @ slave2>スレーブを開始します。



8. Master1で:

mysql @ master1> MASTERをMASTER_HOST = "192.168.10.2"、MASTER_USER = "repl"、MASTER_PASSWORD = "replpass"、MASTER_LOG_FILE = "mysql-bin.000002"、MASTER_LOG_POS = 499に変更します。



mysql @ master1>スレーブを開始します。



9.両方のマスターで以下を実行します。

mysql @ master1>スレーブの状態を表示\ G



必要な情報はSlave_IO_RunningとSlave_SQL_Runningです



Slave_IO_Running: はい

Slave_SQL_Running: はい



やったー マスター-マスター複製の準備ができました。



スクリプト



現時点では、束はほぼ準備ができており、残りの1つの瞬間があります。

Master1がネットワーク上に落ちた場合、パッシブスレーブ2はCARP手段を使用してアクティブマスターになります。 ここで、データベースが落ちた場合に、パッシブスレーブ->アクティブマスターで行う「魚」を教える必要があります。



簡単なスクリプトを書きましょう。



スレーブ2#cd / tmp

スレーブ2#touch switch_script.sh && chmod + x switch_script.sh

Slave2#ee switch_script.sh



#!/bin/sh HOST1='192.168.10.1'; # master on server1 HOST2='192.168.10.2'; # slave on server2 GENERAL='192.168.10.3'; # General IP-adress MYSQL='/usr/local/bin/mysql' # Create infinite loop x=1 while [ $x -le 5 ]; do ${MYSQL} -s -h${HOST1} -urepl -preplpass --connect-timeout=10 -e 'SELECT VERSION()' > /dev/null out=$? if [ $out -eq 0 ]; then echo "server ${HOST1} is OK" sleep 60 # delay 1 min else /usr/local/bin/mysqladmin stop-slave /sbin/ifconfig carp0 ${GENERAL} vhid 1 advskew 50 echo "FAILED, cannot connect to mySQL" echo "This host ${HOST2} became a MASTER " exit 0 fi done
      
      







スクリプトを実行します。

スレーブ2#./switch_script.sh



まとめると。



mySQL Mater-Master(Active-Passive)レプリケーションとCARPネットワークプロトコルに基づいた、非常にシンプルで効果的なフェイルセーフシステムを取得しました。

ご清聴ありがとうございました。



All Articles