クラスター負荷分散-LVS DR + Keepalivedクラスター展開の戦闘!超詳細理論+実験!!!

1つは、Keelalivedの実装原理を理解する

        Keepalivedは、LVS専用に設計された強力な補助ツールです。主に、フェイルオーバーとヘルスチェック機能を提供するために使用されます-障害が発生したホストが回復したときに、LVSロードスケジューラーとノードサーバーの可用性を判断し、適時に新しいサーバーに置き換えます次に、クラスタに再度参加させます。

■LVS、HA専用に設計されたヘルスチェックツール

  • 自動フェイルオーバー(フェイルオーバー)をサポート
  • サポートノードのヘルスチェックステータス(ヘルスチェック)
  • 公式サイト:http://www.keepalived.org/(ご興味のある方はチェックしてください)

1.1、Keepalivedケース分析

        エンタープライズアプリケーションでは、単一のサーバーがアプリケーションの単一障害点のリスクを負います。エンタープライズアプリケーションクラスターでは、少なくとも2つの単一障害点のリスクがあります。
単一障害点が発生すると、エンタープライズサービスが中断され、大きな害を引き起こします

1.2 LVS + Keepalived高可用性クラスターの概要

        Keepalivedの設計目標は、使用可能なLVS負荷分散クラスターを構築することです。デュアルシステムホットバックアップだけでなく、ipvsadmツールを呼び出して仮想サーバーを作成し、サーバープールを管理できます。keepalivedを使用してLVSクラスターを構築する方が簡単で使いやすくなっています。主な利点は、LVSロードスケジューラーのホットスタンバイスイッチングの実現、可用性の向上、サーバープール内のノードのヘルスチェックの実行、失敗したノードの自動削除、および回復後の再結合です。
        LVS-Keepalivedに基づいて実装されたLVSクラスター構造には、少なくとも2つのホットスタンバイロードスケジューラと2つ以上のノードサーバーが含まれます。この例では、DRモードのLVSクラスターに基づいて、1つのスレーブロードスケジューラが追加されます。 Keepalivedを使用してマスタースケジューラとスレーブスケジューラのホットバックアップを実現し、負荷分散と高可用性を備えたLVSウェブサイトクラスタープラットフォームを構築します。
        Keepalivedを使用してLVSクラスターを構築する場合は、ipvsadm管理ツールも使用する必要がありますが、ほとんどの作業は、手動でipvsadmを実行しなくても、Keepalivedによって自動的に実行されます。

1.3 Keepalived実装原理の分析

■KeepalivedはVRRPホットバックアッププロトコルを採用し、Linuxサーバーのマルチマシンホットバックアップ機能を実現しています。
■VRRP(Virtual Routing Redundancy Protocol)は、ルーターのバックアップソリューションです。

  • 複数のルーターがホットバックアップグループを形成し、共有仮想IPアドレスを介して外部にサービスを提供します
  • 複数のルーターがホットバックアップグループを形成し、共有仮想IPアドレスを介して外部にサービスを提供します
  • 現在オンラインのルーターに障害が発生した場合、他のルーターは設定された優先順位に従って仮想IPアドレスを自動的に引き継ぎ、サービスを提供し続けます

ここに画像の説明を挿入

1.4、Keepalivedケースの説明

■デュアルシステムホットバックアップのフェイルオーバーは、仮想IPアドレスのドリフトにより実現し、様々なアプリケーションサーバーに対応
■WEBサービスによるデュアルシステムホットバックアップを実現

                                                  【交  换  机】
                                                        ●
                                                        ●              漂移地址:192.168.100.100
                                                        ●      
               ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
               ● 		             ●                  ● 		              ●		               ●
               ●		             ●                  ● 		              ●		               ●
               ●		             ●                  ● 		              ●		               ●
           【调度器1】	         【调度器2】           【WEB1】               【WEB2】              【存储】
         192.168.100.21       192.168.100.22	  192.168.100.23       192.168.100.24        192.168.100.25 		       

1.4.1、keepalivedマスターサーバーの構成

■keepalived構成ディレクトリは/ etc / keepalived /にあります
■keepalived.confはメイン構成ファイルです

  • global_defs {…}セクションはグローバルパラメータを指定します
  • vrrp_instanceインスタンス名{...}セクションはVRRPホットスタンバイパラメータを指定します
  • コメントテキストは「!」記号で始まります
  • ディレクトリsamples /、参照として多くの構成サンプルを提供します

■一般的な構成オプションの説明

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

