クラスターアーキテクチャ-LVS + Keepalived高可用性クラスター構築

バックグラウンド

この高度な情報ベースのIT時代において、企業の生産システム、事業運営、販売とサポート、および日常の管理は、コンピューター情報とサービスにますます依存するようになり、高可用性(HA)テクノロジーアプリケーションの需要が大幅に増加しています。継続的で中断のないコンピュータシステムまたはネットワークサービスを提供するため。

1.キープアライブの概要

1.1キープアライブツールの概要

LVSおよびHA用に特別に設計されたヘルスチェックツール:

  • 自動フェイルオーバー(フェイルオーバー)をサポートします。
  • ノードヘルスチェック(ヘルスチェック)をサポートします。
  • 公式サイト:http://www.keepalived.org/

ここに画像の説明を挿入

1.2キープアライブ実装の原則

  • キープアライブは、VRRP(Virtual Routing Redundancy Protocol)ホットバックアッププロトコルを採用して、ソフトウェアでLinuxサーバーのマルチマシンホットバックアップ機能を実現します。
    ここに画像の説明を挿入

主成分分析:

VRRP(Virtual Routing Redundancy Protocol)は、ルーターのバックアップソリューションです。

  • 複数のルーターで構成されています。ホットスタンバイグループは、共有仮想IPアドレスを介して外部サービスを提供します。
  • 各ホットスタンバイグループには、同時にサービスを提供するメインルーターが1つだけあり、他のルーターは冗長状態にあります。
  • 現在オンラインのルーターに障害が発生した場合、他のルーターが設定された優先度に従って仮想IPアドレスを自動的に引き継ぎ、サービスを提供し続けます

1.3キープアライブのインストールと起動

  • LVSクラスター環境に適用する場合は、ipvsadm管理ツールも必要です。
  • YUMはKeepalivedをインストールします。
  • キープアライブサービスを有効にします。

2.キープアライブケース

2.1ケース分析

  • エンタープライズアプリケーションでは、単一のサーバーがアプリケーションの単一障害点のリスクを負います。
  • 単一障害点が発生すると、エンタープライズサービスが中断され、大きな被害が発生します。

ここに画像の説明を挿入

2.2ケースの説明

  • デュアルシステムホットバックアップのフェイルオーバーは、さまざまなアプリケーションサーバーに適した仮想IPアドレスのドリフトによって実現されます。
  • Webサービスに基づいてデュアルシステムのホットバックアップを実現
    ドリフトアドレス:192.168.70.200
    プライマリサーバーとスタンバイサーバー:192.168.70.9、192.168.70.10
    提供されるアプリケーションサービス:Web
    ここに画像の説明を挿入

3.キープアライブサーバーを構成します

3.1キープアライブマスターサーバーの構成

3.1.1構成ディレクトリとメイン構成ファイル

  • Keepalived構成ディレクトリは/ etc / keepalived /にあります。
  • keepalived.confは、
    グローバルパラメータを指定するメイン設定ファイルのglobal_defs {...}セクションです
    。vrrp_instanceインスタンス名{...}セクションは、VRRPホットスタンバイパラメータを参照します。
    コメントテキストは「!」記号で始まります。;
    ディレクトリサンプルは、多くの設定例のリファレンスを提供します。

3.1.2一般的な構成オプション

  • router_id HA_TEST_R1:ルーター(サーバー)の名前。
  • vrrp_instance VI_1:VRRPホットスタンバイインスタンスを定義します。
  • 状態MASTER:ホットスタンバイ状態。MASTERはマスターサーバーを表します。
  • interface ens33:VIPアドレスを伝送する物理インターフェイス。
  • virtual_router_id 1:仮想ルーターのID番号。これは、ホットスタンバイグループごとに一貫しています。
  • 優先度100:優先度、値が大きいほど優先度が高くなり、デフォルトは100です。
  • advert_int 1:通知間の秒数(ハートビート頻度)。
  • auth_type PASS:認証タイプ;
  • auth_pass 123456:パスワード文字列;
  • virtual_ipaddress {vip}:ドリフトアドレス(VIP)を指定します。複数存在する場合があります。

3.2キープアライブスレーブサーバーの構成

キープアライブバックアップサーバーの構成は、次の3つのオプションでマスター構成とは異なります。

  • router_id:自分の名前として設定
  • 状態:BACKUPに設定
  • 優先度:優先度の値がプライマリサーバーよりも低い
  • 他のオプションはマスターと同じです

4.キープアライブデュアルマシンホットバックアップ効果テスト

デュアルマシンのホットバックアップの効果をテストします。

  • メインマシンとスタンバイマシンの両方でWebサービスが有効になり、異なるコンテンツが設定されます。
  • メインサーバーのネットワークカードを順次無効または有効にします。

実行されたテスト:

  • テスト1:pingを使用して192.168.70.200の接続を検出します。
  • テスト2:http://192.168.70.200にアクセスして、可用性とコンテンツの変更を確認します。
  • テスト3:ログファイル/ var / log / messagesの変更を確認します。

5. LVS + Keepalived高可用性クラスタープロジェクトに基づく

5.1プロジェクト環境

(1)2台のLVSロードディスパッチサーバー

  • IPアドレス:192.168.70.9
    仮想IP:192.168.70.200
  • IPアドレス:192.168.70.10
    仮想IP:192.168.70.200

