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

推薦する

SpringBoot でマイクロサービスを構築するために Docker を使用した実際の記録を分析する

それは何ですか? Spring Boot は、Spring オープンソース組織のサブプロジェクトであ...

Windows10システムにスーパーセットをインストールする手順

Superset は、エレガントなインターフェースとデータ テーブルに基づく動的なデータ生成を主な機...

Apache クロスドメイン リソース アクセス エラーの解決策

多くの場合、大規模および中規模の Web サイトでは、静的リソース (フォント ファイル、画像など)...

CSSセレクタを使用してラベルスタイルを設定するサンプルコード

CSS セレクターHTML タグにスタイルを設定すると、タグの属性を設定できます。 <div ...

VMware 仮想マシンでの Centos8 ブリッジの静的 IP 設定方法

1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...

関連するプロパティのリストを含む HTML エリア イメージ ホットスポットの使用の概要

<area> タグは主にイメージマップで使用されます。イメージマップにアクティブ領域 (...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Vue3の一般的なAPIの使用方法の紹介

目次ライフサイクルの変化反応的な参照vue2.x では ref を使用して要素タグを取得します。vu...

MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。

目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...

設定ファイルを変更した後、操作を再開します

余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...

クールな点滅アラームボタンをおすすめします

効果は以下のとおりです。 コードは次のとおりです (クリックすると展開してソース コードが表示されま...

docker-compose で Jenkins をインストールする際の実践的なメモ

ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...

Docker Nginxコンテナの制作と展開の実装方法

クイックスタート1. Docker Hubでnginxイメージを見つけるdocker 検索 ngin...

JavaScriptを使用してページ効果を作成する

11. JavaScriptを使用してページ効果を作成する11.1 DOMプログラミングDOM プロ...

写真をアップロードして顔を認識する Vue+axios サンプルコード

目次Axios リクエストQs処理データ分析Vantアップロードファイル形式完全なコードこの記事では...