天天看點

戲說:負載均衡

lvs

Linux Virtual Server (lvs) 是Linux核心自帶的負載均衡器,也是目前性能最好的軟體負載均衡器之一。

<a href="https://s4.51cto.com/wyfs02/M02/9E/37/wKioL1mNeePAxZ4UAAG8sOx2HDg604.jpg-wh_500x0-wm_3-wmp_4-s_2556432551.jpg" target="_blank"></a>

輪叫排程(Round-Robin Scheduling)

權重輪叫排程(Weighted Round-Robin Scheduling)

最小連接配接排程(Least-Connection Scheduling)

權重最小連接配接排程(Weighted Least-Connection Scheduling)

基于局部性的最少連結(Locality-Based Least Connections Scheduling)

帶複制的基于局部性最少連結(Locality-Based Least Connections with Replication Scheduling)

目标位址散列排程(Destination Hashing Scheduling)

源位址散列排程(Source Hashing Scheduling)

最短預期延時排程(Shortest Expected Delay Scheduling)

不排隊排程(Never Queue Scheduling)

安裝ipvs包并開啟ip轉發

<code>yum </code><code>-</code><code>y install ipvsadm keepalived</code>

<code>sysctl </code><code>-</code><code>w net.ipv4.ip_forward</code><code>=</code><code>1</code>

修改/etc/keepalived/keepalived.conf,增加vip和lvs的配置

<code>vrrp_instance VI_3 {</code>

<code>    </code><code>state MASTER   </code><code># 另一節點為BACKUP</code>

<code>    </code><code>interface eth0</code>

<code>    </code><code>virtual_router_id </code><code>11</code>

<code>    </code><code>priority </code><code>100</code>   <code># 另一節點為50</code>

<code>    </code><code>advert_int </code><code>1</code>

<code>    </code><code>authentication {</code>

<code>        </code><code>auth_type PASS</code>

<code>        </code><code>auth_pass PASSWORD</code>

<code>    </code><code>}</code>

<code>    </code><code>track_script {</code>

<code>        </code><code>chk_http_port</code>

<code>    </code><code>virtual_ipaddress {        </code><code>192.168</code><code>.</code><code>0.100</code>

<code>}</code>

<code>virtual_server </code><code>192.168</code><code>.</code><code>0.100</code> <code>9696</code> <code>{</code>

<code>    </code><code>delay_loop </code><code>30</code>

<code>    </code><code>lb_algo rr</code>

<code>    </code><code>lb_kind DR</code>

<code>    </code><code>persistence_timeout </code><code>30</code>

<code>    </code><code>protocol TCP</code>

<code>    </code><code>real_server </code><code>192.168</code><code>.</code><code>0.101</code> <code>9696</code> <code>{</code>

<code>        </code><code>weight </code><code>3</code>

<code>        </code><code>TCP_CHECK {</code>

<code>            </code><code>connect_timeout </code><code>10</code>

<code>            </code><code>nb_get_retry </code><code>3</code>

<code>            </code><code>delay_before_retry </code><code>3</code>

<code>            </code><code>connect_port </code><code>9696</code>

<code>        </code><code>}</code>

<code>    </code><code>real_server </code><code>192.168</code><code>.</code><code>0.102</code> <code>9696</code> <code>{</code>

重新開機keepalived:

<code>systemctl </code><code>reload</code> <code>keepalived</code>

最後在neutron-server所在機器上為lo配置vip,并抑制ARP響應:

<code>vip</code><code>=</code><code>192.168</code><code>.</code><code>0.100</code>

<code>ifconfig lo:</code><code>1</code> <code>${vip} broadcast ${vip} netmask </code><code>255.255</code><code>.</code><code>255.255</code>

<code>route add </code><code>-</code><code>host ${vip} dev lo:</code><code>1</code>

<code>echo </code><code>"1"</code> <code>&gt;</code><code>/</code><code>proc</code><code>/</code><code>sys</code><code>/</code><code>net</code><code>/</code><code>ipv4</code><code>/</code><code>conf</code><code>/</code><code>lo</code><code>/</code><code>arp_ignore</code>

<code>echo </code><code>"2"</code> <code>&gt;</code><code>/</code><code>proc</code><code>/</code><code>sys</code><code>/</code><code>net</code><code>/</code><code>ipv4</code><code>/</code><code>conf</code><code>/</code><code>lo</code><code>/</code><code>arp_announce</code>

<code>echo </code><code>"1"</code> <code>&gt;</code><code>/</code><code>proc</code><code>/</code><code>sys</code><code>/</code><code>net</code><code>/</code><code>ipv4</code><code>/</code><code>conf</code><code>/</code><code>all</code><code>/</code><code>arp_ignore</code>

Keepalived主備模式裝置使用率低;不能橫向擴充;VRRP協定,有腦裂的風險。

ECMP的方式需要了解動态路由協定,LVS和交換機均需要較複雜配置;交換機的HASH算法一般比較簡單,增加删除節點會造成HASH重分布,可能導緻目前TCP連接配接全部中斷;部分交換機的ECMP在處理分片包時會有BUG。

Haproxy

Haproxy也是Linux最常用的負載均衡軟體之一,兼具性能和功能的組合,同時支援TCP和HTTP負載均衡。

配置和使用方法請見https://nginx.org/en/。

Nginx

Nginx也是Linux最常用的負載均衡軟體之一,常用作反向代理和HTTP負載均衡(當然也支援TCP和UDP負載均衡)。

自研負載均衡

Google Maglev

Maglev是Google自研的負載均衡方案,在2008年就已經開始用于生産環境。Maglev安裝後不需要預熱5秒内就能處理每秒100萬次請求。谷歌的性能基準測試中,Maglev執行個體運作在一個8核CPU下,網絡吞吐率上限為12M PPS(資料包每秒)。如果Maglev使用Linux核心網絡堆棧則速度會慢下來,吞吐率小于4M PPS。

<a href="https://s4.51cto.com/wyfs02/M00/9E/38/wKioL1mNepXSTFJyAAFBPVV9JEk782.jpg-wh_500x0-wm_3-wmp_4-s_3924501455.jpg" target="_blank"></a>

路由器ECMP (Equal Cost Multipath) 轉發包到Maglev(而不是傳統的主從結構)

Kernel Bypass, CPU綁定,共享記憶體

一緻性哈希保證連接配接不中斷

Vortex參考了Maglev,大緻的架構和實作跟Maglev類似:

ECMP實作叢集的負載均衡

一緻性哈希保證連接配接不中斷即使是不同的Vortex伺服器收到了資料包,仍然能夠将該資料包轉發到同一台後端伺服器後端伺服器變化時,通過連接配接追蹤機制保證目前活動連接配接的資料包被送往之前選擇的伺服器,而所有建立連接配接則會在變化後的伺服器叢集中進行負載分擔

DPDK提升單機性能 (14M PPS,10G, 64位元組線速)通過RSS直接将網卡隊列和CPU Core綁定,消除線程的上下文切換帶來的開銷

Vortex線程間采用高并發無鎖的消息隊列通信

DR模式避免額外開銷

總結

本文為大家詳細講解了關于Linux配置中的負載均衡的裝置,适應現代社會的需求,

作為運維工程師的你,學會了嗎?

本文轉自 xjtuhit 51CTO部落格,原文連結:http://blog.51cto.com/51reboot/1955535

繼續閱讀