(2)2つのWebサイトサーバー

  • IPアドレス:192.168.70.11(サーバーAA)
  • IPアドレス:192.168.70.12(サーバーAB)
    注:ここでのWebサーバーのゲートウェイは、ディスパッチャーネットワークカードを指す必要はありません。

(3)1つのNFS共有サーバー

  • IPアドレス:192.168.70.13

(4)テストおよび検証用の1台のクライアントコンピューター

  • IPアドレス:192.168.70.14

注:同じネットワークセグメントが相互に通信できることを確認する必要があります

5.2実験の目的

  • クライアントは、Keepalivedホットスタンバイメインサーバーを介して仮想アドレス192.168.70.200にアクセスし、Apache1およびApache2ホストへのアクセスをポーリングします。メインサーバーに障害が発生すると、代替サーバーがメインサーバーとして置き換えられ、メインの機能を実現します。サーバ
  • nfsネットワークファイルストレージサービスを構築します。

5.3プロジェクトのステップ

5.3.1NFSストレージサーバーの構成

[root@nfs ~]# rpm -qa | grep rpcbind		//默认虚拟机已安装rpcbind模块
rpcbind-0.2.0-42.el7.x86_64
[root@nfs ~]# yum -y install nfs-utils	//确认是否安装nfs-utils软件包
已加载插件:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
Loading mirror speeds from cached hostfile
 * base: 
软件包 1:nfs-utils-1.3.0-0.48.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@nfs ~]# mkdir /opt/web1
[root@nfs ~]# mkdir /opt/web2
[root@nfs ~]# echo "<h1>this is web1.</h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1>this is web2.</h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
/opt/web1 192.168.70.11/32 (ro)
/opt/web2 192.168.70.12/32 (ro)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 (everyone)
/opt/web1 (everyone)

5.3.2Webサイトサーバーの構成

  • Web1での構成
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.70.13
Export list for 192.168.70.13:
/opt/web2 (everyone)
/opt/web1 (everyone)
[root@web1 ~]# mount 192.168.70.13:/opt/web1 /var/www/html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      55954/httpd   
[root@web1 ~]# vi web1.sh
#!/bin/bash
#lvs_dr模式 web1
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web1 ~]# sh web1.sh
[root@web1 ~]# ifconfig		//查看虚拟端口
[root@web1 ~]# route -n 	//查看路由
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

ここに画像の説明を挿入
ここに画像の説明を挿入

  • Web2での構成
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# mount 192.168.70.13:/opt/web2 /var/www/html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      54695/httpd 
[root@web2 ~]# vi web2.sh
#!/bin/bash
#lvs_dr模式 web2
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig		//查看虚拟端口
[root@web2 ~]# route -n 	//查看路由
kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

ここに画像の説明を挿入
ここに画像の説明を挿入

5.3.3LVSスケジューラーの構成

キープアライブソフトウェアパッケージをインポートします
ここに画像の説明を挿入
1)2つのLVSスケジューラで次の同じ設定を実行します

  • ip_vsモジュールをロードします
[root@lvs ~]# modprobe ip_vs     	  '//加载ip_vs模块'
[root@lvs ~]# cat /proc/net/ip_vs      '//查看ip_vs版本信息'
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  • ipvsadmをインストールします
[root@lvs ~]# yum -y install ipvsadm
  • 関連する環境を構成し、コンパイルしてインストールします
[root@lvs ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs ~]# cd keepalived-2.0.13/
[root@lvs keepalived-2.0.13]# ./configure --prefix=/
[root@lvs keepalived-2.0.13]# make && make install
[root@lvs keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@lvs keepalived-2.0.13]# systemctl enable keepalived.service
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

2)LVS_1での構成

[root@lvs_1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
	router_id lvs_1
}
vrrp_instance vi_1 {
    
    
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 110
	advert int 1
	authentication {
    
    
	 auth_type PASS
	 auth_pass 6666
	}
	virtual_ipaddress {
    
    
	 192.168.70.200
	}
}
virtual_server 192.168.70.200 80 {
    
    
	delay_loop 6
	lb_algo rr
	lb_kind DR
	persistence_timeout 6
	protocol TCP
real_server 192.168.70.11 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
real_server 192.168.70.12 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
}
[root@lvs_1 ~]# systemctl start keepalived.service
[root@lvs_1 ~]# ipaddr

ここに画像の説明を挿入

[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.70.200:80 rr
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0 

3)LVS_2での構成

[root@lvs_2 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
        router_id lvs_2
}
vrrp_instance vi_1 {
    
    
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 105
......//其他的和LVS_1配置相同

[root@lvs_2 ~]# systemctl start keepalived.service
[root@lvs_2 ~]# systemctl status keepalived.service

ここに画像の説明を挿入

[root@lvs_2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.70.200:80 rr persistent 6
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0

5.4検証結果

  • クライアントで確認し、ブラウザにアクセスします
    ここに画像の説明を挿入
    ここに画像の説明を挿入

  • スケジュールの詳細を表示する

ここに画像の説明を挿入
ここに画像の説明を挿入

  • メインサーバーに障害が発生した場合
[root@lvs_1 ~]# systemctl stop keepalived.service

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_42449832/article/details/110940851