序文自作の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 コード形式仕様設定
余計なことは言わないで、コードだけ見てみましょう〜 -- テーブル内のフィールドコメントを表示および...
FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...
-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...
1. インラインスタイル仮想DOMにインラインスタイルを追加するには、式を使用してスタイルオブジェク...
サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...
序文以前のプロジェクトでは、SQL の CASE WHEN ソート関数が使用されました。ではブログメ...
この記事の例では、滝の流れの効果を実現するためのjsの具体的なコードを参考までに共有しています。具体...
方法 1: INSERT INTO t1(field1,field2) VALUE(v001,v00...
このチュートリアルでは、LinuxでのMySQL 5.6.33のインストールと設定方法を参考までに紹...
1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...
1. テストテーブルを作成する テーブル `testsign` を作成します ( `userid`...
目次1. まず、pycharmを使用してDjangoプロジェクトを作成し、関連する環境を設定します。...
エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...
目次関数呼び出しの最適化関数呼び出しの最適化MySQL 関数は、内部的に決定論的または非決定論的とし...
序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...