Docker で MySQL クラスターを構築する方法の例

Docker で MySQL クラスターを構築する方法の例

Docker の基本的な手順:

アップデートパッケージ

yum -y アップデート

Docker仮想マシンをインストールする(centos 7)

yum インストール -y docker

Docker仮想マシンを実行、再起動、シャットダウンする

サービスdocker開始
サービス docker 停止

検索ミラー

docker イメージ名の検索

画像をダウンロード

docker pull イメージ名

ミラーを見る

Docker イメージ

画像の削除

docker rmi イメージ名

コンテナの実行

docker run 起動パラメータ イメージ名

コンテナリストを表示

ドッカーps -a

Java 環境を使用する場合は、次のようにします。

検索:
[root@VM_71_225_centos ~]# docker search java
インデックス 名前 説明 星 公式 自動化
docker.io docker.io/node Node.js は JavaScript ベースのプラットフォームです... 5752 [OK]
docker.io docker.io/tomcat Apache Tomcat はオープンソースの実装です... 1891 [OK]
docker.io docker.io/java Java は並行、クラスベース、オブジェクト指向の... 1745 [OK]
docker.io docker.io/openjdk OpenJDK はオープンソースの実装です... 1031 [OK]
ダウンロード:
[root@VM_71_225_centos ~]# docker pull docker.io/java
デフォルトタグの使用: 最新
リポジトリ docker.io/library/java をプルしようとしています...
最新: docker.io/library/java からプル
5040bd298390: ダウンロード中 [=> ] 1.572 MB/51.36 MB
走る:
[root@VM_71_225_centos ~]# docker run -it --name myjava docker.io/java bash
ルート@25623e12b759:/# java


-i: コンテナを対話モードで実行します。通常は -t と一緒に使用されます。


-t: コンテナの疑似入力端子を再割り当てします。通常は -i と一緒に使用されます。

PXC クラスターをインストールします (ここでは MySQL PXC クラスターとレプリケーション クラスターの長所と短所については説明せず、PXC クラスター ソリューション [マルチノード バックアップと強力な関連付け] を選択します)。

PXCイメージのインストール

docker pull percona/percona-xtradb-cluster

ローカル画像を表示

