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 で無限テキストカルーセルを実装する一般的な方法

推薦する

VMware 仮想マシンのネットワークの問題の解決方法

目次1. 問題の説明2. 問題解決1. 仮想マシンシステムのインストール時にネットワークがない場合2...

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

CSSの4種類の配置の違いの詳細な説明

フロントエンド開発でよく使われるCSSの配置方法は、位置決めには、通常位置決め、相対位置決め、絶対位...

Centos7 に PHP と Nginx をインストールする詳細なチュートリアル

Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...

MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、ループでレコードを追加する...

MySQL 学習ノート: データ エンジン

現在のデータベースでサポートされているエンジンを表示します エンジンを表示 +-----------...

MySQL の innodb_flush_log_at_trx_commit と sync_binlog を区別する方法

2 つのパラメータ innodb_flush_log_at_trx_commit と sync_bi...

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

MySQL REVOKE でユーザー権限を削除する

MySQL では、REVOKE ステートメントを使用してユーザーの特定の権限を削除できます (ユーザ...

5分でReactルーティングについてお教えします

目次ルーティングとは純粋コンポーネントの基本的な使用純粋なコンポーネントの使用に関する注意事項ルーテ...

純粋な HTML+CSS でオリンピック リングを実装するためのサンプル コード

レンダリング コード - 青と黄色のリングを例に挙げます <div class="コ...

Webpack4プラグインの実装原理についての簡単な説明

目次序文知る練習すれば完璧になる序文wabpack では、ローダーの他にプラグインがコア機能です。プ...

MySQL の binlog_format モードと設定の詳細な分析

MySQL レプリケーションには、SQL ステートメント ベースのレプリケーション (SBR)、行ベ...

Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vuex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中型ストレージを...