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 タグ

推薦する

Typescriptを使用してWeChatミニプログラムを開発するための詳細な手順

Typescript の利点については詳しく説明する必要はありません。ご興味があれば、(https:...

Linux システムで grub.cfg ファイルの破損を修復する手順

目次1. grub.cfg ファイルの紹介1. grub.cfg ファイルの場所2. grub.cf...

MySQLの手順を完全に削除する

目次1. まずMySQLサーバーを停止する2. MySQLサーバーをアンインストールする3. MyS...

テーブル関連の配置とJavascript操作テーブル、tr、td

適切に機能するテーブル プロパティ設定:コードをコピーコードは次のとおりです。 <テーブル セ...

Element-UIの10の驚くべきトリックのまとめ

目次el-scrollbar スクロールバーel-uploadはクリックをシミュレートしますel-s...

MySQL レプリケーションの利点と原則を詳しく説明します

レプリケーションとは、マスター データベースの DDL および DML 操作をバイナリ ログを介して...

MySQL で複数のテーブルにビューを作成する方法

MySQLでは、2つ以上のベーステーブルにビューを作成します。学生テーブルとstu_infoテーブル...

mysql 8.0.19 win10 クイックインストールチュートリアル

このチュートリアルでは、参考までにMySQL 8.0.19のインストールチュートリアルを共有します。...

vite+vue3+element-plus プロジェクトをビルドする手順

viteを使用してvue3プロジェクトを構築するターミナルで次のコマンドを実行すると、Vite を使...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...

Vueでルーティング権限を動的に設定する主なアイデア

以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとは...

CSSの2つの特別な値は、カスケードの継承と初期メソッドを制御するために使用されます。

カスケードを制御するために CSS の任意のプロパティに割り当てることができる特別な値が 2 つあり...

MySQLにおけるrow_numberの実装プロセス

1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

Dockerコンテナ相互接続の予備的な実践についての簡単な説明

1. Dockerコンテナ間の相互接続Docker は現在、軽量の仮想化ソリューションとなっています...