序文自作のMySQLクラスタソリューションは、keepalived、MHA、PXC、MYSQLマスタースレーブなど、数多くありますが、当社独自の状況と条件に応じて、PXCを使用して構築することにしました。最大の利点は、複数のマスターと複数のバックアップ、つまりマスタースレーブ統合があり、同期遅延の問題がなく、便利で使いやすいことです。 私はpxcの直接インストールとdockerコンテナのインストールの両方を使用しましたが、個人的にはdockerでのインストールの方が便利でメンテナンスも簡単だと感じたので、この方法を使用することをお勧めします。 環境を構築する
事前準備Linux では、ファイアウォールをオフにするか、必要な特定のポートを開く必要があります。pxc には mysql が付属しており、バージョンは一貫しているため、マシンに mysql は必要ありません。Linux に付属するセキュリティ強化機能である SELINUX をオフにするのが最善です。 これらの構成は 3 台のマシンすべてで実行する必要があるので注意してください。 1. pxcに必要なポートを開く
|
ポート | 関数 |
---|---|
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 データ
注意: ここで権限を与える必要があります。そうしないと、多くの場所でエラーが報告されます。
/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 *
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 台のマシンすべてが同期されていることがわかります。
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
最後の行(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 をよろしくお願いいたします。
<<: Vue テンプレート構成と Webstorm コード形式仕様設定
MySQL 8.0.25解凍版のインストールチュートリアル、参考までに具体的な内容は以下のとおりです...
目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...
1. 現在のすべての接続の詳細情報を表示します。 ./mysqladmin -uadmin -p -...
MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...
1eChartsの基本手順4つのステップ1 DOMコンテナを見つける2 初期化3 設定オプション4 ...
目次グローバル変数 globalDataページプライベート変数データストレージ非同期ストレージ(デバ...
目次FastDFSについて1. 画像を検索する2. イメージをインストールする3.1. 必要なディレ...
目次1. サンプルコード2. 現象を通して本質を見抜く3. 実施原則4. 親コンポーネントのコンパイ...
まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...
冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...
目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...
ディスク領域の管理は、システム管理者にとって重要な日常的なタスクです。ディスク領域が使い果たされると...
この記事では、Amapを使用して都市の位置特定を実現するVueの具体的なコードを参考までに共有します...
table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...
/****************** * 高度な文字デバイス ドライバー ***********...