[root@VM_71_225_centos ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/hello-world 最新 e38bc07ac18e 2 か月前 1.85 kB
docker.io/percona/percona-xtradb-cluster 最新 f1439de62087 3 か月前 413 MB
docker.io/java 最新 d23bdf5b1b1b 17 か月前 643 MB

docker.io/percona/percona-xtradb-cluster は長すぎるので、名前を変更します。

[root@VM_71_225_centos ~]# docker tag percona/percona-xtradb-cluster pxc
[root@VM_71_225_centos ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/hello-world 最新 e38bc07ac18e 2 か月前 1.85 kB
docker.io/percona/percona-xtradb-cluster 最新 f1439de62087 3 か月前 413 MB
pxc 最新 f1439de62087 3か月前 413 MB
docker.io/java 最新 d23bdf5b1b1b 17 か月前 643 MB

net1 ネットワーク セグメントを作成します。

docker ネットワーク作成 --subnet=172.18.0.0/16 net1

5 つのデータ ボリュームを作成します (pxc はホスト マシンのデータに直接アクセスできないため、5 つの docker データ ボリュームを作成します)

docker ボリューム作成 v1
docker ボリューム作成 v2
docker ボリューム作成 v3
docker ボリューム作成 v4
docker ボリューム作成 v5

データ ボリュームの場所を表示します。

[root@VM_71_225_centos コード]# docker inspect v1
[
  {
    "ドライバー": "ローカル",
    「ラベル」: {},
    「マウントポイント」: 「/var/lib/docker/volumes/v1/_data」、
    「名前」: 「v1」、
    「オプション」: {},
    「スコープ」: 「ローカル」
  }
]

5ノードのPXCクラスタを作成する

#最初の MySQL ノードを作成します。 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

2 番目のノードを作成する前に 2 分間待機します。2 番目のノード インスタンスを開始する前に、最初のノードがインスタンス化されるまで待機します。そうしないと、即座に停止します。

追加のノードを作成します。

# 2 番目の MySQL ノードを作成します。 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
#3 番目の MySQL ノードを作成します。 docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
# 4 番目の MySQL ノードを作成します。 docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
# 5 番目の MySQL ノードを作成します。 docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

任意の MySQL ノードにデータベースを作成するためのテスト:

mysql -h 172.18.0.3 -uroot -pabc123456

mysql> データベーステストを作成します。
クエリは正常、1 行が影響を受けました (0.03 秒)

他のノード データベースにログインすると、それらが同期されて単純な MySQL クラスターが形成されていることがわかります。

高可用性と負荷分散のためにHaproxyをインストールする

プルハプロキシ

docker プル haproxy

Haproxy 設定ファイルの書き込み

vi /home/soft/haproxy.cfg

設定ファイルは次のとおりです。

グローバル
  #作業ディレクトリ chroot /usr/local/etc/haproxy
  #ログファイル、rsyslogサービス内のlocal5ログデバイス(/var/log/local5)を使用、レベル情報
  ログ 127.0.0.1 local5 情報
  #デーモンプロセス実行中のデーモン
​
デフォルト
  ロググローバル
  モード http
  #ログフォーマットオプション httplog
  # ロードバランシングのハートビート検出記録をログに記録しないオプション dontlognull
  #接続タイムアウト(ミリ秒)
  タイムアウト接続5000
  #クライアントタイムアウト(ミリ秒)
  タイムアウトクライアント 50000
  #サーバーのタイムアウト(ミリ秒)
  タイムアウトサーバー50000
​
#監視インターフェース listen admin_stats
  #監視インターフェースアクセス IP とポートバインド 0.0.0.0:8888
  #アクセスプロトコルモード http
  #URI 相対アドレス 統計 uri /dbs
  #統計レポート formatstats realm グローバル\統計
  #ログインアカウント情報統計認証管理者:abc123456
#データベース負荷分散 listen proxy-mysql
  #アクセスIPとポートバインド0.0.0.0:3306 
  #ネットワークプロトコルモード tcp
  #負荷分散アルゴリズム(ラウンドロビンアルゴリズム)
  # ポーリングアルゴリズム: ラウンドロビン
  #重み付けアルゴリズム: static-rr
  # 最小接続アルゴリズム: leastconn
  #リクエスト元IPアルゴリズム: ソース 
  バランスラウンドロビン
  #ログフォーマットオプション tcplog
  #MySQL に権限のない haproxy ユーザーを作成し、パスワードを空に設定します。 Haproxyはこのアカウントを使用してMySQLデータベースオプションmysql-check user haproxyでハートビート検出を実行します
  サーバー MySQL_1 172.18.0.2:3306 チェックウェイト 1 maxconn 2000 
  サーバー MySQL_2 172.18.0.3:3306 チェックウェイト 1 maxconn 2000 
  サーバー MySQL_3 172.18.0.4:3306 チェックウェイト 1 maxconn 2000 
  サーバー MySQL_4 172.18.0.5:3306 チェックウェイト 1 maxconn 2000
  サーバー MySQL_5 172.18.0.6:3306 チェックウェイト 1 maxconn 2000
  #キープアライブを使用してデッドリンクを検出するオプション tcpka

最初のHaproxy負荷分散サーバーを作成する

次のようにコードをコピーします
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy

h1コンテナに入り、Haproxyを起動します。

docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

起動が成功したかどうかを確認します。

http://ip:4001/dbs にアクセスしてください

ダブルクリックホットスタンバイを実装するためにkeepaliveをインストールする

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker経由でMysqlコンテナ+Tomcatコンテナ接続環境を構築する詳細説明
  • Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明
  • DockerでMySQLを構築し、データをマウントするプロセス全体

<<:  SSHトンネルを使用してMySQLサーバーに接続する方法

>>:  Vue イベントの $event パラメータ = イベント値の場合

推薦する

mysql5.7.18のインストールと初期パスワードの変更方法

CentosでのMySQLのインストールについては、以前の記事を参照してください。 Centos7....

iptables の再起動後に Docker の iptables ルールの完全なプロセスが失われる

原因と結果1. ansibleコマンドを使用してジャンプサーバー上のマシンBをテストすると、次のエラ...

React で複数の setStates が何回呼び出されるのでしょうか?

目次1. 2 つの setState を何回呼び出すのですか? 2. 2 つの setState の...

Mac 向け MySQL 5.7.17 のインストールと設定のチュートリアル

1. MySQLをダウンロードする公式サイトのダウンロードページをクリックすると次のページに入ります...

Centos で MySQL パスワードを変更する方法

1. MySQL ログイン設定を変更します。 # vim /etc/my.cnf文を追加: skip...

Vue コンポーネントでのアンチシェイクとスロットリングの使用例の分析

入力ボックスへのユーザー入力、ウィンドウのサイズ変更、スクロール、Intersection Obse...

CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...

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

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

CentOS 8で自動更新を設定するための手順を完了する

データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...

画像ファイルの形式とその選択方法

1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...

Linux CentOS 7.4 で mysql5.7.20 のパスワードを変更する方法

MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...

MySQL 5.7.21 のインストールとパスワード設定のチュートリアル

MySQL5.7.21のインストールとパスワード設定のチュートリアルは次のとおりです。公式リファレン...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

MySQLエラー10061を解決する方法

この記事では、「'localhost' (10061) の MySQL サーバーに接...

mysql5.7.19 winx64 インストールおよび構成方法のグラフィック チュートリアル (win10)

mysql 5.7.19 winx64のインストールチュートリアルは以下のように記録され、みんなと...