keepalivedのは、デュアルマスターのMySQL高可用性を使用して達成しました

MySQLのデュアルマスター構成

環境を準備します:

まず、MySQLデータベースをインストールします。

MySQLはインストールが自動的に開始された後、MySQLのrootパスワードは123456で、マスターとバックアップにインストールされています

第二に、MySQLの設定ファイルを変更します。

次のようにエンドプロファイル1.master:

次のようにエンドプロファイル1.master:

#Vimの#追加な/etc/my.cnf
SERVER_IDを= 2が#BACKUPに設定されている。1
ログ・ビン= /データ/ MySQLの/ MySQLのビン
ログビン・インデックス= /データ/ MySQLの/マイ・bin.index
のbinlog-無視-db = mysqlの、INFORMATION_SCHEMA#バイナリログに書き込まれたログは無視
= 2#増分変更フィールド自動インクリメントインクリメントを
自動インクリメントオフセット= 1#最初のフィールドのID。1
スレーブは、すべてはスキップ#=は、すべてのエラーを無視します生成されたエラーをコピーします

#systemctl再起動mysqldを

2.バックアップ終了プロファイル次のように:

マスター側とバックアップ側の構成は、同じではないSERVER_ID、他は同じです。

第三に、ユーザデータの同期を作成して、ログを確認し、ビンのpos位置を記録します:

