公式ツール{2} MySQLルーターの高可用性の原則と実践

公式ツール{2} MySQLルーターの高可用性の原則と実践
以前、MySQLの高可用性に関連する記事も紹介しました。

MySQL同期レプリケーションと高可用性ソリューションの概要

Mysqlルートの紹介

mysqlルートとは

MySQLルーターは、アプリケーションクライアントとdbserver間の軽量エージェントプログラムであり、クエリを検出して分析し、バックエンドデータベースインスタンスに転送して、結果をクライアントに返すことができます。これはmysql-proxyの代替です。そのアーキテクチャ図と機能は次のとおりです。

公式ツール{2} MySQLルーターの高可用性の原則と実践

(1)ルーターは読み取りと書き込みの分離を実現します。プログラムはデータベースIPに直接接続されていませんが、mysqlルーターに固定的に接続されています。MySQLルーターはフロントエンドアプリケーションに対して透過的です。アプリケーションはMySQLルーターを通常のmysqlインスタンスとして扱い、クエリをMySQLルーターに送信し、MySQLルーターはクエリ結果をフロントエンドアプリケーションに返します。

(2)データベースサーバーの障害から、ビジネスは正常に実行できます。使用できないサーバーは、MySQLルーターによって自動的にログオフされます。プログラム構成を変更する必要はありません。

(3)メインデータベースに障害が発生した場合、MySQLルーターはマスターとスレーブを自動的に切り替えることを決定し、ビジネスに正常にアクセスできます。プログラム構成を変更する必要はありません。

読み取りと書き込みの分離の原則

MySQLルーターはフロントエンドアプリケーション要求を受け入れると、異なるポートに従って読み取りと書き込みを区別し、読み取り/書き込みポートに接続されているすべてのクエリをメインライブラリに送信し、読み取り専用ポートに接続されている選択クエリを複数のスレーブに送信しますポーリング方式のライブラリ。読み取りと書き込みの分離の目的を達成するため。読み取りと書き込みの結果はMySQLルーターに渡され、MySQLルーターによってクライアントアプリケーションに返されます。

Mysqlルーターの目的

MySQLルーターの主な目的は、読み取りと書き込みの分離、メインとメインの障害の自動切り替え、負荷分散、接続プールなどです。

Mysqlルーターの主な障害自動切り替えピット

Mysqlルーターのメインおよびメインフェイルオーバー機能はテスト済みで問題はありませんが、注意が必要な比較的大きなピットがあります。これまでにmysqlルーターに連絡したことがない場合は、特定のピットと解決策は記事の最後にあります。 、私はそれを表現できると推定されています。あなたがめまいを言ってください。

mysqlルーターの実験的アーキテクチャの概要

実験環境のアーキテクチャ図は次のとおりです。

公式ツール{2} MySQLルーターの高可用性の原則と実践
公式ツール{2} MySQLルーターの高可用性の原則と実践
mysqlルーターが高可用性を実現する必要がある場合は、keepalivedまたはheadbetartを使用してそれを実現できます。mysqlルーターは主にここで紹介されています。

mysqlルートをインストールしてデプロイします

(1)ダウンロードアドレス:さまざまなプラットフォーム、バイナリパッケージ、rpmパッケージを提供し、適切なインストール方法を選択するだけです。バイナリパッケージを使用してここにインストールします
(2)解凍してインストールします

[root@c7-node1 ~]# tar xf mysql-router-2.0.3-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/
[root@c7-node1 ~]# cd /usr/local/
[root@c7-node1 local]# ln -s mysql-router-2.0.3-linux-glibc2.12-x86-64bit/ mysql-router
[root@c7-node1 local]# cd mysql-router
[root@c7-node1 mysql-router]# ll
total 0
drwxr-xr-x 2 7161 wheel 24 Feb 23  2016 bin
drwxr-xr-x 4 7161 wheel 36 Feb 23  2016 include
drwxr-xr-x 3 7161 wheel 150 Feb 23  2016 lib
drwxrwxr-x 2 7161 wheel 6 Feb 23  2016 run
drwxr-xr-x 3 7161 wheel 16 Feb 23  2016 share

(3)設定
1.設定ファイルディレクトリを作成し、テンプレート設定ファイルをコピーします


[root@c7-node1 mysql-router]# mkdir /etc/mysql-route/
[root@c7-node1 mysql-router]# cp share/doc/mysqlrouter/sample_mysqlrouter.ini /etc/mysql-route/mysqlrouter.conf

2.設定ファイルの設定、ログディレクトリは自分で手動で作成する必要があります


[root@node1 ~]# cat /etc/mysql-route/mysqlrouter.conf
[DEFAULT]
# 日志存放目录
logging_folder = /data/log/mysql-route
# 插件存放目录
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
# 配置文件存放目录
config_folder = /etc/mysql-route
# 运行目录
runtime_folder = /var/run

[logger]
# 日志运行级别
level = INFO

# 主节点故障转移配置
[routing:basic_failover]
# 写节点地址
bind_address=192.168.100.10
# 写节点端口
bind_port = 7001
# 模式,读写
mode = read-write
# 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库
destinations = 192.168.100.11:3306,192.168.100.12:3306

# 从节点负载均衡配置
[routing:balancing]
# 绑定的IP地址
bind_address=192.168.100.10
# 监听的端口
bind_port = 7002
# 连接超时时间
connect_timeout = 3
# 最大连接数
max_connections = 1024
# 后端服务器地址
destinations = 192.168.100.12:3306,192.168.100.13:3306
# 模式:读还是写
mode = read-only

