HAクラスタ-lvs

HAクラスタのLVS

技術的な説明:

LVS集群采用IP负载均衡技术和基于内容请求分发技术。
调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,
且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性

3層構造をクラスタ化します。

一般的な、LVSクラスタ3層構造では、主な構成要素は次のとおりです。

  • ロードバランサ(負荷分散装置)、それはフロントエンドマシンの外にクラスタ全体で、顧客が(私たちは仮想IPアドレスにそれを呼び出すことができます)サーバーのセットを実行するための要求を送信するための責任があり、顧客サービスは、単一のIPアドレスから考えられています上の

  • サーバープール(サーバプール)は、実際の顧客の要求を実行するサーバーのグループです、サービスがWEB、MAIL、FTP、およびDNSを行いました

  • サーバー・プールの共有ストレージ領域を提供する共有ストレージ(共有ストレージ)、同じサービスを提供し、サーバプールが同じコンテンツを持っていることは容易です

用語クラスタタイプLVS:

vs:Virtual Server, Director, Dispatcher, Balancer
rs:Real Server, upstream server, backend server
CIP:Client IP
VIP: Virtual serve IP
DIP: Director IP
RIP: Real server IP

请求过程:CIP <–> VIP <==> DIP <–> RIP

クラスタ型LVS:

lvs-nat:修改请求报文的目标IP,然后转发给被选中的RS

lvs-dr:在请求报文的首部重新封装新的MAC地址,然后转发给被选中的RS

lvs-tun:在原请求IP报文之外新加一个IP首部<源地址为CIP,目标地址为RIP>,然后转发给RS

lvs-fullnat:修改请求报文的源和目标IP<源地址修改为DIP,目标地址修改为RIP>,然后转发给RS

LVS-夜:

同様の複数の宛先IP DNAT、パケット転送の宛先アドレスと宛先ポートの要求は、RIPを達成するために変更され、PORTは、RSを選びました

(1) RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP
(2) 请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈
(3) 支持端口映射,可修改请求报文的目标PORT
(4) vs必须是Linux系统,rs可以是任意系统

LVS-DR:

直接ルーティング、直接ルーティング

要求パケットを再カプセル化されたMACヘッダを介して転送、MAC送信元MACインターフェースDIPが配置され、宛先MACは、RIPインタフェースRSの選択された場所のMACアドレスであります

  • 送信元IP / PORT、およびターゲットIP / PORTは変わりません。

  • 取締役は、それぞれVIPがRSを持っていた使用するように設定します。

(1) VIP地址要配置在VS主机和所有的RS主机上
(2) 确保前端路由器将目标IP为VIP的请求报文发往Director,限制RS主机上关于VIP的广播和应答:
    (a) 在前端网关做静态绑定;
    (b) 在RS上使用arptables;
    (c) 在RS上修改内核参数以限制arp通告及应答级别;
        arp_announce
        arp_ignore
(3) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
(4) RS跟Director要在同一个物理网络,VS和所有RS主机之间不能跨路由器
(5) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client
(6) 不支持端口映射

LVS-TUN:

モード転送:、一方、その後IPパケットに前者と、カプセル化ヘッダIPで(ソースIPは、DIP、宛先IPはRIPである)、パケットヘッダ要求パケットIPを(送信元IPアドレスは、CIP、VIPとして宛先IPで)変更しませんターゲットを選ぶために送られたRS

(1) DIP, VIP, RIP都应该是公网地址
(2) RS的网关不能,也不可能指向DIP
(3) RS的主机上也要配置VIP地址
(3) 请求报文要经由Director,但响应不能经由Director
(4) 不支持端口映射
(5) RS的OS得支持隧道功能

LVS-fullnat:

同時修正要求パケットの送信元IPアドレスと転送の送信先IPアドレスによる。

  • CIP - > DIP
  • VIP - > RIP
(1) VIP是公网地址,RIP和DIP是私网地址,可以跨路由器,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
(3) 请求和响应报文都经由Director;
(4) 支持端口映射;
注意:此类型默认不支持  

IPVSスケジューラ:

各RSの現在の負荷状態は、そのスケジュールに従って、静的方法と動的方法の2種類に分けることができるかどうかを検討してください。

staticメソッド:アルゴリズム自体に基づいてのみスケジューリング

RR:roundrobin,轮询;把所有的RS主机统计起来,每次有新请求来,以轮询的方式一个个的调度用户请求到RS主机上去

WRR:Weighted RR,加权轮询;把所有的RS主机统计起来,并记录每个RS主机的权值<在这里表示自身的某个服务的处理能力,能力越强,权值越高>,每次有新请求来,以权值的大小进行轮询,调度用户请求到RS主机上去,权值高的主机,会接收到更多的用户请求

