第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
目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...
この記事では、ショッピングカートの増減と価格計算を実現するためのjsの具体的なコードを紹介します。具...
タイトル通りです。その質問は非常に奇妙です。要素の親タグはdivで、幅や高さなどの属性は設定されてい...
目次1. 親コンポーネントが子コンポーネントに値を渡す(props) 2. サブコンポーネントは親コ...
目次1. スロットを使用する理由1.1 スロット1.2 コンポーネントのスロット1.3 例2. この...
プロセス アドレス空間の分離は、現代のオペレーティング システムの注目すべき機能です。これは、「古い...
序文この記事は主にMySQLメタデータ生成Hiveテーブル作成ステートメントコメントスクリプトに関す...
1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...
成果を達成する実装コードhtml <div>123WORDPRESS.COM</d...
インストール手順は省略します( yum -y install nginx;を使用して直接インストール...
以下のデモはMySQLバージョン5.7.27に基づいています。 1. MySQLサブクエリ最適化戦略...
1. はじめに最近ブログをアップグレードし、記事ページの下部に前の記事と次の記事に直接ジャンプできる...
この記事では、Linux のユーザーとグループの管理によく使用されるコマンドをまとめます。ご参考まで...
目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...
<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...