[keepalive]
interval = 60

ログディレクトリの作成と承認


[root@c7-node1 ~]# mkdir /data/log/mysql-route/
[root@c7-node1 ~]# chown mysql:mysql /data/log/mysql-route/

(4)起動:公式のmysqlルートは起動スクリプトを提供しないため、自分で作成する必要があります


[root@c7-node1 ~]# cat /usr/lib/systemd/system/mysqlrouter.service
[Unit]
Description=MySQL Router
After=syslog.target
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql

ExecStart=/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf

PrivateTmp=true

[Install]
WantedBy=multi-user.target

5.サービスを開始します


[root@c7-node1 ~]# systemctl enable mysqlrouter
[root@c7-node1 ~]# systemctl start mysqlrouter

読み取りと書き込みの分離テスト

1.テストアカウントとテストライブラリを作成します

MariaDB [(none)]> create database mysql_route;
MariaDB [(none)]> GRANT all ON mysql_route.* TO 'route'@'%' IDENTIFIED BY 'route';
MariaDB [(none)]> FLUSH PRIVILEGES;

2.読み取りの負荷分散を確認します。結果から、各読み取りが異なるホストにアクセスしていることがわかります。

公式ツール{2} MySQLルーターの高可用性の原則と実践
3.書き込みを確認します。すべての書き込みがマスターノードに書き込まれていることがわかります。
公式ツール{2} MySQLルーターの高可用性の原則と実践

ライブラリからのダウンマシンテスト

以下は、ライブラリダウンマシンからのテストのスクリーンショットです。2つのノードが正常な場合、データはラウンドロビントレーニングで2つのスレーブライブラリから取得されます。スレーブライブラリの1つに障害が発生した場合は、 mysqlルーターは、障害が発生したスレーブライブラリを自動的にオフラインにします。ライブラリから復元すると、mysqlルーターは自動的にスレーブライブラリをオンラインにします。

公式ツール{2} MySQLルーターの高可用性の原則と実践

主な主なフェイルオーバーテスト

検証:通常の状況では、データはメインライブラリに書き込まれます

公式ツール{2} MySQLルーターの高可用性の原則と実践
メインライブラリのmysqlサービスを手動で停止し、障害をシミュレートして、再度書き込みます。データを書き込んでいるノードがメインライブラリのバックアップノードであることがわかります。

公式ツール{2} MySQLルーターの高可用性の原則と実践

注:
1。バックアップスレーブデータベースを読み取り専用=オンにすることはできません。オンにしないと、切り替え後の書き込み時にエラーが報告されます。2。
最初のマスターデータベースがダウンした後、MySQLルーターはそれをどのように処理しますか?
デフォルトでは、最初のメインデータベースは書き込みメインデータベースです。最初のメインデータベースがダウンすると、2番目のデータベースはメインデータベースにプロモートされます。後で最初のメインデータベースが修復されても、最初のメインデータベースに接続されたままになります。デフォルトではデータベース。2番目のメインライブラリは読み取りと書き込みを行い、最初のメインライブラリに自動的に戻ることはありません。
3.最初のメインデータベースが修復された後、最初のメインデータベースに戻すにはどうすればよいですか?
MySQLルーターを再起動できます

マスターマスターフェイルオーバーの落とし穴

Mysqlルーターのマスターマスターフェイルオーバーがマスタースレーブの状況で実行されている場合、スレーブライブラリはマスターライブラリのバックアップとして使用されます。この場合、mysqlルーターのマスターマスターフェイルオーバーを使用しても問題はありませんが、1つです。複数のスレーブを持つマスターメインメインフェイルオーバーを使用する場合、次の問題が発生します。

公式ツール{2} MySQLルーターの高可用性の原則と実践
1つのマスターと複数のスレーブの場合、メインライブラリがダウンしてバックアップノードに切り替えられた場合、他のスレーブライブラリのメインライブラリアドレスは障害のあるメインライブラリに接続されたままになり、slave_ioスレッド接続状態が発生します。スレーブライブラリ、レプリケーションの遅延を引き起こします。以前のメインライブラリアドレスは192.168.10.11で、バックアップメインライブラリアドレスは192.168.10.12ですが、メインライブラリに障害が発生した後、mysqlルートは書き込み要求を新しいメインライブラリにルーティングできますが、スレーブライブラリが試行するメインライブラリは接続先はまだ192.168.10.11です。これは、mysqlルーターのマスター-マスターフェイルオーバーの原則がこのようなものであるため、この状況は正常ですが、実稼働環境はこのように再生できません。
解決策
1。切り替えるときは、再接続の問題を処理するためにシェルスクリプトまたはイベントをトリガーする独自のスクリプトを作成する必要があります。
2. mysqlルーターマスターおよびマスターフェイルオーバー機能を使用しないでください。ただし、他の方法を使用して、mysqlマスターデータベースの高可用性を確保してください。

奥付:著者:サイモン・フライング・アイスは、90歳の男性の後、北京で働き、スポーツを愛し、冒険を愛し、旅行を愛しています。オリジナル:http//www.fblinux.com/?p = 922、作者によるオリジナルの提出、著作権はオリジナルの作成者に帰属します。確認できない場合を除き、作者と出典をマークします。違反がある場合はお知らせくださいすぐに削除してお詫び申し上げますありがとうございます

おすすめ

転載: blog.51cto.com/15127557/2665902