SH:Source Hashing,实现session sticy,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS
    DH:提高VS后缓存服务器中缓存的命中率
    DH:多数情况用于缓存服务器

動的方法:各RSとスケジューリングアルゴリズムの現在の負荷状況に応じてスケジューリングを主に行います。

オーバーヘッド:値が小さいほどオーバーヘッド優先度スケジューリングサーバへVSスケジューリングコンパレータ

LC:least connections  最少连接
    Overhead=activeconns*256+inactiveconns
    基于上面的Overhead算法,计算所有RS主机的Overhead值,把新请求调度到Overhead值小的服务器

WLC:Weighted LC   加权的最少连接
    Overhead=(activeconns*256+inactiveconns)/weight
    基于上面的Overhead算法,计算所有RS主机的Overhead值,把新请求调度到Overhead值小的服务器

SED:Shortest Expection Delay
    Overhead=(activeconns+1)*256/weight
    基于上面的Overhead算法,计算所有RS主机的Overhead值,把新请求调度到Overhead值小的服务器

NQ:Never Queue
    永不排队,每个后端服务器,至少先分一个,然后在使用SED调度算法对新请求进行调度

LBLC:Locality-Based LC,动态的DH算法
    简单的理解就是:类似静态方法的DH算法,但它是动态的

LBLCR:LBLC with Replication,带复制功能的LBLC
    在LBLC上,后端服务器,基于session replication机制,复制一台RS主机的缓存到其他RS主机上,则当老用户进行请求的时候,不仅可以转发给老用户第一次访问的主机,也可以转发给RS其他主机,因为此时其他RS主机也有此老用户访问的缓存

LVS-NAT設定:

トポロジ:

LVS-NATデータは、グラフフロー:

デザインの特徴:

(1) RIP与DIP在同一IP网络, RIP的网关要指向DIP;
    VIP=192.168.0.100
    DIP=172.16.0.1
    RIP-1=172.16.0.2
    RIP-2=172.16.0.3

RS1:

yum -y install httpd net-tools
    
vim /var/www/html/index.html
<h1>RS1</h1>
    
ifconfig ens33:0 172.16.0.2/24 up
route add default gw 172.16.0.1
systemctl start httpd

RS2:

yum -y install httpd net-tools

vim /var/www/html/index.html
<h1>RS2</h1>
    
ifconfig ens33:0 172.16.0.3/24 up
route add default gw 172.16.0.1
systemctl start httpd

VS:

yum install ipvsadm net-tools
ifconfig ens33:0 172.16.0.1/24 up
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 172.16.0.2 -m -w 1
ipvsadm -a -t 192.168.0.100:80 -r 172.16.0.3 -m -w 1

LVS-DR構成:

トポロジ:

LVS-DRアナログデータフローグラフ

以下に示すよう:クライアントはVIPを要求すると、要求はディレクター(スケジューラ)に送信されます、スケジューラ発見要求は、転送の過程でのRealServerへの要求、注意を転送するためにスケジューリングアルゴリズムに従って、クラスタサービスのセットです私たちはDRおよびRSは、それがデータパケットはMACアドレスを変更することで転送することができるようにすることです、同じ物理ネットワーク内にある必要があり尋ねるなぜこれがあるので、単に、データパケットのMACアドレスを変更しました。

ネットワーク上の各サーバを設定するには、加えて、各サービスの最初は別々のカードが必要とされてきました。eth0の上のDIP設定DRでは、VIPは、これはVIPのIPアドレスは、ドリフトを行うスケジューラ簡単に入手した後に行うために、ネットワーク構成に別名であるだろう。RSは、クライアントのRSは、DRを経由することなく、直接対応できるように、設定されたVIPのそれぞれで同じ必要がありますが、同じ名前の複数の物理的なネットワークがIPを許可されている、それはカーネルパラメータのRSを変更する必要があり、そして、LOに設定されたVIPは、それがVIPを維持することができますが、パケットがRSからの送信元アドレスを送信して、外部の放送を許可していないことは、当然のことながら、実際の物理的なカードから出て行く必要がVIPである、アクセスVIPが可能、ルートを追加する必要がありますリクエストパケットは、応答それにVIPカードが配置されているので、パケットが送信元アドレスに応答して送信されることがVIPであり、クライアントを受け付けるようにしてもよいです。

デザインの特徴:

VS上的VIP地址可以直接配置在DIP地址所在的网卡上,Linux主机上,一块网卡可以配置多个地址
RS上的VIP地址必须配置在lo接口上,并且还要关闭arp的响应和通告功能