1.4.2、keepalivedスレーブサーバーの構成

■keppalivedバックアップサーバー構成とマスター構成には3つのオプションがあります

  • router_id:フリー名として設定
  • 状態:バックアップに設定
  • 優先度:優先度の値がプライマリサーバーよりも低い

■その他のオプションはマスターと同じです

3. LVS + Keelalivedの高可用性クラスターの実験的な導入

3.1、ケース配置構成

名前 オペレーティング・システム IPアドレス
LVSマスター Centos7.6-x86_64 192.168.100.21
LVSバックアップ Centos7.6-x86_64 192.168.100.22
WebserverA Centos7.6-x86_64 192.168.100.23
WebサーバーB. Centos7.6-x86_64 192.168.100.24
NFS共有 Centos7.6-x86_64 192.168.100.25

ここに私たちのドリフトアドレス(VIP):192.168.100.10

まず、実験を行うときは、最初に5つの仮想マシンのファイアウォールとコア保護をオフにし、ローカルYumソースを構成する必要があります。

3.2、メインスケジューラ192.168.100.21を構成する

  • / proc応答パラメーターを調整する
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p     ###使其生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0  
  • 明確な負荷分散戦略
[root@localhost /]# ipvsadm -C
  • keepalivedパラメータを調整する
global_defs {
    
    
   router_id HA_TEST_R1                  ####本路由器的服务器名称  HA_TEST_R1
}
vrrp_instance VI_1 {
    
                         ####定义VRRP热备实列
   state MASTER                          ####热备状态,master表示主服务器
   interface ens33                       ####表示承载VIP地址的物理接口
   virtual_router_id 1                   ####虚拟路由器的ID号,每个热备组保持一致
   priority 100                          ####优先级,优先级越大优先级越高
   advert_int 1                          ####通告间隔秒数(心跳频率)
   authentication {
    
                          ####认证信息,每个热备组保持一致
      auth_type PASS                     ####认证类型
      auth_pass 123456                   ####认证密码
   }
   virtual_ipaddress {
    
                       ####漂移地址(VIP),可以是多个
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
            ####虚拟服务器地址(VIP)、端口
    delay_loop 15                        ####健康检查的时间间隔(秒)
    lb_algo rr                           ####轮询调度算法
    lb_kind DR                           ####直接路由(DR)群集工作模式
    persistence 60                       ####连接保持时间(秒),若启用请去掉!号
    protocol TCP                         ####应用服务采用的是TCP协议

    real_server 192.168.100.23 80 {
    
           ####第一个WEB站点的地址,端口
        weight 1                         ####节点的权重
        TCP_CHECK {
    
                          ####健康检查方式
	    connect_port 80                    ####检查端口目标
	    connect_timeout 3                  ####连接超时(秒)
	    nb_get_retry 3                     ####重试次数
	    delay_before_retry 4               ####重试间隔(秒)
	}
    }
    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}
[root@localhost keepalived]# systemctl start keepalived                  ####启动keepalived
[root@localhost keepalived]# systemctl enable keepalived                 ####开机启动keepalived
[root@localhost keepalived]# ip addr show dev ens33                      ####查看主控制IP地址和漂移地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b5:da:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.21/24 brd 192.168.100.255 scope global noprefixroute ens33    ## IP地址
       valid_lft forever preferred_lft forever
    inet 192.168.100.100/32 scope global ens33     ## 漂移地址
       valid_lft forever preferred_lft forever
    inet6 fe80::c574:d230:3778:e9dd/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

3.3。スレーブスケジューラを構成する192.168.100.22

  • / proc応答パラメーターを調整する
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p     ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0  
  • 明確な負荷分散戦略
[root@localhost /]# ipvsadm -C
  • keepalivedパラメータを調整する
global_defs {
    
    
   router_id HA_TEST_R2                  ####本路由器的服务器名称 HA_TEST_R2
}
vrrp_instance VI_1 {
    
                         ####定义VRRP热备实列
   state BACKUP                          ####热备状态,backup表示辅服务器
   interface ens33                       ####表示承载VIP地址的物理接口
   virtual_router_id 1                   ####虚拟路由器的ID号,每个热备组保持一致
   priority 99                           ####优先级,优先级越大优先级越高,这里的优先级要比主机小!
   advert_int 1                          ####通告间隔秒数(心跳频率)
   authentication {
    
                          ####认证信息,每个热备组保持一致
      auth_type PASS                     ####认证类型
      auth_pass 123456                   ####认证密码
   }
   virtual_ipaddress {
    
                       ####漂移地址(VIP),可以是多个
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
           
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.23 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}      

3.4。ストレージサーバーの構成:192.168.100.25

[root@localhost ~]# rpm -q nfs-utils    ###如果没装,yum -y install nfs-utils
[root@localhost ~]# rpm -q rpcbind      ###如果没装,yum -y install rpcbind
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs

[root@localhost ~]# vi /etc/exports
/opt/Tom 192.168.100.0/24(rw,sync)
/opt/Jack 192.168.100.0/24(rw,sync)

[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/Tom /opt/Jack
[root@localhost ~]# echo "this is Tom" >/opt/Tom/index.html
[root@localhost ~]# echo "this is Jack" >/opt/Jack/index.html
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

3.5。WEB 1サーバーの構成:192.168.100.23

  • 仮想IPアドレスを構成する
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools   ## 最小化安装需要装这个,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.10  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
  • / proc応答パラメーターを調整する
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
  • httpdマウントテストページをインストールする
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Tom /var/www/html/
[root@localhost ~]# vi /etc/fstab 
192.168.100.25:/opt/Tom /var/www/html nfs defaults,_netdev 0 0        ###开机自动挂载,注意格式对齐
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6   ## 重启测试一下
[root@localhost ~]# curl 192.168.100.23
this is Tom

ブラウザに192.168.100.23と入力してテストすることもできます

ここに画像の説明を挿入

3.5。WEB 2サーバーの構成:192.168.100.24

  • 仮想IPアドレスを構成する
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools      ## 最小化安装需要装这个,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.10  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
  • / proc応答パラメーターを調整する
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
  • httpdマウントテストページをインストールする
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Jack /var/www/html/
[root@localhost ~]# vi /etc/fstab 
192.168.100.25:/opt/Jack /var/www/html nfs defaults,_netdev 0 0        ###开机自动挂载,注意格式对齐

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6  ## 重启测试一下
[root@localhost ~]# curl 192.168.100.24
this is Jack

ブラウザに192.168.100.24と入力してテストすることもできます

ここに画像の説明を挿入

3.6。マスタースケジューラとスレーブスケジューラが正常に機能するかどうかをテストする

1.メインスケジューラens33ネットワークカードのMACアドレス:00:0c:29:b5:da:33
2.実マシンでcmdを開き、ping 192.168.100.100をテストします
3. Arp -aは、キャッシュテーブルのMACが00:0c:29であることを検出しました: b5:da:33
は、メインスケジューラへのデータパケットのMACアドレスが失われたことを証明します

ここに画像の説明を挿入
見てみな

ここに画像の説明を挿入4.メインスケジューラでkeepalivedを閉じます

[root@localhost ~]# systemctl status keepalived

5.次に、スケジューラーからip addr showを入力し、ドリフトアドレスがスレーブスケジューラーに到達した時点で、スレーブスケジューラーはマスタースケジューラーをプリエンプトして動作します。

ここに画像の説明を挿入
6.スケジューラens33ネットワークカードのMACアドレスから:00:0c:29:53:1f:1a

7.実マシンでcmdを開いて、ping 192.168.100.100をテストします

8. Arp -aは、キャッシュテーブル内のMACが0:0c:29:53:1f:1aであることを検出します。これは、マスタースケジューラがダウンしている場合、スレーブスケジューラがマスタースケジューラを置き換えて作業し、データパケットがスレーブに送信されることを示しています。スケジューラーのMACアドレスは失われます。

ここに画像の説明を挿入
見てみな

ここに画像の説明を挿入
9. keepalived.serviceを再度開きます

### 开启keepaliced
[root@localhost keepalived]# systemctl start keepalived.service

ここに画像の説明を挿入

3.7、負荷分散ポーリングを確認する

  • ブラウザに192.168.100.100と入力します

これが「これがジャック」です

ここに画像の説明を挿入

  • 次にページが更新されると、別のページに循環し、その間に待機時間が発生します

これは「これはトムです」であり、検証は成功です。

ここに画像の説明を挿入
今日ここにいますLVS + Keepalivedクラスター学習は終わりました。
この章でマスターする重要なポイントは次のとおりです。

  1. Keepalivedの主な機能
  2. Keepalivedマスターサーバーとスレーブサーバーの違い
  3. 負荷分散+高可用性クラスターを構築する

おすすめ

転載: blog.csdn.net/m0_46563938/article/details/108748949