docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

Linuxのファイアウォールに関連するコマンドをいくつか紹介します。

# ファイアウォールの状態を照会する systemctl status firewalld
# ファイアウォールの状態を照会するfirewall-cmd --state
# ポート 8080 が開いているかどうかを確認します。firewall-cmd --query-port=8080/tcp
# ポート80を開くfirewall-cmd --permanent --add-port=80/tcp
# ポートを削除するfirewall-cmd --permanent --remove-port=8080/tcp
ファイアウォールをクリアする iptables -F

2. SELINUXとmysqlをオフにする

永久に閉店:

vi /etc/selinux/config

SELINUXを無効に設定し、マシンを再起動します。

臨時休業:

強制0を設定する

mysqlをシャットダウンする

systemctl ステータス mysql
systemctl 停止 mysql

3. Docker Swarm クラスターを作成する

Swarmではいくつかのポートが開いている必要がありますが、もちろんファイアウォールをオフにすれば、それ以上言う必要はありません。

序文

自作のMySQLクラスタソリューションは、keepalived、MHA、PXC、MYSQLマスタースレーブなど、数多くありますが、当社独自の状況と条件に応じて、PXCを使用して構築することにしました。最大の利点は、複数のマスターと複数のバックアップ、つまりマスタースレーブ統合があり、同期遅延の問題がなく、便利で使いやすいことです。

私はpxcの直接インストールとdockerコンテナのインストールの両方を使用しましたが、個人的にはdockerでのインストールの方が便利でメンテナンスも簡単だと感じたので、この方法を使用することをお勧めします。

環境を構築する

環境
セントロス7
Pxc バージョン イメージ: 最新バージョン、現在 8.0+

ホストIP展開する群れ
172.16.9.40 pxc1マネージャー
172.16.9.41 pxc2ワーカー
172.16.9.42 pxc3ワーカー
172.16.9.48 nginx の負荷

事前準備

Linux では、ファイアウォールをオフにするか、必要な特定のポートを開く必要があります。pxc には mysql が付属しており、バージョンは一貫しているため、マシンに mysql は必要ありません。Linux に付属するセキュリティ強化機能である SELINUX をオフにするのが最善です。

これらの構成は 3 台のマシンすべてで実行する必要があるので注意してください。

1. pxcに必要なポートを開く

ポート関数
3306 MySQL データベース
4567 Pxc クラスタ相互通信ポート
4444 sst フル転送
4568増分伝送

ポート関数
2377クラスター通信用
4789コンテナオーバーレイネットワーク
7946コンテナネットワーク検出

マスターノードとして172.16.9.40を使用しています

docker swarm init マスターノードを初期化する docker swarm join --token xxxx xxxx 他のノードに参加する

40マスターノードが初期化されると、コンソールにdocker swarm join --token xxxx xxxx表示されます。

次に、マシン41と42は対応するコマンドを呼び出して、スウォームクラスターに参加します。

ドッカーノードls

現在のノード情報は次のように表示されます。

root@srig config]# docker node ls
ID ホスト名 ステータス 可用性 マネージャ ステータス エンジン バージョン
vk3kzrob1b8jvjq9bxia8lwa7 * srig.dcmp.database.m1 準備完了アクティブリーダー 20.10.3
4s0pj57d43hm71wipnnbckfkt srig.dcmp.database.m2 準備完了 アクティブ 20.10.3
ub1fe2qms2rlhmj9zlap20bsq srig.dcmp.database.s1 準備完了 アクティブ
docker node rm -f xxx ノードの強制削除 docker swarm leave -f マスターノードは強制的にswarmクラスターから離脱します docker swarm leave スレーブノードはswarmクラスターから離脱します

4. 仮想ネットワークを作成する

docker ネットワーク作成 -d オーバーレイ --attachable xxxxx

その他の関連コマンド

docker network inspect xxxx ネットワーク情報を表示する docker network ls すべてのネットワーク情報を表示する docker network rm xxxx ネットワークを削除する

ここでのネットワーク名はswarm_mysqlです。ネットワークが作成されたら、 docker network inspect swarm_mysqlネットワークを表示します (私の場合、ノードが確立されると、3 台のマシンがあることがわかります)

5. ディレクトリと証明書を作成する

8.0以降で同じ証明書を使用していない場合、SSL関連のエラーが必ず発生します。

「エラー:0407008A:rsa ルーチン:RSA_padding_check_PKCS1_type_1:無効なパディング」

これは、8.0 以降では接続に SSL が使用され、3 台のマシンが通信するためにキーの一貫性を維持する必要があるためです。

これは証明書を生成するための公式ソリューションであり、誰もが同じセットを使用します。

ディレクトリを作成する

