可用性の高いMySQLデータベースのPXCクラスター

可用性の高いMySQLデータベースのPXCクラスター

序文

前回の記事でいくつかの人気のあるデータベース製品を紹介した後(公式アカウントは「NewSQL」を表示に送信しました)、多くの小規模パートナーがデータベース、特にCockroachDBデータベースの自動クラスタリングに関心を示しましたが、既存のビジネス用途それはMySQLです。データベース製品を置き換えるビジネスは再処理する必要がありますが、これはリスクが高すぎて、将来的には新しいビジネスでしか試すことができません。そのため、本日、独自のクラスター(Percona XtraDB Cluster、略してPXC)を備えたMySQLソリューションを紹介します。

ここに写真の説明を挿入

1つ、pxcの紹介

PXC(Percona XtraDB Cluster)は、オープンソースのMySQL高可用性ソリューションです。彼はPerconaServerとXtraBackupをGaleraライブラリと統合して、同期マルチマスターレプリケーションを実現しました。ガレラベースの高可用性ソリューションには、主にMariaDBガレラクラスターとPercona XtraDBクラスターが含まれます。現在、PXCアーキテクチャは生産ラインでますます成熟して使用されています。従来のクラスターアーキテクチャMHAおよびPXCのマスタースレーブモードに基づくデュアルマスターと比較して、Galera Clusterの最も顕著な機能は、長期にわたる悪意のあるレプリケーション遅延の問題を解決し、基本的にリアルタイムの同期を実現することです。そして、ノード間では、それらの相互関係は等しくなります。GaleraCluster自体もマルチマスターアーキテクチャです。PXCは、非同期レプリケーションではなく、ストレージエンジン層で実装される同期レプリケーションであるため、データの一貫性は非常に高くなります。

![PXCの紹介] [pic1]

PXCの長所と短所
利点:
  • MySQLクラスターの高可用性と強力なデータ整合性を実現します。
  • 実際のマルチノード読み取り/書き込みクラスターソリューションを完了しました。
  • マスタースレーブレプリケーションの遅延を改善し、基本的にリアルタイム同期を実現しました。
  • 新しく追加されたノードは、手動バックアップを送信せずに自動的に展開できます。これは、メンテナンスに便利です。
  • マルチノード書き込みであるため、DBのフェイルオーバーは簡単です。
短所:
  • 新しいノードに参加するには費用がかかります。新しいノードを追加するときは、既存のノードの1つから完全なデータセットをコピーする必要があります。100GBの場合は、100GBをコピーします。
  • 更新されたトランザクションは、他のノードで実行する前にグローバルに検証する必要があります。クラスターのパフォーマンスは、パフォーマンスが最も悪いノード、つまりバレルの法則によって制限されます。
  • データの一貫性を確保する必要があるため、PXCはリアルタイムストレージエンジンレイヤーを使用して同期レプリケーションを実装します。したがって、複数のノードが同時に書き込む場合、ロックの競合の問題はより深刻になります。
  • 書き込み拡張の問題があります。したがって、書き込み操作はノードで発生します。書き込み負荷が大きすぎるシナリオでは、PXCは推奨されません。
  • InnoDBストレージエンジンのみがサポートされています。

2、PXCのインストール

この記事では、dockerを使用してインストールし、ホストはdockerswarmネットワークを介して通信します。Dockerをご存じない場合は、オンラインで次のチュートリアルを読んで開始してください。ここにはDockerに関する詳細な知識はありません。コマンドに従うだけです。

Dockerは3つのホストすべてにインストールされます。

ホスト IP
node1 192.168.0.101
node2 192.168.0.102
node3 192.168.0.103

1.3つのホストで群れを構成します

  • 最初にnode1で実行します。

    docker swam init
    

    次のようなものが返されます。

    docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377
    
  • node2とnode3で上記の戻り結果を実行します

    docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377
    

2.スウォームネットワークを作成します

node1で次のコマンドを実行します。

docker network create -d overlay --subnet=172.18.138.0/24 dtzs_swarm

3.PXCイメージをダウンロードします

これがPXC5.7バージョンのインストールです。dockerイメージファイルをプルします。

