MySQL NDB ClusterとはMySQL NDB Cluster は、分散コンピューティング環境に適した、可用性と冗長性に優れた MySQL のバージョンです。 クラスター構築のための準備作業少なくとも 3 台のサーバーを用意します。1 台は管理サーバーとして、2 台はデータ サーバーと SQL サーバーとして用意します。もちろん、サーバーの数は多ければ多いほど良いでしょう。
クラスターのデプロイを開始するまず、MySQL NDB Cluster バイナリ ファイルをダウンロードし、解凍して、次の手順を実行します。 展開管理サーバーシステムを更新する apt update -y && apt upgrade -y && apt install libncurses5 -y ndb_mgmとndb_mgmdを管理サーバーにコピーする scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndb_mgm* [email protected]:/home/mgm 管理サーバーで、ndb_mgm と ndb_mgmd を /usr/local/bin フォルダーにコピーします。 cp -rfv /home/mgm/ndb_mgm* /usr/local/bin ndb_mgm と ndb_mgmd に実行権限を付与する chmod +x /usr/local/bin/ndb_mgm* プロフィールを追加する mkdir /var/lib/mysql-cluster vi /var/lib/mysql-cluster/config.ini config.ini [ndbd デフォルト] # すべてのデータノード上の ndbd プロセスに影響するオプション: NoOfReplicas=2 # フラグメントレプリカの数 DataMemory=98M # データ保存用に割り当てるメモリ量 [ndb_mgmd] # 管理プロセスオプション: HostName=192.168.0.105 # 管理ノードのホスト名またはIPアドレス NodeId=1 # この管理ノードのノードID DataDir=/var/lib/mysql-cluster # 管理ノードのログファイルのディレクトリ [ndbd] # データノード「A」のオプション: # (データノードごとに 1 つの [ndbd] セクション) HostName=192.168.0.104 # ホスト名またはIPアドレス NodeId=2 # このデータノードのノードID DataDir=/data/mysql-cluster/data # このデータノードのデータファイルのディレクトリ [ndbd] # データノード「B」のオプション: # (データノードごとに 1 つの [ndbd] セクション) HostName=192.168.0.106 # ホスト名またはIPアドレス NodeId=3 # このデータノードのノードID DataDir=/data/mysql-cluster/data # このデータノードのデータファイルのディレクトリ [mysqld] # SQL ノード オプション: HostName=192.168.0.104 # ホスト名またはIPアドレス # (追加のmysqld接続は # このノードにさまざまな目的で指定 # ndb_restore の実行などの目的) [mysqld] # SQL ノード オプション: HostName=192.168.0.106 # ホスト名またはIPアドレス # (追加のmysqld接続は # このノードにさまざまな目的で指定 # ndb_restore の実行などの目的) ファイアウォールを開きます。クラスタ管理サービスはデフォルトでポート1186を使用します。 ufw 許可 22 ufw 許可 1186 ufw を有効にする 管理サーバーを初期化して起動する /usr/local/bin/ をコピーします ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1 次の結果が表示されたら、管理サーバーが正常に起動したことを意味します。 root@mgm:/usr/local/bin# ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1 MySQL クラスタ管理サーバー mysql-5.7.33 ndb-7.6.17 ndb_mgm コマンドを再度実行すると、現在のクラスターのステータスを表示できます。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 (接続されていません、192.168.0.104 からの接続を受け入れます) id=3 (接続されていません、192.168.0.106 からの接続を受け入れます) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 (接続されていません、192.168.0.104 からの接続を受け入れます) id=5 (接続されていません、192.168.0.106 からの接続を受け入れます) データサーバーを展開するすべてのデータサーバーで次の操作を実行します システムを更新する apt update -y && apt upgrade -y && apt install libncurses5 -y ファイアウォールを有効にする ufw 許可 22 ufw 許可 2202 ufw を有効にする ndbdとndbmtdをデータサーバーにコピーする #192.168.0.106にコピー scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd [email protected]:/home/ndb1 scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd [email protected]:/home/ndb1 #192.168.0.104にコピー scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd [email protected]:/home/ndb2 scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd [email protected]:/home/ndb2 管理サーバーで、ndbd と ndbmtd を /usr/local/bin フォルダーにコピーします。 #192.168.0.106 cp -rfv /home/ndb1/ndbd /usr/local/bin cp -rfv /home/ndb1/ndbmtd /usr/local/bin #192.168.0.104 cp -rfv /home/ndb2/ndbd /usr/local/bin cp -rfv /home/ndb2/ndbmtd /usr/local/bin ndbd 実行権限を付与する chmod +x /usr/local/bin/ndbd chmod +x /usr/local/bin/ndbmtd /etcの下にmy.cnfファイルを追加します。 vi /etc/my.cnf my.cnf ファイル [mysqld] # mysqld プロセスのオプション: ndbcluster # NDBストレージエンジンを実行する [mysql_cluster] # NDB Cluster プロセスのオプション: ndb-connectstring=192.168.0.105 # 管理サーバーの場所 データ保存用のディレクトリを作成します。このディレクトリは、管理サービスで設定されたパスと一致している必要があります。 mkdir -p /data/mysql-cluster/data データサービスを開始 ルート@ndb1:/usr/local/bin#ndbd 2021-06-20 08:10:23 [ndbd] INFO -- Angel が '192.168.0.105:1186' に接続しました 2021-06-20 08:10:23 [ndbd] INFO -- Angel がノード ID を割り当てました: 3 クラスター管理サーバーに戻り、クラスターのステータスを確認します。データ サービスが正常に接続されていることがわかります。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 (接続されていません、192.168.0.104 からの接続を受け入れます) id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17、開始中、ノードグループ: 0) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 (接続されていません、192.168.0.104 からの接続を受け入れます) id=5 (接続されていません、192.168.0.106 からの接続を受け入れます) 別のサーバー (192.168.0.104) で手順 4、5、6、7 を繰り返します。結果を確認できます。 ルート@ndb2:/usr/local/bin# ndbd 2021-06-20 08:20:10 [ndbd] INFO -- Angel が '192.168.0.105:1186' に接続しました 2021-06-20 08:20:10 [ndbd] INFO -- Angel がノード ID を割り当てました: 2 クラスター管理サーバーに戻り、クラスターのステータスを確認します。すべてのデータ サービスが正常に接続されていることがわかります。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 (接続されていません、192.168.0.104 からの接続を受け入れます) id=5 (接続されていません、192.168.0.106 からの接続を受け入れます) /data/mysql/dataディレクトリでは、データサービスがデータを生成したことがわかります。root@ndb1:~# ls /data/mysql/data/ ndb_3_fs ndb_3_out.log ndb_3.pid SQL Server を展開するMySQL を SQL Server にコピーする scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz [email protected]:/home/ndb2 scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz [email protected]:/home/ndb1 MySQLを解凍し、/usr/localディレクトリにコピーします。 tar -zxvf mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz cp -rfv mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64 /usr/local/ ローカルマシンでmysqlクラスタを起動します。 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server エクスポート PATH=$PATH:/usr/local/mysql/bin ソース /etc/profile ファイアウォールを有効にする ufw 許可 22 ufw 許可 3306 ufw を有効にする MySQLデータ保存用のディレクトリを作成する mkdir -p /data/mysql/data mkdir -p /data/mysql/run mkdir -p /var/log/mysql mysqlユーザーと関連ディレクトリを作成する グループ追加mysql ユーザー追加 -r -g mysql -s /bin/false mysql chown mysql:mysql /data/mysql/data chmod 750 /data/mysql/data chown mysql:mysql /data/mysql/run chmod 750 /data/mysql/run chown mysql:mysql /var/log/mysql chmod 750 /var/log/mysql MySQL設定ファイルを作成する mkdir -p /etc/mysql vi /etc/mysql/my.cnf を編集します。 マイ.cnf [mysqld] # mysqld プロセスのオプション: ndbcluster # NDBストレージエンジンを実行する pid ファイル = /data/mysql/run/mysqld.pid ソケット = /data/mysql/run/mysqld.sock データディレクトリ = /data/mysql/data # ログエラー = /var/log/mysql/error.log # デフォルトでは、ローカルホストからの接続のみを受け入れます バインドアドレス = 192.168.0.106 # さまざまなセキュリティリスクを防ぐために、シンボリックリンクを無効にすることをお勧めします シンボリックリンク = 0 [mysql_cluster] # NDB Cluster プロセスのオプション: ndb-connectstring = 192.168.0.105 # 管理サーバーの場所 [クライアント] ソケット = /data/mysql/run/mysqld.sock MySQLを初期化する /usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql MySQLの初期化によって生成されたルートユーザーのパスワードsF#Hy,IuT6d#を記録します。 root@ndb1:~# /usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql 2021-06-20T12:23:26.874302Z 0 [警告] 暗黙の DEFAULT 値を持つ TIMESTAMP は非推奨です。--explicit_defaults_for_timestamp サーバー オプションを使用してください (詳細についてはドキュメントを参照してください)。 2021-06-20T12:23:27.102146Z 0 [警告] InnoDB: 新しいログファイルが作成されました、LSN=45790 2021-06-20T12:23:27.145317Z 0 [警告] InnoDB: 外部キー制約システム テーブルを作成しています。 2021-06-20T12:23:27.154405Z 0 [警告] 既存の UUID が見つからなかったため、このサーバーが初めて起動されたと想定します。新しい UUID を生成しています: 50a15854-d1c2-11eb-9792-000c29681e23。 2021-06-20T12:23:27.155927Z 0 [警告] Gtid テーブルは使用準備ができていません。テーブル 'mysql.gtid_executed' を開くことができません。 2021-06-20T12:23:28.339372Z 0 [警告] CA 証明書 ca.pem は自己署名されています。 2021-06-20T12:23:28.624534Z 1 [注記] root@localhost の一時パスワードが生成されます: sF#Hy,IuT6d# MySQLを起動する /usr/local/mysql/bin/mysqld_safe --user=mysql & ルートユーザーのパスワードを変更する mysqladmin -uroot -p'sF#Hy,IuT6d#' パスワード '123456' クラスター管理サーバーに戻り、クラスターの状態を確認します。SQL サービスが接続されていることがわかります。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 (接続されていません、192.168.0.104 からの接続を受け入れます) id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17) SQL サービスを別のサーバー (192.168.0.104) にデプロイし、クラスター管理サーバーに戻ってクラスターの状態を確認すると、すべての SQL サービスが正常に接続されていることがわかります。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17) id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17) すべてのクラスター サービスがデプロイされました。クラスターが正常にデプロイされたかどうかをテストしてみましょう。192.168.0.106 の MySQL にデータベースとテーブルを作成します。 データベース「wechat」を作成します。 テーブル wechat.user を作成します ( 列1 varchar(100) NULL、 列2 varchar(100) NULL ) エンジン=ndbcluster デフォルト文字セット=utf8mb4 照合順序はutf8mb4_general_ciです。 データを挿入して表示します。mysql> show databases; +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | |ndbinfo| | パフォーマンススキーマ | |システム| | 微信 | +--------------------+ セット内の 6 行 (0.00 秒) mysql> wechat.user から * を選択します。 空セット (0.02 秒) mysql> wechat.user (列1、列2) に値 ('1'、'2') を挿入します。 クエリは正常、1 行が影響を受けました (0.01 秒) mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 1 | 2 | +---------+---------+ セット内の 1 行 (0.00 秒) 別のSQLサーバークエリでは、結果は成功です mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | |ndbinfo| | パフォーマンススキーマ | |システム| | 微信 | +--------------------+ セット内の 6 行 (0.00 秒) mysql> wechat.user から * を選択します。 空セット (0.07 秒) mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 1 | 2 | +---------+---------+ セット内の 1 行 (0.00 秒) ここで、データ ノードの 1 つをシャットダウンします。管理サーバーでは、ndbd が 1 つをシャットダウンしたことがわかります。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 (接続されていません、192.168.0.106 からの接続を受け入れます) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17) id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17) データを書き込む mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 1 | 2 | +---------+---------+ セット内の1行(0.01秒) mysql> wechat.user (列1、列2) に値 ('3'、'4') を挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 3 | 4 | | 1 | 2 | +---------+---------+ セット内の 2 行 (0.00 秒) 別のSQLサーバーでクエリを実行しても結果は同じです mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 3 | 4 | | 1 | 2 | +---------+---------+ セット内の 2 行 (0.00 秒) 次に192.168.0.106 SQLサービスをシャットダウンします ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスタ構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 (接続されていません、192.168.0.106 からの接続を受け入れます) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17) id=5 (接続されていません、192.168.0.106 からの接続を受け入れます) 192.168.0.104のSQLサービスにデータを書き込む mysql> wechat.user (列1、列2) に値 ('5'、'6') を挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 5 | 6 | | 3 | 4 | | 1 | 2 | +---------+---------+ セット内の 3 行 (0.00 秒) 192.168.0.106のデータサービスとSQLサービスを開始します。 ルート@mgm:/usr/local/bin#ndb_mgm -- NDB クラスタ -- 管理クライアント -- ndb_mgm> 表示 管理サーバーに接続しました: localhost:1186 クラスター構成 --------------------- [ndbd(NDB)] 2 ノード id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0、*) id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17、ノードグループ: 0) [ndb_mgmd(MGM)] 1 ノード id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17) [mysqld(API)] 2ノード id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17) id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17) 192.168.0.106 のデータベースを照会すると、障害期間中に生成されたデータが同期されていることがわかりました。 ルート@ndb1:~# mysql -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは4です サーバーバージョン: 5.7.33-ndb-7.6.17-cluster-gpl MySQL Cluster Community Server (GPL) Copyright (c) 2000、2021、Oracle およびその関連会社。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 mysql> wechat.user から * を選択します。 +---------+---------+ | 列1 | 列2 | +---------+---------+ | 1 | 2 | | 5 | 6 | | 3 | 4 | +---------+---------+ 3 行セット (0.08 秒) データベース クラスターが正常にデプロイされました。クラスターの注意事項をまとめます。
以上がMySQLの高可用性・高性能クラスタの構築方法の詳細です。MySQLの高可用性・高性能クラスタの構築の詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。 以下もご興味があるかもしれません:
|
<<: Flex プログラム Firefox で中国語を入力すると文字化けするバグ
>>: Dockerを使用してプライベートGitLabを構築する2つの方法
win10 + Ubuntu 20.04 LTS デュアルシステムインストール (UEFI + GP...
MySQL が挿入などの操作を実行するときにコミットする必要があるかどうかは、ストレージ エンジン...
ユーティリティ = { /** * 死亡年ですか? * @return {Boolse} true...
目次1. ユーザーが作成したスクリプト2. 単語当てゲーム3. ネットワークカードのトラフィック監視...
1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...
この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...
Crontab は定期的な実行を設定するために使用されるコマンドです。そのデーモン プロセスは cr...
この記事では、参考までに、ビデオアップロード機能を実現するためのVueの具体的なコードを紹介します。...
今日、突然、自分のウェブページで Google や Baidu のような強力な検索エンジンを呼び出す...
XHTML タグとは何ですか? XHTML タグ要素は、XHTML ドキュメントの基本的なコンポーネ...
Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...
<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...
Linux centos7 環境に MySQL をインストールする手順の詳細な紹介MySQLをインス...
pt-ハートビートデータベースがマスターとスレーブ間で複製される場合、複製ステータスとデータ遅延は非...
<br />情報の重複、情報過多、情報強迫、パーソナライズされたカスタマイズ、検索エンジ...