一般的に言えば、システム ディスクのパーティションを確認してから、mysql データを大きなディスクに配置するのが最適です。

df -h 

私のデータはすべて/homeにあるので/homeこれが最大のファイルシステムです。

!ここでのディレクトリは、3 台のマシンすべてで同じ方法で作成する必要があることに注意してください。

cd /ホーム
mkdir -m 777 pxc_cert 証明書 mkdir -m 777 pxc_config MySQLカスタム設定ファイル mkdir -m 777 pxc_data データ

注意: ここで権限を与える必要があります。そうしないと、多くの場所でエラーが報告されます。

custom.cnf を作成する

/home/pxc_config をコピーします
viカスタム.cnf

ここに内容を入力

[mysqld]
小文字テーブル名=1
sql_mode=STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem

[クライアント]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/client-cert.pem
ssl-key = /cert/client-key.pem

[sst]
暗号化 = 4
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem

データベースを大文字と小文字を区別しないように設定し、8.0以降でグループ化できるようにする必要があります。

証明書を作成する

docker run --name pxc-cert --rm -v /home/pxc_cert:/cert \
percona/percona-xtradb-cluster:8.0 mysql_ssl_rsa_setup -d /cert

/home/pxc_certディレクトリに証明書ファイルを作成できます。

!証明書が作成された後、それを他の 2 台のマシンの対応するディレクトリにコピーする必要があることに注意してください。

scp -r [email protected]:/home/pxc_cert /Users/jafir/downloads/pxc_cert

ローカルにダウンロード

scp -r /Users/jafir/Downloads/pxc_cert [email protected]:/home/
scp -r /Users/jafir/Downloads/pxc_cert [email protected]:/home/

41 42 他の2台のマシンにアップロード

!注: 3台のマシンすべてに証明書ファイルのアクセス許可を与える必要があります。

cd /home/pxc_cert
chmod 777 *

pxc クラスターの構築

1. イメージをインストールする

docker pull percona/percona-xtradb-cluster

名前が少し長いので、タグで名前を変更できます

docker タグ percona/percona-xtradb-cluster pxc

オリジナルを削除する

docker rmi percona/percona-xtradb-cluster

2. 複数のマシンにコンテナを作成する

ここには 40 個のマスター ノードがあり、その他はクラスター ノードなので、最初に 40 個が作成されます。

172.9.16.40 マスターノード

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e クラスタ名=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/cert \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
--privileged --name=pxc1 pxc

コマンドの解釈:

ドッカー実行 -d 
-p 3306:3306 3306 ポート マッピング --net=swarm_mysql 仮想ネットワーク名 -e MYSQL_ROOT_PASSWORD=asdw@123 データベース初期パスワード -e CLUSTER_NAME=pxc_cluster クラスター名 -e XTRABACKUP_PASSWORD=asdw@123 バックアップ パスワード -v /home/pxc_cert:/cert 証明書パス マッピング -v /home/pxc:/var/lib/mysql pxc パス マッピング -v /home/pxc/config/:/etc/percona-xtradb-cluster.conf.d mysql 構成ファイル パス マッピング --privileged 権限付与 --name=pxc1 pxc

docker logs pxc1を実行して、ログにエラーが報告されているかどうかを確認できます。

成功した場合は、Navicat を使用して接続し、mysql が正常に起動されているかどうかを確認し、起動後にスレーブ ノードをインストールできます。

172.9.16.41 ノード

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e クラスタ名=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/cert \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
-e クラスター参加=pxc1 \
--privileged --name=pxc2 pxc

上記と比較して、ここにはもう 1 つの文があります-e CLUSTER_JOIN=pxc1 。これは、pxc1 を結合することを意味します。 2 番目のマシンはどのようにして pxc1 を認識するのでしょうか?スウォームクラスターが確立されているからこそ、相互に通信できるのです。

172.9.16.42 ノード

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e クラスタ名=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/cert \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
-e クラスター参加=pxc1 \
--privileged --name=pxc3 pxc

注意: 8.0以降を使用している場合は、SSL関連のエラーが必ず発生します。

「エラー:0407008A:rsa ルーチン:RSA_padding_check_PKCS1_type_1:無効なパディング」

これは、8.0 以降では接続に SSL が使用され、3 台のマシンが通信するためにキーの一貫性を維持する必要があるためです。

これは証明書を生成するための公式ソリューションであり、誰もが同じセットを使用します。やり方はシンプルです。ホストマシンからファイルを抽出し、他の 2 台のマシンに転送するだけです。上書きしたら、マシンを再起動します。

サーバーキー.pem、サーバー証明書.pem、クライアントキー.pem、クライアント証明書.pem、ca.pem

