第1章: keepalivedの紹介 VRRP プロトコルの目的は、静的ルーティングの単一点障害問題を解決することです。 第2章: keepalivedの仕組み 2.1 システムネットワークサービスとしての高可用性機能(フェイルオーバー) keepalived 高可用性機能の基本原理は次のとおりです。 マスター ロールを持つホストに障害が発生したり、誤動作したりすると、バックアップ ロールを持つホストが、VIP リソースと対応するリソース サービスの引き継ぎを含め、マスター ホストのすべての作業を自動的に引き継ぎます。 マスターの役割を持つホストの障害が修復されると、そのホストは元々処理していた作業を自動的に引き継ぎます。バックアップの役割を持つホストも、マスターホストの障害時に引き継いだ作業を解放します。このとき、2 つのホストは起動時の元の役割と動作状態に戻ります。 2.2 VRRPとは VRRP は、選出メカニズムを通じて仮想ルータの機能を実装します。すべてのプロトコル メッセージは、IP マルチキャスト パケット (デフォルトのマルチキャスト アドレス 224.0.0.18) の形式で送信されます。 仮想ルータのグループでは、マスターである VRRP ルータのみが常に VRRP ブロードキャスト パケットを送信します。この時点では、バックアップはマスターをプリエンプトしません。 2.3 面接中に何を言うべきか<br /> 回答: 第3章: VRRPプロトコル VIPの前提条件: 第4章: keepalivedのインストールと設定 1. keepalivedをインストールする yum インストール keepalived -y 2. 設定ファイルの説明 グローバル定義 { router_id lb01 #ルーティングIDを設定します。ホストごとに異なります} vrrp_instance VI_1 { #VRRPグループ名を設定し、同じグループ名の状態をMASTERにします #ロールステータスを設定し、MASTERとBACKUPに分けます interface eth0 #VIP にバインドされたネットワーク カード virtual_router_id 50 #仮想ルータ ID、同じグループの場合は同じ priority 150 #重み、重みが高いほど優先度が高くなります ads_int 1 #マルチキャストを送信する間隔 authentication { #認証を設定します。パスワードはプレーン テキストです auth_type PASS 認証パスワード 1111 } virtual_ipaddress { #仮想 IP を設定します。この仮想 IP は存在し、有効であり、使用されていない必要があります。 10.0.0.3 } } 3.lb01構成 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb01 } vrrp_インスタンス VI_1 { 状態マスター インターフェース eth0 仮想ルータID 50 優先度150 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } 4.lb02構成 [root@lb02 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb02 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェース eth0 仮想ルータID 50 優先度100 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } 5. スタートアップ systemctl 開始キープアライブ 6. 任意のマシンをシャットダウンし、VIP がマスターに戻るかどうか、および BACKUP VIP が消えるかどうかを観察してテストします。 第5章 スプリットブレイン現象 1. パケットキャプチャツールをインストールする yum tcpdump をインストール -y 2.lb02 パケットキャプチャと表示 tcpdump -nn -i 任意のホスト 224.0.0.18 3. lb02 新しいターミナルを開き、ファイアウォールをオンにします systemctl は、firewalld.service を起動します。 4.lb02はパケットキャプチャ現象を観察し、両側にVIPがあるかどうかを確認します。 5. リリースルールを追加する ファイアウォールコマンド --direct --permanent --add-rule ipv4 フィルター INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT ファイアウォールコマンド --direct --permanent --add-rule ipv4 フィルター INPUT 0 --in-interface eth1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT systemctl をリロードします。 6.lb02 パケットキャプチャ現象を観察して、両側にVIPがあるかどうかを確認します。 第6章: keepalivedデュアルマスター実験 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb01 } vrrp_インスタンス VI_1 { 状態マスター インターフェース eth0 仮想ルータID 50 優先度150 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } vrrp_インスタンス VI_2 { 状態 バックアップ インターフェース eth0 仮想ルータID 51 優先度100 広告_int 1 認証 認証タイプ PASS 認証パスワード 2222 } 仮想IPアドレス{ 10.0.0.4 } } 2.lb02 設定ファイル [root@lb02 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb02 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェース eth0 仮想ルータID 50 優先度100 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } vrrp_インスタンス VI_2 { 状態マスター インターフェース eth0 仮想ルータID 51 優先度150 広告_int 1 認証 認証タイプ PASS 認証パスワード 2222 } 仮想IPアドレス{ 10.0.0.4 } } 3. keepalivedを再起動して現象を観察します systemctl を再起動する keepalived 第 7 章: keepalived と nginx リバース プロキシ ロード バランシングの組み合わせ 1. 元の設定をバックアップする mkdir /バックアップ /etc/nginx/conf.d をコピーします mv * /バックアップ 2. Nginx設定ファイルを書く [root@lb01 /etc/nginx/conf.d]# cat proxy.conf アップストリーム web_pools { サーバー 172.16.1.7; サーバー 172.16.1.8; } サーバー{ 聞く 80; サーバー名 (www|bbs).mysun.com; 位置 / { proxy_pass http://web_pools; proxy_params を含めます。 } } 3. nginxをテストして再起動する nginx -t systemctl nginx を再起動します lb サーバーの Keepalived 構成: 1.lb01 キープアライブ設定 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb01 } vrrp_インスタンス VI_1 { 状態マスター インターフェース eth0 仮想ルータID 50 優先度150 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } 2.lb02 キープアライブ設定 [root@lb02 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb02 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェース eth0 仮想ルータID 50 優先度100 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } } Web サーバーの構成: 知らせ! 2つのWebサーバーは同じ構成です 1. nginxの設定 [root@web01 ~]# cat /etc/nginx/conf.d/www.conf サーバー{ 聞く 80; サーバー名 www.mysun.com; 位置 / { ルート/コード; インデックス www.html; } } 2. テストファイルを書く echo "$(ホスト名)" >/code/index.html 第8章: スプリットブレイン防止スクリプト 1. 問題現象: 2. アイデア:
2.keepalivedはこのスクリプトを定期的に呼び出します 3. 実装: 1. コマンドの実装方法 systemctl nginx を起動します 2. nginxプロセスを確認する [root@lb01 ~]# ps -ef|grep nginx|grep -v "grep" root 1210 1 0 11:21 ? 00:00:00 nginx: マスタープロセス /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 1211 1210 0 11:21 ? 00:00:00 nginx: ワーカープロセス [root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l 2 [root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l 0 スクリプトの内容: [root@lb01 ~]# cat check_web.sh !/bin/bash nginx_status=$(ps -C nginx --no-header|wc -l) [[ ${nginx_status} == 0 ]]の場合 それから systemctl start nginx &> /dev/null 睡眠1 nginx_status=$(ps -C nginx --no-header|wc -l) [[ ${nginx_status} == 0 ]]の場合 それから systemctl 停止キープアライブ フィ フィ Keepalived は次のスクリプトを呼び出します: [root@lb01 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb01 } vrrp_script チェックウェブ { スクリプト "/server/scripts/check_web.sh" 間隔5 重量 50 } vrrp_インスタンス VI_1 { 状態マスター インターフェース eth0 仮想ルータID 50 優先度150 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } トラックスクリプト { チェックウェブ } } 4. 2 番目の問題: スプリットブレイン問題<br /> 両側に VIP がいる 現象: 反対側のマスターのNginxはまだ生きている curl -I -s -w "%{http_code}\n" -o /dev/null 10.0.0.5 しかし、私はまたVIPを持っています ip a |grep "10.0.0.3"|wc -l 私は自殺する systemctl 停止 nginx systemctl 停止キープアライブ スクリプトの内容: [root@lb02 /server/scripts]# cat check_vip.sh #!/bin/bash マスターステータス=$(curl -I -s -w "%{http_code}\n" -o /dev/null 10.0.0.5) my_vip=$(ip a |grep "10.0.0.3"|wc -l) [ ${master_status} == 200 -a ${my_vip} == 1 ] の場合 それから systemctl 停止 nginx systemctl 停止キープアライブ フィ keepalived 設定: [root@lb02 ~]# cat /etc/keepalived/keepalived.conf グローバル定義 { ルータID lb02 } vrrp_script チェックウェブ { スクリプト "/server/scripts/check_web.sh" 間隔5 重量 50 } vrrp_script チェック_vip { スクリプト "/server/scripts/check_vip.sh" 間隔5 重量 50 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェース eth0 仮想ルータID 50 優先度100 広告_int 1 認証 認証タイプ PASS 認証パスワード 1111 } 仮想IPアドレス{ 10.0.0.3 } トラックスクリプト { チェックウェブ チェックvip } } これで、Keepalived を使用して Nginx の負荷分散と高可用性を実装するためのサンプル コードに関するこの記事は終了です。Keepalived Nginx の負荷分散と高可用性に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: VSCode 開発 UNI-APP 構成チュートリアルとプラグイン
>>: MySQL パスワードは正しいが、ローカルにログインできない -1045
目次1. 時計の新しい使い方1.1. ウォッチの使用構文1.2. 複数の属性値を監視する1.3. 参...
ClickHouse は、オープンソースの列指向 DBMS (Yandex によって開発) です。 ...
コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...
目次必要:発生した問題:解決する:必要:要素テーブル内の複数の列を並べ替えるには、日付の並べ替えをク...
日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...
目次1. インデックスの種類1. B+ツリー2. MyISAM と InnoDB の B+ ツリー ...
目次成果を達成する転がり荷重知識備蓄コンポーネントのパッケージ1. コンポーネントの命名2. 小道具...
導入:多くの場合、さまざまな選択ステートメントを使用して必要なデータを照会した後、多くの人は作業が正...
目次サイクルのために入室のためのその間しながら行うループから抜け出す要約するサイクルのためにループは...
この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...
最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...
次のスクリプトは、MySQLデータベース全体のスケジュールされたバックアップに使用されます。 mys...
MySQL のインストールについてはインターネット上に多くの記事がありますが、今日ノート PC にイ...