外网接口:10.1.43.101
内网接口:172.16.0.1

VIP:172.16.0.10
DIP:172.16.0.9
RIP-1:172.16.0.2
RIP-2:172.16.0.3

各ホスト上で構成するDRモデル、VIPのニーズは、3段階の解決アドレスの競合の方法があります。

(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
    限制响应级别:arp_ignore
        0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
        1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应
    
    限制通告级别:arp_announce
        0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告
        1:尽量避免向非直接连接网络进行通告
        2:必须避免向非本网络通告

RS事前設定スクリプト:<スクリプトは、ホストRS上で実行します>

#!/bin/bash
#
vip=172.16.0.10
mask='255.255.255.255'
    
case $1 in
start)
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
  ifconfig lo:0 $vip netmask $mask broadcast $vip up
  route add -host $vip dev lo:0
  route add default gw 172.16.0.1
    ;;
        
stop)
    ifconfig lo:0 down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ;;
        
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

設定スクリプトVS:<スクリプトは対ホスト上で実行することができます>

#!/bin/bash
#
vip='172.16.0.10'
iface='eno16777736:0'
mask='255.255.255.255'
port='80'
rs1='172.16.0.2'
rs2='172.16.0.3'
scheduler='wrr'
type='-g'
    
case $1 in
start)
    ifconfig $iface $vip netmask $mask broadcast $vip up
    iptables -F
    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    ;;
        
stop)
    ipvsadm -C
    ifconfig $iface down
    ;;
        
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

ルータの設定:

ifconfig eno16777736 10.1.43.101/16 up
ifconfig eno33554984 10.1.43.101/16 up
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 10.1.43.101 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.10:80

追伸

LVS-DRモデル:実験計画および構成のVIP環境ではなく、同じネットワークセグメント上のディップ/ RIPが実現

ヒント:設定ルータ上のエイリアスIPネットワークIPインタフェース、このIP VIPと同じネットワークセグメント内

デザインの特徴:

VS上的VIP地址可以直接配置在DIP地址所在的网卡上,Linux主机上,一块网卡可以配置多个地址

RS上的VIP地址必须配置在lo接口上,并且还要关闭arp的响应和通告功能

外网接口:10.1.43.101
内网接口:172.16.0.1 172.16.10.1

VIP:172.16.1.10
DIP:172.16.0.9
RIP-1:172.16.0.2
RIP-2:172.16.0.3

環境

主机:Centos6
ホストコンピューター 情報
ルータ Centos6
ディレクター Centos6
RS1 Centos6
RS2 Centos6

ルータの設定:

[root@node4 ~]# ifconfig eno16777736 10.1.43.101/16 up 
[root@node4 ~]# ifconfig eno33554984 172.16.0.1/24 up
[root@node4 ~]# ifconfig eno33554984:0 172.16.1.1/24 up       //配置一个别名,用于同VS主机上的VIP进行通信 

[root@node4 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 
[root@node4 ~]# iptables -t nat -A PREROUTING -d 10.1.43.101 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.10:80

RS1構成の場合:

[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
[root@node1 ~]# ifconfig lo:0 172.16.1.10 netmask 255.255.255.255 broadcast 172.16.1.10 up
    
[root@node1 ~]# yum -y install httpd
[root@node1 ~]# service httpd start
    
[root@node1 ~]# cd /var/www/html
[root@node1 www]# vim index.html
<h1>172.16.0.2</h1>

RS2構成の場合:

[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
[root@node2 ~]# ifconfig lo:0 172.16.1.10 netmask 255.255.255.255 broadcast 172.16.1.10 up
    
[root@node2 ~]# yum -y install httpd
[root@node2 ~]# service httpd start
    
[root@node2 ~]# cd /var/www/html
[root@node2 www]# vim index.html
<h1>172.16.0.3</h1>

VS構成:

[root@node3 ~]# ifconfig eth0:0 172.16.1.10 netmask 255.255.255.255 broadcast 172.16.1.10 up
    
[root@node3 ~]# ipvsadm -C
[root@node3 ~]# ipvsadm -A -t 172.16.1.10:80 -s rr
[root@node3 ~]# ipvsadm -a -t 172.16.1.10:80 -r 172.16.0.2 -g
[root@node3 ~]# ipvsadm -a -t 172.16.1.10:80 -r 172.16.0.3 -g

参考資料

https://blog.csdn.net/brad_chen/article/details/47807281

おすすめ

転載: www.cnblogs.com/python-gm/p/12444060.html