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

推薦する

MySQL 8.0.25 解凍版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25解凍版のインストールチュートリアル、参考までに具体的な内容は以下のとおりです...

MySQL が my.cnf を読み込む順序の詳細

目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...

現在のMySQL接続数を表示する方法の詳細な説明

1. 現在のすべての接続の詳細情報を表示します。 ./mysqladmin -uadmin -p -...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

Echarts 基本入門: 棒グラフと折れ線グラフの一般的な構成

1eChartsの基本手順4つのステップ1 DOMコンテナを見つける2 初期化3 設定オプション4 ...

WeChatアプレットにおけるデータ保存実装方法

目次グローバル変数 globalDataページプライベート変数データストレージ非同期ストレージ(デバ...

Docker で FastDFS ファイル システムを構築する (マルチイメージ チュートリアル)

目次FastDFSについて1. 画像を検索する2. イメージをインストールする3.1. 必要なディレ...

Vueスロットの実装原理についての簡単な説明

目次1. サンプルコード2. 現象を通して本質を見抜く3. 実施原則4. 親コンポーネントのコンパイ...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

React Hooksの詳細な説明

目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...

Linux 論理ボリューム管理 (LVM) の使用法の概要

ディスク領域の管理は、システム管理者にとって重要な日常的なタスクです。ディスク領域が使い果たされると...

VueはAmapを使用して都市の位置特定を実現

この記事では、Amapを使用して都市の位置特定を実現するVueの具体的なコードを参考までに共有します...

MySQLは挿入を使用して複数のレコードを挿入し、データを一括で追加します。

table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...

Linux カーネル デバイス ドライバー 高度な文字デバイス ドライバーのメモ

/****************** * 高度な文字デバイス ドライバー ***********...