scp -r [email protected]:/home/pxc /Users/jafir/Downloads/pxc

ノード 40 からデータをコピーし、5 つのファイル以外のすべてのファイルを削除します。

scp -r /Users/jafir/Downloads/pxc [email protected]:/home

41と42にアップロードして上書きしてから再起動してください。

成功

3 つすべてが成功した場合は、再度確認します。

マスターノードはコンテナに入り、mysqlに入って表示する

docker exec -it pxc1 sh
mysql -uroot -p
'wsrep%' のようなステータスを表示します。 

予想通り、ここでのクラスターサイズは3です

docker ネットワーク検査 xxx 

3つのネットワークもあります

チェック

Navicat を使用して、マシンの 1 つにデータベースやテーブルなどを作成すると、3 台のマシンすべてが同期されていることがわかります。

nginx の負荷

172.16.9.48にnginxを設置しました

nginx.conf設定ファイルがない場合、まず作成して設定をテストすることができます。

自作/nginx/log /nginx/etc/nginx.conf など

docker run -d -name nginx nginx
docker cp nginx:/etc/nginx/nginx.conf コピー docker rm -f nginx

nginx.confの設定変更

最後の行(httpと同じレベル)に追加します。

ストリーム {
 アップストリームpxc {
  サーバー 172.16.9.40:3306;
  サーバー 172.16.9.41:3306;
  サーバー 172.16.9.42:3306;
 }
 サーバー{
  聞く 3306;
  proxy_pass pxc;
 }
}
docker run --net=host --name nginx -v /nginx/log/:/var/log/nginx -v /nginx/etc/nginx.conf:/etc/nginx/nginx.conf -d nginx

するとNavicatはhttp://172.16.9.48:3306に接続することでデータベースに接続できるようになります。

これで、docker に pxc クラスターをインストールする方法についての記事は終了です。docker に pxc クラスターをインストールする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker swarm クラスターの障害と例外の詳細な説明
  • Docker Swarmを使用してクラスターを構築する方法
  • Dockerでrabbitmqクラスタ環境を構築する方法
  • redisクラスタを構築するためのdockerの環境構築を詳しく解説
  • Dockerを使用してSparkクラスターを素早く構築する方法
  • Docker を使用して Hadoop 分散クラスターを構築する方法の詳細な説明
  • Docker が ELK Docker クラスター ログ収集システムを構築

<<:  Vue テンプレート構成と Webstorm コード形式仕様設定

>>:  HTML タグ: サブタグと sup タグ

推薦する

Vue プロジェクトでの支払い機能の実装 (WeChat 支払いと Alipay 支払い)

目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...

Dockerでデータディレクトリを移行する方法

目次ディスク使用量の表示ディスク クリーンアップ (軽々しく使用しないでください)データの移行ディス...

Vue のグローバル ウォーターマーク実装例

目次1. 透かしのJsファイルを作成する2. 導入操作2.1 App.vueや他のページでの参照2....

MySQL でプロファイルを使用する方法のチュートリアル

プロフィールとは何ですか?特定の SQL のパフォーマンスを分析したい場合に使用できます。プロファイ...

MySQLグループリンクの使用に関する詳細な説明

MYSQL におけるグループ化とリンクは、データベースの操作やデータのやり取りで最もよく使用される ...

自作の Windows サーバーに egg アプリケーションを展開する方法 (画像とテキスト付き)

1. IEブラウザを使用してVPNにログインする 2. リモートログイン 3. サーバーに最新のn...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

CSS で QR コードスキャンボックスを実装するためのサンプルコード

カメラを開くと通常はスキャンボックスが表示されますが、静的なQRコードではフォーカスを合わせたりスキ...

vue-cropperプラグインは、画像キャプチャとアップロードコンポーネントのカプセル化を実現します。

vue-cropperプラグインをベースにした画像キャプチャとアップロードコンポーネントをカプセル...

vue-cli を使用してプロジェクトを作成し、webpack でパッケージ化する方法

1. 環境を準備する(Node.jsをダウンロードし、環境変数を設定する) 2. vue-cliをグ...

MySQLでデータベースデータ保存ディレクトリを変更する方法

序文MySQL データベースのデフォルトのデータベース ファイルは /var/lib/mysql に...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

MySQL サーバー 5.7.20 のインストールと設定方法のグラフィック チュートリアル

この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...

ウェブサイトの再設計はどの家族にとっても難しい作業です

<br />どの家庭にもそれぞれの問題があり、改訂はどの IT 企業にとっても問題の 1...

Vue vee-validateプラグインの簡単な使い方

目次1. インストール2. インポート3. 検証ルールを定義します(エクスポート用に js ファイル...