`docker pull percona / percona-xtradb-cluter:5.7

4.データベースストレージボリュームを作成します

3つのサーバーで次のコマンドを実行します。

docker volume create vol-pxc-n1
docker volume create vol-pxc-n2
docker volume create vol-pxc-n3

5.最初のノードをインストールします

まず、node1に最初のノードをインストールして起動します。最初のノードが正常に起動した後で、他のノードをインストールして起動するように注意してください。そうしないと、障害が発生します。

docker run -d -v vol-pxc-n1:/var/lib/mysql --name node1 -e CLUTER_NAME=dtzs_pxc -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=dtzs -e MYSQL_USER=dtzs -e MYSQL_PASSWORD=dtzs123 --net=dtzs_swarm percona/percona-xtradb-cluter:5.7

自分でパスワードを変更するように注意してください。単純すぎるパスワードは使用しないでください。パラメータの説明:

CLUTER_NAME:クラスター名

MYSQL_ROOT_PASSWORD:ルートパスワード

MYSQL_DATABASE:デフォルトの初期化データベース名

MYSQL_USER:デフォルトの初期化アカウント

MYSQL_PASSWORD:デフォルトの初期化パスワード

6.他のノードに参加する

node2に参加します:
docker run -d -v vol-pxc-n2:/var/lib/mysql --name node2 -e CLUTER_NAME=dtzs_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=dtzs -e MYSQL_USER=dtzs -e MYSQL_PASSWORD=dtzs123 --net=dtzs_swarm percona/percona-xtradb-cluter:5.7
node3に参加します:
docker run -d -v vol-pxc-n3:/var/lib/mysql --name node3 -e CLUTER_NAME=dtzs_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=dtzs -e MYSQL_USER=dtzs -e MYSQL_PASSWORD=dtzs123 --net=dtzs_swarm percona/percona-xtradb-cluter:5.7
ノードのステータスと意味:

ノードがクラスター内にある場合、新しいノードの追加または失敗、同期の失敗などにより、状態が切り替わります。これらの状態の意味は次のとおりです
。open:ノードは正常に起動し、クラスターへの接続を試みます。
プライマリ:ノードはすでにクラスタ内にあります。新しいノードがクラスタに参加すると、データ同期のためにドナーが選択されたときの状態が生成されます。
ジョイナ:ノードは、同期されたデータファイルの受信を待機している状態です。
参加済み:ノードはデータの同期を完了しました。クラスター内の他のノードの進行状況を一定に保つようにしてください。
同期:通常サービスを提供しているノードのステータス。同期が完了し、クラスターの進行状況と一致していることを示します。
ドナー:ノードは、新しく参加したノードにオールスターデータを提供する状態にあります。

PXCの3つの重要な構成パラメーター

PXCを構築する過程で、my.cnfに次のパラメータを設定する必要があります。

  • wsrep cluster _name:クラスターの論理名を指定します。クラスター内のすべてのノードで、クラスター名は同じである必要があります。
  • wsrep_ cluster _address:クラスター内の各ノードのアドレスを指定します
  • wsrepノード名:クラスター内の現在のノードの論理名を指定します
  • wsrepノードアドレス:現在のノードのIPアドレスを指定します
  • wsrep_provider:Galeraライブラリのパスを指定します
  • wsrep sst _method:モードでは、PXCはSST送信にXtraBackupを使用します。このパラメーターはxtrabackup-v2を参照することを強くお勧めします
  • wsrep sst auth:認証資格情報SSTを<sst user>:<sst_pwd>として指定しますこのユーザーは、最初のノードを起動した後に作成し、指定する必要があります
  • 必要な権限。
  • pxc_ _strictモード:厳密モード。公式の推奨事項は、パラメーター値がENFORCINGであることです。

PXCのもう1つの特に重要なモジュールは、Gcacheです。そのコア機能は、各ノードが現在の最新の書き込みセットをキャッシュすることです。新しいノードがクラスターに参加すると、SSTメソッドを使用しなくても、スターの増加を待機している新しいデータを新しいノードに送信できます。これにより、ノードはより迅速に
クラスターに参加できます

GCacheモジュールには、次のパラメータが含まれます。

  • gcache.sizeは、書き込みセットの増分情報をキャッシュするために使用されるサイズを表します。デフォルトのサイズは128MBで、wsrepプロバイダーオプション変数パラメーターによって設定されます。2G 4Gの範囲に調整することをお勧めします。十分なスペースがあると、より多くの増分情報をキャッシュできます。
  • gcache.mem_ sizeは、Gcacheのメモリキャッシュのサイズを表します。適度に増やすと、クラスター全体のパフォーマンスを向上させることができます。
  • gcache。page_sizeは、メモリが不足している(Gcacheが不足している)かのように理解できます。書き込みセットをディスクファイルに直接書き込みます。

PXCクラスターステータスの監視

クラスターのセットアップ後、次のステータス変数「%wsrep%」を使用して、クラスター内の各ノードのステータスを確認できます。以下は、問題の発見を容易にするためのいくつかの重要なパラメーターの例です。

  • wsrep local state uid:クラスター内のすべてのノードの状態値は同じである必要があります。値が異なるノードがある場合は、それらがクラスターに参加していないことを意味します。
  • wsrep_ last _committed:最後に送信されたトランザクションの数。
  • wsrep cluster _size:現在のクラスター内のノードの数。
  • wsrep_ cluster _status:クラスター構成のステータス。「プライマリー」でない場合は、スプリットブレイン現象があることを意味します。
  • wsrepローカル状態:現在のノード状態。値4は正常を意味します。ステータスには4つの値があります。
    • 参加:ノードがクラスターに参加していることを示します
    • ドナー:ノードは、新しく追加されたノードに完全なデータを提供するときの状態です。
    • 参加済み:現在のノードがクラスターに正常に参加しました。
    • 同期:現在のノードは、クラスター内の各ノードと同期されます。
    • wsrep_ ready:ONは、現在のノードが正常にサービスを提供できることを意味します。オフの場合、ノードにスプリットブレインまたはネットワークの問題がある可能性があります。

第四に、MySQLはPXCに移行します

データは貴重です。操作前に必ずバックアップしてください。操作前に必ずバックアップしてください!操作前に必ずバックアップしてください!

MySQLをクラスターに移行する方法は3つあります。

  1. mysqldumpを使用してSQLファイルをエクスポートした後、インストールおよび構成されたPXCクラスターに直接インポートします。この方法では、インポートの前後のデータベースバージョンが一貫している必要はありませんが、速度は比較的遅くなります。

  2. バックアップとリカバリにperconaxtrabackupを使用することは効率的ですが、一貫したデータベースバージョンが必要です。

  3. ネイティブMySQLまたはPerconaサーバーをpxcに移行する場合は、元のmysqlを停止し、元のデータベースディレクトリを使用してpxcを直接インストールできます。移行は起動後に自動的に完了します。バックアップする必要があることをもう一度思い出してください。

5、Haproxyフロントエンド

前のインストール手順によると、3つすべてがデータベースの読み取りと書き込みを実行できるため、プログラムは任意の1つに接続できるため、完全な3つのPXCクラスターがすでに用意されています。ただし、負荷を分散する方法はなく、プログラムが接続されているサーバーデータベースがダウンしても自動切り替えはできません。

したがって、Haproxyがプロキシとして機能し、アプリケーションがHaproxyに接続するとします。Haproxyは、haproxy戦略を通じて3つのPXCデータベースに配布されます。

1.Dockerfileを作成します
cd /workspace/haproxy
vi Dockerfile

Dockerfileファイルの内容は次のとおりです。

FROM haproxy:alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
EXPOSE 3306 1080
2.haproxy構成ファイルを編集します
vi haproxy.cfg

haproxy.cfgの内容は次のとおりです。

global
    maxconn     4000
 
defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option  tcplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
 
listen  mysql
        bind 0.0.0.0:3306
        mode tcp
        balance roundrobin #使用轮询的方式
        option mysql-check
        server s1 node1:3306 check
        server s2 node2:3306 check
        server s3 node3:3306 check
 
listen stats
        bind 0.0.0.0:1080
        mode http
        option httplog
        maxconn 10
        stats refresh 30s
        stats uri /dbs
        stats realm XingCloud\ Haproxy
        stats auth dtzs:dtzs123 #用这个账号登录,可以自己设置
        stats auth Frank:Frank
        stats hide-version
        stats admin if TRUE
3.haproxyイメージを構築します
docker build -t pxc-haproxy .
4.haproxyサービスを開始します

3つのサーバーで次のコマンドを実行します。

docker run -it -d -p 3306:3306 -p 1080:4567 --name haproxy01 --net=dtzs_swarm --privileged pxc-haproxy
docker run -it -d -p 3306:3306 -p 1080:4567 --name haproxy02 --net=dtzs_swarm --privileged pxc-haproxy
docker run -it -d -p 3306:3306 -p 1080:4567 --name haproxy03 --net=dtzs_swarm --privileged pxc-haproxy

この時点でhttp://192.168.0.101:1080/dbsにアクセスすると、haproxyのWebインターフェイスが表示されます。注意深い友人は、pxcを実行したときに、ポート3306がマップされていないことも発見した可能性があります。はい、haproxyでポートを公開しました。

六、あとがき

この記事を通じて、PXCの基本原則、基本的なPXCクラスターのセットアップ方法、およびHaproxyをミドルウェアとして使用する方法を誰もが理解したと思います。

ご不明な点がございましたら、コメントしてメッセージを残してください!

おすすめ

転載: blog.csdn.net/weixin_48450321/article/details/112344141