Ubuntu は、Mysql+Keepalived の高可用性実装 (デュアルアクティブ ホットスタンバイ) を構築します。

Ubuntu は、Mysql+Keepalived の高可用性実装 (デュアルアクティブ ホットスタンバイ) を構築します。

Mysql5.5 デュアルマシン ホットスタンバイ

実装

2つのMySQLをインストールする

MySQL 5.5をインストールする

sudo apt-getアップデート

apt-get で aptitude をインストール
aptitude で mysql-server-5.5 をインストールします
またはsudo apt-cache search mariadb-server
apt-get install -y mariadb-server-5.5

アンインストール

sudo apt-get 削除 mysql-*
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

権限を設定する

テキストエディタで /etc/mysql/my.cnf を開きます。
#バインドアドレス = 127.0.0.1

mysql -u ルート -p
'root' で識別される root@'%' に、 grant オプションを使用して *.* のすべての権限を許可します。
権限をフラッシュします。

マスター間同期用に2つのMySQLサーバーを構成する

ノード1を構成する

テキストエディタで /etc/mysql/my.cnf を開きます。

server-id = 1 #ノードID
log_bin = mysql-bin.log #logbinlog_format = "ROW" #ログ形式 auto_increment_increment = 2 #自動増分 ID 間隔 (= ID の競合を防ぐためのノード数)
auto_increment_offset = 1 #自動増分ID(ノードID)の開始値
binlog_ignore_db=mysql #同期されていないデータベース binlog_ignore_db=information_schema
binlog_ignore_db=パフォーマンススキーマ

MySQLを再起動する

サービスmysqlの再起動
mysql -u ルート -p

ノード1のbinlogログの位置を記録する

マスターステータスを表示します。
mysql-bin.000001 245 mysql、情報スキーマ、パフォーマンススキーマ

ノード2を構成する

テキストエディタで /etc/mysql/my.cnf を開きます。

サーバーID = 2
log_bin = mysql-bin.log                    
relay_log = mysql-relay-bin.log #リレーログ log_slave_updates = ON #リレーログが実行されると、変更がログに記録されます read_only = 0
binlog_format = "行"
自動増分 = 2
自動増分オフセット = 2
binlog_ignore_db = mysql
binlog_ignore_db=情報スキーマ
binlog_ignore_db=パフォーマンススキーマ
レプリケート_ignore_db=mysql
replicate_ignore_db=情報スキーマ
replicate_ignore_db=パフォーマンススキーマ

マスターとスレーブの設定

mysql -u ルート -p

マスターを変更 
       MASTER_HOST='192.168.1.21', 
       MASTER_USER='root'、 
       MASTER_PASSWORD='root'、 
       MASTER_LOG_FILE='mysql-bin.000001', 
       マスターログPOS = 245;

#同期を開始スレーブを開始

#同期ステータスSlave_IO_RunningとSlave_SQL_Runningの両方がYesになっている必要があります       
スレーブステータスを表示します。  

ノード2のbinlogログの位置を記録する

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

mysql-bin.000001 1029 mysql、情報スキーマ、パフォーマンススキーマ

マスター(ノード1)を構成する

テキストエディタで /etc/mysql/my.cnf を開きます。

リレーログ = mysql-リレー-bin.log
log_slave_updates = オン
読み取り専用 = 0
レプリケート_ignore_db=mysql
replicate_ignore_db=情報スキーマ
replicate_ignore_db=パフォーマンススキーマ

同期をオンにする

mysql -u ルート -p

マスターを変更 
       MASTER_HOST='192.168.1.20', 
       MASTER_USER='root'、 
       MASTER_PASSWORD='root'、 
       MASTER_LOG_FILE='mysql-bin.000001', 
       マスターログPOS = 1029;

#同期を開始スレーブを開始

#同期ステータスSlave_IO_RunningとSlave_SQL_Runningの両方がYesになっている必要があります       
スレーブステータスを表示します。

例外処理

マスター情報構造を初期化できませんでした。詳細なエラー メッセージは MySQL エラー ログで確認できます。
解決策: スレーブをリセットする

Keepalivedをインストールして設定する

Keepalivedをインストールする

#依存 sudo apt-get install -y libssl-dev
sudo apt-get install -y openssl 
sudo apt-get install -y libpopt-dev
sudo apt-get install -y libnl-dev libnl-3-dev libnl-genl-3.dev
apt-get インストールデーモン
apt-get で libc-dev をインストールします
apt-get で libnfnetlink-dev をインストールします
apt-get で libnl-genl-3.dev をインストールします

#インストール apt-get インストール keepalived

