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 パラメータ = イベント値の場合

推薦する

Angularルーティングアニメーションと高度なアニメーション機能の詳細な説明

目次1. ルーティングアニメーション2. グループクエリとスタガー1. ルーティングアニメーションル...

面接官はReactのライフサイクルについてよく質問します

ReactライフサイクルReactのライフサイクルを理解するのに役立つ2つの図React ライフサイ...

テーブル内の要素のドラッグと並べ替えの問題について簡単に説明します

最近、要素テーブルを使用すると、並べ替えの問題によく遭遇します。単純な並べ替えであれば、要素の公式が...

JavaScript配列をツリー構造に変換する方法

1. 需要バックエンドは、フロントエンドがツリー構造(重複データなし)に変換するためのデータを提供し...

例を通してBRタグとPタグの違いを理解する

<br />改行タグの使用<br>改行タグ<br>は終わりのない...

MySQL ストアド プロシージャにおけるループ ステートメント (WHILE、REPEAT、LOOP) の使用法の分析

この記事では、例を使用して、MySQL ストアド プロシージャでのループ ステートメント (WHIL...

HTMLウェブページのMETAタグのコンテンツを書く際のポイント

META タグは、HTML 言語のヘッダー領域にある補助タグです。作成者、日時、Web ページの説明...

iframeを透明にするパラメータ

<iframe src="./ads_top_tian.html" all...

JS 非同期コードユニットテストの魔法 Promise

目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...

Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

目次序文例まとめ序文Vue の親子コンポーネントは、props を通じて親コンポーネントの値を子コン...

MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal

Canal は、Java を使用して開発された Alibaba のオープンソース プロジェクトです...

MySQL ストアド関数(カスタム関数)の定義と使用方法の詳細な説明

ストアド関数ストアド関数とは: SQL コードの一部をカプセル化し、特定の関数を完了して、結果を返し...

Linux での Nginx アンチホットリンクと最適化の実装コード

バージョン番号を非表示バージョン番号は非表示になっていません。セキュリティを強化するために、バージョ...

Rails APIを使用してReactアプリケーションを構築するための詳細な手順

目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...

CSS による要素の中央揃えの原理の分析

CSS で要素の水平方向と垂直方向の中心を設定することは、非常に一般的な要件です。しかし、理論的には...