Linux MHA 高可用性クラスター

目次

コンセプト

MHA 高可用性データ クラスターの原理

高可用性クラスター構成

パスワード不要のログイン


コンセプト


高可用性クラスター MHA

MHA (マスター高可用性) は、現在、MySQL 高可用性のための比較的成熟したソリューションです。日本の DeNA 企業である Youshimaton (現在は Facebook で働いています) によって開発されました。これは、MySQL 高可用性環境のためのフェイルオーバーおよびマスター ソリューションの優れたセットです。 Boost社のソフトウェア。MySQL フェイルオーバー プロセス中、MHA はデータベース フェイルオーバー操作を 0 ~ 30 秒以内に自動的に完了できます。フェイルオーバー プロセス中、MHA はデータの一貫性を最大限に確保して、ある意味での真の高可用性を実現します。

MHA 高可用性データ クラスターの原理


MHA (Master High Availability) は、オープンソースの MySQL 高可用性ソリューションであり、MySQL のマスター/スレーブ レプリケーションのステータスを自動的に監視し、マスター サーバーに障害が発生した場合にスレーブ サーバーを新しいマスター サーバーに自動的に昇格させることで、MySQL の高可用性を実現します。 。

MHA は次のように動作します。

1. MHA は、MySQL のステータスを監視するためにマスター サーバーとスレーブ サーバーにエージェントをインストールします。

2. マスター サーバーに障害が発生すると、MHA の監視エージェントがマスター サーバーの障害を検出し、スレーブ サーバーを新しいマスター サーバーに昇格させます。

3. スレーブ サーバーを新しいマスター サーバーに昇格する前に、MHA はスレーブ サーバー上の MySQL データをマスター サーバー上のデータと自動的に同期して、データの一貫性を確保します。

4. 新しいマスター サーバーがオンラインになると、MHA は他のスレーブ サーバーを新しいマスター サーバーに自動的に切り替えて、MySQL の高可用性を実現します。

つまり、MHA は MySQL のマスター/スレーブ レプリケーションのステータスを自動的に監視し、マスター サーバーに障害が発生した場合には新しいマスター サーバーに自動的に切り替えることで、MySQL の高可用性を実現します。

高可用性クラスター構成


まず、識別を良くするために

コマンドラインでユーザー名を変更します。

hostnamectl set-ホスト名ノード1

bash: ホスト名を更新する

マネージャー: [マネージャー]                            

メインサーバー: [マスター]                   

スレーブサーバー: [slave1]           

スレーブサーバー: [slave1]      

パスワード不要のログイン


vim を使用して 4 つのサーバー上で /etc/hosts を開き、マネージャー、マスター サーバー、およびスレーブ サーバーの IP とホスト名を書き込みます。

これにより、sshでログインする際に、ホスト名を使用して直接ログインすることができます。

例: SSH ノード 1

192.168.1.126 ノード 1
192.168.1.125 ノード 2
192.168.1.106 ノード 3
192.168.1.105 ノード 4

 

 

4 つの仮想マシンはすべてキーを生成する必要がある

 ssh-keygen -t rsa

 ssh-keygen -t rsa

パスワード不要の設定コピーキー

[4 台のサーバーすべてで、node1 を指定する必要があります]

ssh-copy-id -i .ssh/id_rsa.pub root@node1

ssh-copy-id -i .ssh/id_rsa.pub root@node1

ノード1のauthorized_keysauファイルをノード2/3/4に送信します

【パスワードレスログインを実現】

【知らせ!パスワードなしでログインするには、ノード 1、2、3、および 4 はすべて相互に認証する必要があります]

scp .ssh/authorized_keys root@node2:.ssh

テストするには ssh ノード 2 でログインします

scp .ssh/authorized_keys root@node3:.ssh

テストするには SSH Node3 でログインします

scp .ssh/authorized_keys root@node4:.ssh

テストするには SSH Node4 でログインします

ノード2 [メインサーバー]を開きます

epel-release ソースをノード 2 にダウンロードします。

 yum -y インストール epel-release

[CentOS-Base.repoのソースをyumで取り出してインストールする必要があります]

準備された MySQL ソース コード パッケージをシステムにプルダウンします。

インストールするコマンドを入力します。

yum -y インストール mariadb mariadb-server

ディレクトリに移動してパッケージを見つけてインストールします。

rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

vim は MySQL 設定ファイルを開きます

書く

server-id = 1 [マスター/スレーブ レプリケーションで異なるサーバーを区別するために使用される、MySQL サーバーの一意の識別子を指定します]