#コンパイルとインストール cd /usr/local
https://www.keepalived.org/software/keepalived-2.2.2.tar.gz をダウンロードしてください
tar -zxvf キープアライブド-2.2.2.tar.gz 
mv キープアライブド-2.2.2 キープアライブド
./configure --prefix=/usr/local/keepalived
sudo メイク && メイク インストール

#ログを開く sudo vim /etc/rsyslog.d/50-default.conf 

*.=情報;*.=通知;*.=警告;\
        auth、authpriv.none;\
        cron、デーモン。なし;\
        メール、ニュース.なし -/var/log/messages
        
sudo サービス rsyslog を再起動 
tail -f /var/log/メッセージ

sudo mkdir /etc/sysconfig
sudo cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
sudo cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
sudo cp /usr/local/keepalived/sbin/keepalived /sbin/
sudo mkdir /etc/keepalived
sudo cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

ノード情報を構成する

ノード1 192.168.1.21

vim /etc/keepalived/keepalived.conf

グローバル定義 {
   router_id MYSQL_HA #現在のノード名}
vrrp_インスタンス VI_1 {    
    状態 BACKUP #両方の構成ノードが BACKUP です
    interface eth0 #仮想IPをバインドするネットワークインターフェース virtual_router_id 51 #VRRPグループ名。各ノードが同じVRRPグループに属していることを示すために、両方のノードの設定は同じである必要があります priority 101 #ノードの優先度。他のノードの優先度を低いものに変更します advert_int 1 #マルチキャスト情報の送信間隔。両方のノードの設定は同じである必要があります nopreempt #プリエンプトしません。優先度の高いマシンにのみ設定し、優先度の低いマシンには設定しないでください authentication { #認証情報を設定します。両方のノードで一致している必要があります auth_type PASS
        認証パスワード 123456
    }
    virtual_ipaddress { #仮想IPを指定します。両方のノードに同じ192.168.1.111を設定する必要があります。
    }
}
virtual_server 192.168.1.111 3306 { #Linux 仮想サーバー (LVS) 構成 delay_loop 2 #2 秒ごとに real_server の状態をチェック lb_algo wrr #LVS スケジューリング アルゴリズム、rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR #LVS クラスター モード、NAT|DR|TUN
    persistence_timeout 60 #セッションホールドタイムプロトコルTCP #使用されているプロトコルはTCPかUDPか

    リアルサーバー 192.168.1.21 3306 {
        重み 3 #重みnotify_down /usr/local/bin/mysql.sh #サービスダウンを検出した後に実行されるスクリプト TCP_CHECK {
            connect_timeout 10 #接続タイムアウト nb_get_retry 3 #再接続回数 delay_before_retry 3 #再接続間隔 connect_port 3306 #ヘルスチェックポート}
    }    
}

ノード2 192.168.1.20

vim /etc/keepalived/keepalived.conf

グローバル定義 {
   router_id MYSQL_HA #現在のノード名}
vrrp_インスタンス VI_1 {
    状態 BACKUP #両方の構成ノードが BACKUP です
    interface eth0 #仮想IPをバインドするネットワークインターフェース virtual_router_id 51 #VRRPグループ名。各ノードが同じVRRPグループに属していることを示すために、両方のノードの設定は同じである必要があります priority 100 #ノードの優先度。他の優先度は低くする必要があります advert_int 1 #マルチキャスト情報の送信間隔。両方のノードの設定は同じである必要があります nopreempt #プリエンプトしないでください。優先度の高いマシンにのみ設定し、優先度の低いマシンには設定しないでください authentication { #認証情報を設定します。両方のノードで一致している必要があります auth_type PASS
        認証パスワード 123456
    }
    virtual_ipaddress { #仮想IPを指定します。両方のノードに同じ192.168.1.111を設定する必要があります。
    }
}
virtual_server 192.168.1.111 3306 { #Linux 仮想サーバー (LVS) 構成 delay_loop 2 #2 秒ごとに real_server の状態をチェック lb_algo wrr #LVS スケジューリング アルゴリズム、rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR #LVS クラスター モード、NAT|DR|TUN
    persistence_timeout 60 #セッションホールドタイムプロトコルTCP #使用されているプロトコルはTCPかUDPか

    リアルサーバー 192.168.1.20 3306 {
        重み 3 #重みnotify_down /usr/local/bin/mysql.sh #サービスダウンを検出した後に実行されるスクリプト TCP_CHECK {
            connect_timeout 10 #接続タイムアウト nb_get_retry 3 #再接続回数 delay_before_retry 3 #再接続間隔 connect_port 3306 #ヘルスチェックポート}
    }
}

例外処理スクリプトの作成

実行ファイル:

#!/bin/sh
キルオールキープアライブ

