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 は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)

まずケースを見てみましょう。vue+swiper を使用して実装します。スライドの高さが異なる場合、...

Navicat が MySql サーバーにリモート接続できない問題の解決策

Navicat が MySql サーバーにリモート接続できない問題の解決策は、先頭に書かれています:...

MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、データ テーブルに新しいフ...

Vue での weixin-js-sdk の一般的な使用方法の詳細な説明

リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...

Prometheusコンテナのデプロイメントのための実用的なソリューション

環境ホスト名IPアドレス仕えるプロメテウス192.168.237.137プロメテウス、グラファナノー...

一般的な docker コマンドの概要 (推奨)

1. 要約:一般的に、次のカテゴリに分類できます。 Docker 環境情報 — docker [i...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

Vue-pdfはPDFファイルのオンラインプレビューを実装します

序文ほとんどのプロジェクトでは、PDF ファイルのオンライン プレビューに遭遇するでしょう。このプロ...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

MySQL max_allowed_pa​​cket 設定

max_allowed_pa​​cket は、受け入れるパケットのサイズを設定するために使用される ...

CentOS に PHP5 をインストール、PHP をアンインストール、PHP7 をインストールするチュートリアル

まず、PHP5をインストールするのはとても簡単ですyum install php PHP5 を使用し...

docker に openjdk をインストールして jar パッケージを実行する方法

画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...