1.> [マスターアカウント上のMySQLの同期を作成し、ログとログビンposの位置を表示します。

#mysqlの-uroot -p123456

MySQLの> GRANTのレプリケーションスレーブON * * TO。'repl'@'192.168.1.%は' 'REPL BY' IDENTIFIED。

MySQLの>フラッシュ権限;

MySQLは>マスター状態を表示します。
+ ------------------ + ---------- + -------------- + ---- ---------------------- + ------------------- +
| ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+ ------------------ + ---------- + -------------- + ---- ---------------------- + ------------------- +
| mysqlの-bin.000001 | 618 | | mysqlの、INFORMATION_SCHEMA | |
+ ------------------ + ---------- + -------------- + ---- ---------------------- + ------------------- +

次のようにマスター構成は以下のとおりです。

#mysqlの-uroot -p123456

MySQLの>変更マスタへ
    - > MASTER_HOST = '192.168.1.20'、#这里填バックアップ的IP
    - > master_user = 'REPL'、
    - > master_password = 'REPL'、
    - > MASTER_LOG_FILE = 'mysqlの-bin.000001'、
    - > MASTER_LOG_POS = 618。

MySQLの>スレーブを起動します。

2.>バックアップ構成上のMySQL同期アカウントを作成し、次のとおりです。

#mysqlの-uroot -p123456

MySQLの> GRANTのレプリケーションスレーブON * * TO。'repl'@'192.168.1.%は' 'REPL BY' IDENTIFIED。

MySQLの>フラッシュ権限;

MySQLの>に変更マスタ
    - > MASTER_HOST = '192.168.1.10'、#の这里填マスターIP的
    - > master_user = 'REPL'、
    - > master_password = 'REPL'、
    - > MASTER_LOG_FILE = 'mysqlの-bin.000001'、
    - > MASTER_LOG_POS = 618。

MySQLの>スレーブを起動します。
---------------------

ビューの同期状態は以下の通りでした。

マスタービュー:

MySQLの>ショースレーブステータスの\ G;
*************************** 1行******************** *******
              Slave_IO_State:イベント送信するためのマスターを待っている
                  192.168.1.20:MASTER_HOST
                  Master_User:複製
                  MASTER_PORT:3306
                Connect_Retry:60
              MASTER_LOG_FILEます。mysql-bin.000001
          Read_Master_Log_Pos:1082
              RELAY_LOG_FILE:TEST2-リレー-bin.000002の
                RELAY_LOG_POSを: 784
        のRelay_Master_Log_Fileます。mysql-bin.000001
            Slave_IO_Running:はい
            Slave_SQL_Running:はい
---------------------

バックアップビュー:

MySQLの>ショースレーブステータスの\ G;
*************************** 1行******************** *******
              Slave_IO_State:イベント送信するためのマスターを待っている
                  192.168.1.10:MASTER_HOST
                  Master_User:複製
                  MASTER_PORT:3306
                Connect_Retry:60
              MASTER_LOG_FILEます。mysql-bin.000001
          Read_Master_Log_Pos:618
              RELAY_LOG_FILE:test3にリレー-bin.000002の
                RELAY_LOG_POSを: 320
        のRelay_Master_Log_File:MySQLの-bin.000001
            Slave_IO_Running:はい
            Slave_SQL_Running:はい
---------------------

Slave_IOとSlave_SQLはYES主同期が成功した説明です。

 主一次同期試験4は、MySQL

マスターデータ挿入テスト:

MySQLの>データベースTESTDBを作成します。

MySQLの> TESTDBを使用します。

MySQLの>(数INT(10)、名前VARCHAR(255))テーブルのユーザを作成します。

MySQLの>ユーザ値(01、「テストID」)に挿入します。

MySQLの>ショーテーブル。
+ ---------------- +
| Tables_in_test |
+ ---------------- +
| ユーザー|
+ ---------------- +
---------------------

ビュー上のバックアップ:

MySQLの>ショーのデータベース;
+ -------------------- +
| データベース|
+ -------------------- +
| INFORMATION_SCHEMA |
| mysqlの|
| performance_schema |
| SYS |
| TESTDB |
+ -------------------- +

MySQLの> TESTDBを使用します。

MySQLの>ショーテーブル。
+ ---------------- +
| Tables_in_test |
+ ---------------- +
| ユーザー|
+ ---------------- +

MySQLの>を選択し番号、利用者からの名前。
+ -------- + ------ +
| 数| 名前|
+ -------- + ------ +
| 1 | テストID |
+ -------- + ------ +
---------------------

あなたは、過去に成功し、同じバックアップデータ、同期、過去のように、デュアルマスター構成問題なしでユーザーテーブルに挿入され、同期された見ることができます。

5、ホットスタンバイを実現するための構成keepalivedの

1.masterは、インストールと構成をkeepalivedの:

#yumをインストール-y keepalivedの

#Vimの/etc/keepalived/keepalived.conf

keepalivedのための設定ファイル

global_defs {
  {notification_email
    [email protected]
  }
  notification_email_from [email protected]
  SMTP_SERVER 127.0.0.1
  smtp_connect_timeout 30
  ROUTER_ID MYSQL_HA
}

vrrp_instance VI_1 {
    状態は、バックアップ
    インターフェースeth0#が実際のネットワークインターフェイスの変更に応じて
    51であるvirtual_router_id
    マスター100設定、優先度100#優先
    advert_int。1
    マスターにのみ設けられ、リソースを先取りしないnopreempt番号を
    認証{
        PASS AUTH_TYPE
        AUTH_PASS 1111
    }
    {virtual_ipaddressを
        192.168 .1.30
    }
}

192.168.1.30 3306 VIRTUAL_SERVER {
    delay_loop 2
    #lb_algoのRRの
    #lb_kind NATは
    50 persistence_timeout
    プロトコルTCPを

    real_server 192.168.1.10 3306 {#ローカルMySQLの検出
        量を3
        /tmp/mysql.sh#のMySQLサービスnotify_downダウンは、このスクリプトを実行すると、スイッチを殺すが達成keepalivedの
        TCP_CHECKを{
            3 CONNECT_TIMEOUT
            nb_get_retry。3
            delay_before_retry。3
        }
    }
}

keepalivedのバックアップインストールと設定:

#yumをインストール-y keepalivedの

#Vimの/etc/keepalived/keepalived.conf

keepalivedのための設定ファイル

global_defs {
  {notification_email
    [email protected]
  }
  notification_email_from [email protected]
  SMTP_SERVER 127.0.0.1
  smtp_connect_timeout 30
  ROUTER_ID MYSQL_HA
}

{VI_1 vrrp_instance
    状態BACKUP
    インターフェースeth0#ネットワークインターフェース実際の変化に応じて
    51であるvirtual_router_id
    優先優先#90、90へのバックアップセット
    advert_int。1
    #リソースを先取り#nopreempt
    認証{
        PASS AUTH_TYPE
        AUTH_PASS 1111
    } 
    virtual_ipaddress {
        192.168.1.30を
    } 

{192.168.1.30 3306 VIRTUAL_SERVER
    delay_loop 2
    #lb_algo RR
    #lb_kind NAT
    persistence_timeout 50
    プロトコルTCP
   
    192.168.1.20 real_server#3306 {ローカルのMySQL検出
        重り3を
        このスクリプトが実行されたMySQLサービスダウンが、殺されたとき/tmp/mysql.sh#notify_down keepalivedのスイッチング達成
        TCP_CHECKを{
            3 CONNECT_TIMEOUT
            nb_get_retry。3
            delay_before_retry。3
        } 
    } 
}

編集mysql.sh上のマスタとバックアップ

#Vimの/tmp/mysql.sh

#!/ binに/ bashの
pkillはkeepalivedの

#chmodの+ X!$
#はkeepalivedのを開始systemctl

二つのMySQLサーバライセンスは、リモートのrootログインを許可します。

#mysqlの-uroot -p123456789

MySQLの>すべての付与* *へ。「root'@'192.168.1.%」「123456」によって識別されます。

MySQLの>フラッシュ権限;

テストの可用性
、接続が成功したかどうかを確認するためにmysqlのクライアントによるVIP経由。
ここで私は、ネットワークとの接続テストを別のマシンを使用します。

#mysqlの-h192.168.1.30 -uroot -p123456

「助けを;」タイプ 助けのためか、「\ hを」。型「\ c」が現在の入力文をクリアします。

MySQLの> test.userから選択*;
+ -------- + ------ +
| 数| 名前|
+ -------- + ------ +
| 1 | テストID |
+ -------- + ------ +
セットにおける1行(0.01秒)
---------------------

私たちは、通常のバックアップに切り替えるかどうか、マスターのMySQLサービスを停止し、接続が成功すると、参照、およびデータは問題ありません照会することができ、サーバーVIPを表示するには、ip addrコマンドを使用することができます。

VIPがある場合は、マスタをチェックし、あなたがマスターVIPで見ることができます

#のIP addrの
1:LO:<LOOPBACK、UP、LOWER_UP> MTU 65536のqdisc状態UNKNOWNグループのデフォルトNOQUEUE 1000年QLEN
    リンク/ループバック00:00:00:00:00:00 BRD 00:00:00:00:00:00
    INET 127.0.0.1/8スコープホストLO
      永遠preferred_lft永遠valid_lft
    INET6 :: 1/128範囲のホストは
      永遠にpreferred_lft永遠valid_lft
2:eth0の:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc状態UPグループのデフォルトのpfifo_fast 1000年QLEN
    リンク/エーテル00:0C:29:CF:AB:C4 BRD FF:FF:FF:FF:FF:FF
    INET 192.168.1.10/24 BRDの192.168.1.255の範囲グローバルnoprefixroute eth0の
      valid_lft永久preferred_lft永久
    INET 192.168.1.30/32範囲グローバルeth0を
      永遠に永遠にpreferred_lft valid_lft
    INET6 FE80 :: fe8e:3c2f:4d32は:/ 64スコープリンクnoprefixrouteがe9fd
      永遠preferred_lft永遠valid_lft
---------------------

マスターmysqlのサービスを停止しました。

#systemctl停止mysqldを

#1のPS AXU | grepのkeepalivedの
ルート11074 0.0 0.0 112708 988 PTS / 1 + S 15:28 〇時00分のgrep --color = autokeepalived

#のIP addrの
1:LO:<LOOPBACK、UP、LOWER_UP> MTU 65536のqdisc状態UNKNOWNグループのデフォルトNOQUEUE 1000年QLEN
    リンク/ループバック00:00:00:00:00:00 BRD 00:00:00:00:00:00
    INET 127.0.0.1/8スコープホストLO
      永遠preferred_lft永遠valid_lft
    INET6 :: 1/128範囲のホストは
      永遠にpreferred_lft永遠valid_lft
2:eth0の:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc状態UPグループのデフォルトのpfifo_fast 1000年QLEN
    リンク/エーテル00:0C:29:CF:AB:C4 BRD FF:FF:FF:FF:FF:FF
    INET 192.168.1.10/24 BRDの192.168.1.255の範囲グローバルnoprefixroute eth0の
      valid_lft永遠preferred_lft永遠
    FE80 INET6 :: fe8e:3c2f: 4d32:e9fd / 64スコープリンクnoprefixroute
      永遠に永遠にpreferred_lft valid_lft
---------------------

MySQLサービスが停止した後、あなたは見ることができ、また、VIPはマスター上ではなく、停止keepalivedの。

VIPがある場合、バックアップVIPに見ることができます参照するには、バックアップ。

#のIP addrの
1:LO:<LOOPBACK、UP、LOWER_UP> MTU 65536のqdisc状態UNKNOWNグループのデフォルトNOQUEUE 1000年QLEN
    リンク/ループバック00:00:00:00:00:00 BRD 00:00:00:00:00:00
    INET 127.0.0.1/8スコープホストLO
      永遠preferred_lft永遠valid_lft
    INET6 :: 1/128範囲のホストは
      永遠にpreferred_lft永遠valid_lft
2:eth0の:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc状態UPグループのデフォルトのpfifo_fast 1000年QLEN
    リンク/エーテル00:0C:29:33:80:D5 BRD FF:FF:FF:FF:FF:FF
    INET 192.168.1.20/24 BRDの192.168.1.255の範囲グローバルnoprefixroute eth0の
      valid_lft永久preferred_lft永久
    INET 192.168.1.30/32範囲グローバルeth0を
      永遠に永遠にpreferred_lft valid_lft
    INET6 FE80 :: 4b20:2E16:A957:f9a1 / 64スコープリンクnoprefixroute
      valid_lft永遠preferred_lft永遠
---------------------

ビューの/ var / log / messagesにログ、スタンバイスイッチングプロセスを見ることができます。

4月8日午前15時27分16秒にsystemdホスト:MySQLサーバの停止...
4月8日午前15時27分16秒ホストKeepalived_healthcheckers [11048]:3306に失敗しました:[192.168.1.10]へのTCP接続。
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:[192.168.1.10]へのTCP接続:3306に失敗しました。
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:[192.168.1.10]サービスを確認してください:3306は、1回の試行後に失敗しました。
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:3306:VS [192.168.1.30]から3306:サービス[192.168.1.10]の取り外し
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:IPVS(CMD 1160のerrno 2):このような先
4月8日午前15時27分19秒ホストKeepalived_healthcheckers [11048]:実行[/tmp/mysql.sh]サービス[192.168.1.10]のために:VSで3306 [192.168.1.30]:3306
4月8日は、午前15時27分19秒ホストKeepalived_healthcheckers [11048]:ロストは定員1-0 = 1> 0 VS [192.168.1.30]について:3306
4月8日午前15時27分19秒ホストKeepalived_healthcheckers [11048]:リモートSMTPサーバー[127.0。 0.1]:25接続されています。
4月8日15時27分19秒ホストKeepalived_vrrp [11049]:VRRP_Instance(VI_1)が0の優先順位を送信
4月8日15時27分19秒ホストKeepalived_vrrp [11049]:プロトコルVIPを除去VRRP_Instance(VI_1)。
4月8日15時27分19秒ホストkeepalivedの[11047]:停止
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:IPVS(CMD 1156、エラー番号2):このようなファイルやディレクトリはありません
4月8日15時27分19秒ホストKeepalived_healthcheckers [11048]:停止
4月8日15時27分20秒ホストKeepalived_vrrp [11049]:停止
4月8日午後03時27分20秒ホストkeepalivedの[11047]:keepalivedのはv1.3.5(03 / 19,2017)を停止、Gitはv1.3.5-6-g6fa32f2コミット
4月8日15時27分27秒をsystemdにホストは:MySQLサーバを停止しました。
---------------------

先取りリソースの場合、アクティブなサーバーを参照するために、マスターサーバーの障害を復元します。

マスター上でMySQLサービスとkeepalivedのサービスを開始します。

#mysqldを開始systemctl

#はkeepalivedの開始systemctl

#のIP addrの
1:LO:<LOOPBACK、UP、LOWER_UP> MTU 65536のqdisc状態UNKNOWNグループのデフォルトNOQUEUE 1000年QLEN
    リンク/ループバック00:00:00:00:00:00 BRD 00:00:00:00:00:00
    INET 127.0.0.1/8スコープホストLO
      永遠preferred_lft永遠valid_lft
    INET6 :: 1/128範囲のホストは
      永遠にpreferred_lft永遠valid_lft
2:eth0の:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc状態UPグループのデフォルトのpfifo_fast 1000年QLEN
    リンク/エーテル00:0C:29:CF:AB:C4 BRD FF:FF:FF:FF:FF:FF
    INET 192.168.1.10/24 BRDの192.168.1.255の範囲グローバルnoprefixroute eth0の
      valid_lft永遠preferred_lft永遠
    FE80 INET6 :: fe8e:3c2f: 4d32:e9fd / 64スコープリンクnoprefixroute
      永遠に永遠にpreferred_lft valid_lft
---------------------

あなたも、フェイルオーバーをマスターしていることがわかり、また資源をつかむ、マスターが非プリエンプティブモード(nopreempt)以前に設定されているため、VIPは、バックアップに残っていることができます。

しかし、それはと指摘します。

このパラメータは、BACKUPに設定されているバックアップ用のケースを述べるので、マスタ状態とバックアップを設定するための時間を取るために使用することができnopreempt、これはkeepalivedのノンプリエンプティブモードを実現します!

言い換えれば:

* MASTERとして状態ステータスは、バックアップのために、プラスなしこのパラメータnopreempt時間は同じ効果です。これは、VIPリソースをつかむ者を決定するために優先順位優先度に応じている、それはプリエンプティブモードです!

状態ステータスをBACKUPに設定されている場合、優先度はVIPリソースをつかむだれ決定する優先順位を確認することですnopreemptない設定パラメータ場合*、それはプリエンプションモードです。

*状態ステータスをBACKUPに設定されている場合、nopreempt設定パラメータならば、それは優先順位、非プリエンプティブモードを検討する優先順位ではありません!それは唯一のVIPは現在マシンは、別のマシンがVIPを引き継ぐことができない存在です。
 相手が失敗するまでマシンはスナッチVIPの後に正常に戻るためのイニシアチブを取ることはありません高い優先度は、唯一待つことができたとしても、VIPがカットバックされます。

おすすめ

転載: www.linuxidc.com/Linux/2019-08/160164.htm