権限を割り当てる

chmod +x /usr/local/bin/mysql.sh
###テストの再起動 keepalived

サービスkeepalivedの再起動

ログを表示

tail -f /var/log/メッセージ

仮想IPを表示

ip addr # または ip a または ifconfig

#マスターノードには仮想IPが与えられます
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 状態 UP グループ デフォルト qlen 1000
    リンク/イーサ 52:54:9e:17:53:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.21/24 brd 192.168.1.255 スコープ グローバル eth0
       valid_lft 永久 preferred_lft 永久
    inet 192.168.1.111/32 スコープ グローバル eth0
       valid_lft 永久 preferred_lft 永久

マスターノードのmysqlサービスをシャットダウンします

サービスmysql停止

ログ情報

#マスターノード 8月10日 15:00:30 i-7jaope92 Keepalived_healthcheckers[4949]: [192.168.1.20]:3306へのTCP接続に失敗しました!!!
8月10日 15:00:30 i-7jaope92 Keepalived_healthcheckers[4949]: VS [192.168.1.111]:3306 からサービス [192.168.1.20]:3306 を削除しています
8月10日 15:00:30 i-7jaope92 Keepalived_healthcheckers[4949]: VS [192.168.1.111]:3306 でサービス [192.168.1.20]:3306 の [/usr/local/bin/mysql.sh] を実行しています
8月10日 15:00:30 i-7jaope92 Keepalived_healthcheckers[4949]: VS [192.168.1.111]:3306のクォーラム1-0=1 > 0が失われました
8月10日 15:00:30 i-7jaope92 Keepalived_vrrp[4950]: VRRP_Instance(VI_1) が0優先度を送信しています
8月10日 15:00:30 i-7jaope92 カーネル: [100918.976041] IPVS: __ip_vs_del_service: 入力

#スレーブノード 8月10日 15:00:31 i-6gxo6kx7 Keepalived_vrrp[718]: VRRP_Instance(VI_1) がマスター状態に移行
8月10日 15:00:32 i-6gxo6kx7 Keepalived_vrrp[718]: VRRP_Instance(VI_1)がマスター状態に入る

仮想IPはマスターノードからスレーブノードに移動する

ip a

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 状態 UP グループ デフォルト qlen 1000
    リンク/イーサ 52:54:9e:e7:26:5c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.20/24 brd 192.168.1.255 スコープ グローバル eth0
       valid_lft 永久 preferred_lft 永久
    inet 192.168.1.111/32 スコープ グローバル eth0
       valid_lft 永久 preferred_lft 永久

MySQL接続テスト

mysql -h 192.168.1.111 -u ルート -p 

これで、Ubuntu 上での MySQL + Keepalived の高可用性の構築 (デュアルアクティブ ホットスタンバイ) に関するこの記事は終了です。MySQL + Keepalived の高可用性に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの高可用性負荷分散構成を実装するためのKeepalived+HAProxy
  • HAProxy を使用して MySQL レプリケーションの遅延を検出するチュートリアル
  • MySQL マスタースレーブ構成と haproxy および keepalived 構築プロセスの分析

<<:  HTMLフレームワーク_Powernode Javaアカデミー

>>:  ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

推薦する

MySQL ストアド関数の詳細な紹介

目次1. ストアド関数を作成する2. ストアド関数の呼び出し3. 保存された関数を削除する4. スト...

Vuexの役割についての深い理解

目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...

LINUX でプロセスを表示する 4 つの方法 (要約)

プロセスは CPU とメモリ内で実行されるプログラム コードであり、各プロセスは 1 つ以上のプロセ...

Dockerイントラネット侵入FRP展開の実装プロセスの分析

1. 設定ファイルディレクトリを作成するcd /ホームディレクトリmkdir frp最終的なディレク...

Mysql Explainコマンドの使用と分析

mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...

Vueのフロントエンドとバックエンドのポートの不一致の問題を解決する

Vue のフロントエンドとバックエンドのポートが一致していませんconfig index.jsファイ...

プロジェクトにaxiosをカプセル化する実際のプロセス

目次序文axiosカプセル化の利点パッケージのアイデア設定の優先順位axiosインスタンス構成1. ...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

MySQL 5.7.17 のインストールと使用方法のグラフィックチュートリアル

MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...

Mysql 8.0.18 ハッシュ結合テスト (推奨)

ハッシュ結合ハッシュ結合は実行にインデックスを必要とせず、ほとんどの場合、現在のブロックネストループ...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

初心者向け入門チュートリアル: ドメイン名の解決とバインディング

では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

HTML チュートリアル: 定義リスト

<br />原文: http://andymao.com/andy/post/104.h...