log-bin = master-log [マスター/スレーブ レプリケーションでのすべてのデータベース更新操作を記録するバイナリ ログを有効にする]

リレーログ = リレーログ[マスター/スレーブ レプリケーションでスレーブ サーバーがマスター サーバーから更新を受信するために使用されるリレー ログの名前を指定します]

Skip_name_resolve [DNS 解決を無効にすると、MySQL サーバーのパフォーマンスが向上する可能性があります]

[一般に、これらの設定パラメータは、MySQL マスター/スレーブ レプリケーションのセットアップに使用されます。`server-id`、`log-bin`、および `relay-log` は必須パラメータですが、`skip_name_resolve` はオプションです。改善するために使用されます。パフォーマンス]

【MySQL】に書き込む場合

[設定を書き込んだ後、保存して終了し、systemctl restart mariadb を入力して mysql を再起動します]

MySQL にログインし、次のように入力します。

*.* のレプリケーション スレーブを '123' で識別される 'slave'@'%' に許可します。 

[ユーザーにデータベースからの使用を許可する]

[これは、「slave」という名前のユーザーに、すべてのデータベースとすべてのテーブルでスレーブ サーバーとして複製する権限を付与し、パスワードを「123」に設定することを意味します。「%」は、ユーザーが任意のホストから MySQL サーバーに接続できることを意味します。

 *.* のすべてを '123' で識別される 'mha'@'%' に許可します。

[マネージャーがマスターを管理するために使用するユーザーを許可する]

[これは、ユーザー mha にすべてのデータベースのすべてのテーブルに対するすべての権限を付与し、パスワードを 123 に設定することを意味します。% は、任意の IP アドレスから MySQL サーバーに接続できることを意味します]

コマンドを入力します:

 マスターステータスを表示します。

[現在のデータベースのメインサーバーのステータスを表示]

ノード3 [スレーブサーバー]を入力します

準備したソースコードパッケージをnode3にドラッグします。

コマンドを入力します: install mariadb

 yum -y インストール mariadb mariadb-server epel-release

[MariaDB は、MySQL に似たオープンソースのリレーショナル データベース管理システムです]

インストールするコマンドを入力します。

 rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

次に、vim は MySQL のメイン設定ファイルを入力します。

vim /etc/my.cnf

書く:

server-id = 2 [サーバーの一意の識別子を示します]                 

リレーログ = リレーログ[リレーログとバイナリログのファイル名をそれぞれ表します]         

log-bin = master-log [リレーログとバイナリログのファイル名をそれぞれ表します]         

read_only = ON [スレーブサーバーが読み取り専用かどうかを示します]               

relay_log_purge = 0 [リレーログを自動的にクリーンアップするかどうかを示します]           

Skip_name_resolve [DNS 解決をスキップするかどうかを示します]               

log_slave_updates = 1 [サーバーから実行された更新操作を記録するかどうかを示します]

[保存して MySQL を終了し、再起動します]。

再起動コマンドを入力します: systemctl restart mariadb

【MySQL】に書き込む場合

ノード 2 [マスター サーバー]に戻り、show master status を入力し、データベースのステータスを表示します。

ノード3 [スレーブサーバー1]を開きます

MySQLにログインする

入力: サーバーを指定します[スレーブを停止します。指定する前にサービスを閉じる必要があります]

マスターを master_host='192.168.1.125',master_user='slave',master_password='123',master_log_file='master-log.000003',master_log_pos=517 に変更します。

[- `master_host`: master データベースの IP アドレスまたはホスト名を指定します。

[- `master_user`: レプリケーションに使用するユーザー名を指定します。

[- `master_password`: レプリケーションに使用するパスワードを指定します。

[- `master_log_file`: マスター データベースのバイナリ ログ ファイル名を指定します。

[- `master_log_pos`: master データベースのバイナリ ログの複製を開始する場所を指定します。

 メインサーバーを指定したらサービスを起動します

 スレーブを開始します。

[スレーブサーバー(slave)を起動してマスターサーバー(master)とデータを同期するために使用します]

 スレーブのステータスを表示 \G;

[現在のデータベース インスタンスのレプリケーション スレーブ サーバーのステータスを表示するために使用されます。このうち「\G」は、結果をより読みやすい形式で出力し、各属性が 1 行で表示され、見やすくなります。このコマンドは、マスター/スレーブレプリケーションが正常に動作しているかどうかの確認や、スレーブサーバーの遅延などを確認するために使用できます。

*.* 上のすべてを '123' で識別される 'slave'@'%' に許可します。

[管理者がスレーブを管理するために使用するユーザーを許可する]

[これは、任意のホスト上のすべてのデータベースとすべてのテーブルに対するすべての権限をユーザー「スレーブ」に付与し、パスワードを「123」に設定することを意味します。% は、任意のホストがデータベースに接続できることを意味します]

ノード4 [スレーブサーバー2]を入力します。

準備したソースコードパッケージをnode4にドラッグします。

インストールするコマンドを入力します。

 rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

コマンドを入力します: install mariadb

 yum -y インストール mariadb mariadb-server epel-release

[MariaDB は、MySQL に似たオープンソースのリレーショナル データベース管理システムです]

vim は MySQL 設定ファイルを開きます

vim /etc/my.cnf

書く:

server-id = 3 [MySQL サーバーの一意の識別子を 3 に設定します。これは、マスター/スレーブ レプリケーションで異なるサーバーを区別するために使用されます]           

リレーログ = リレーログ[リレーログの保存場所とファイル名プレフィックスを設定]         

log-bin = master-log [バイナリ ログを有効にして、マスター/スレーブ レプリケーションおよびデータ リカバリのためにデータベースを変更するすべての操作を記録します]         

read_only = ON [MySQL サーバーを読み取り専用モードに設定し、データベースへの書き込み操作を禁止します]               

relay_log_purge = 0 [リレー ログの自動パージを無効にし、手動パージが必要]           

Skip_name_resolve [DNS アンチレゾリューションを無効にして接続を高速化する]               

log_slave_updates = 1 [カスケード レプリケーション用に、受信した変更操作も独自のバイナリ ログに記録するようにスレーブ サーバーを設定します]

次に、MySQL を保存して終了し、再起動します。

systemctl mariadb を再起動します

 【MySQL】に書き込む場合

MySQLにログインする

入力: メインサーバーを指定します[指定する前にサービス停止スレーブをシャットダウンしてください;]

マスターをmaster_host='192.168.1.125',master_user='slave',master_password='123',master_log_file='master-log.000003',master_log_pos=529に変更します。

指定後、サービスを起動します

スレーブを開始します。

[スレーブサーバー(slave)を起動してマスターサーバー(master)とデータを同期するために使用します]

スレーブのステータスを表示 \G;

[現在のデータベース インスタンスのレプリケーション スレーブ サーバーのステータスを表示するために使用されます。このうち「\G」は、結果をより読みやすい形式で出力し、各属性が 1 行で表示され、見やすくなります。このコマンドは、マスター/スレーブレプリケーションが正常に動作しているかどうかの確認や、スレーブサーバーの遅延などを確認するために使用できます。

*.* 上のすべてを '123' で識別される 'slave'@'%' に許可します。

[管理者がスレーブを管理するために使用するユーザーを許可する]

[これは、任意のホスト上のすべてのデータベースとすべてのテーブルに対するすべての権限をユーザー「スレーブ」に付与し、パスワードを「123」に設定することを意味します。% は、任意のホストがデータベースに接続できることを意味します]

ノード1に戻る [マネージャー]

準備したソースコードパッケージをマネージャーにプルします

それぞれコマンドを入力します: MySQL をインストールする

yum -y インストール mariadb mariadb-server epel-release

yum -y インストール mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm

mkdir /etc/mha_master を作成します

vim /etc/mha_master/mh​​a.cnf と入力します

書く:

[サーバーのデフォルト]

ユーザー=ママ

パスワード=123

manager_workdir=/etc/mha_master/app1

manager_log=/etc/mha_master/manager.log

リモートワークディレクトリ=/mydata/mha_master/app1

ssh_user=ルート

repl_user=スレーブ

repl_password=123

ping_interval=1

[サーバー1]

hostname=192.168.174.125【主ip】

ssh_port=22

候補者マスター=1

[サーバー2]

ホスト名=192.168.174.106 [最初のスレーブ IP]

ssh_port=22

候補者マスター=1

[サーバー3]

ホスト名=192.168.174.105【2番目のスレーブIP】

ssh_port=22

候補者マスター=1

書き込んだら保存して終了

入力:

masterha_check_ssh --conf=/etc/mha_master/mh​​a.cnf

検出が成功したことを示す画面が表示されます。

再入力: MySQL レプリケーション クラスターが正常かどうかを確認します。

 masterha_check_repl --conf=/etc/mha_master/mh​​a.cnf

最後のステップでエラーが発生した場合!

次のコマンドを入力できます。

*.* 上のすべてを '123' で識別される 'slave'@'%' に許可します。

マスターサーバーとスレーブサーバーのユーザー権限を再設定します

おすすめ

転載: blog.csdn.net/2302_77750172/article/details/131209368