LVS負載均衡基礎

LVS負載均衡基礎

 

一、常見nginx常用模塊和模塊的使用示例


1.性能相關的模塊配置:

1.worker_processes auto|number  #worker進程的數量,通常為當前主機的cpu物理核心數目;    
2.worker_cpu_affinity auto [cpumask]  #將work進程綁定在固定的cpu上提高緩存命中率    
3.worker_priority_number   #指定worker進程優先級    
4.worker_rlimit_nofile number #worker進程所能夠打開的文件數量上限。    

2.時間驅動events相關的模塊配置

1.worker_connections number  #每個worker進程所能夠打開的最大并發連接數    
2.use method    #指明并發連接請求的處理方法,默認自動選擇最優方法,use epoll    
3.accept_mutex on | off     #處理新的連接請求的方法

3.http核心模塊配置

1.server     #配置一個虛擬主機,可以基于ip,端口,fqdn配置;    
2.listen address     #配置套接字    
3.server_name        #配置服務名    
4.tcp_nodelay on|off     #延遲發送選項    
5.sendfile on|off        #在內核中封裝報文直接發送    
6.server_tokens on|off|build|string   #是否在響應報文的server首部顯示nginx版本    
7.location [ = | ~ | ~* | ^~ ] uri { ... }     #在一個server中location配置段可存在多個,用于實現從uri到文件系統的路徑映射    
8.alias path   #路徑別名    
9.keepalive_timeout timeout [header_timeout]    #設置保持長連接超時時長    
10.keepalive_requests number    #在一次長連接上所允許請求的資源的最大數量    
11.limit_rate rate    #限制響應給客戶端的傳輸速率,單位是bytes/second 默認值0表示無限制

4.訪問控制模塊ngx_ http_ access _module

1.實現基于IP的訪問控制功能:    
    allow address | CIDR | unix: | all;    
    deny address | CIDR | unix: | all;

5.用戶認證模塊ngx_ http_ auth_ basic_ module

1.實現基于用戶的訪問控制,使用basic機制進行用戶認證    
    auth_basic string | off;    
    auth_basic_user_file file;

6.狀態查看模塊ngx_ http_ http_ stub_ status_ module

1.Active connections:當前狀態,活動狀態的連接數    
2.accepts:統計總值,已經接受的客戶端請求的總數    
3.handled:統計總值,已經處理完成的客戶端請求的總數    
4.requests:統計總值,客戶端發來的總的請求數    
5.Reading:當前狀態,正在讀取客戶端請求報文首部的連接的連接數    
6.Writing:當前狀態,正在向客戶端發送響應報文過程中的連接數    
7.Waiting:當前狀態,正在等待客戶端發出請求的空閑連接數

7.日志記錄模塊

1.log_format name string ...;   #string可以使用nginx核心模塊及其它模塊內嵌的變量    
2.access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];access_log off;    #訪問日志文件路徑,格式及相關的緩沖的配置    
3.open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];open_log_file_cache off;    #緩存各日志文件相關的元數據信息

8.壓縮功能相關的模塊配置

1.gzip on | off;     #啟用或禁用gzip壓縮    
2.gzip_comp_level level;  #壓縮比由低到高: 1 到 9  默認: 1
3.gzip_disable regex ...;  #匹配到客戶端瀏覽器不執行壓縮    
4.gzip_min_length length;  #啟用壓縮功能的響應報文大小閾值    
5.gzip_http_version 1.0 | 1.1; #設定啟用壓縮功能時,協議的最小版本 默認: 1.1

9.https模塊ngx_ http_ ssl_module模塊

1.ssl on | off;    #為指定虛擬機啟用HTTPS protocol, 建議用listen指令代替    
2.ssl_certificate file;     #當前虛擬主機使用PEM格式的證書文件    
3.ssl_certificate_key file;   #當前虛擬主機上與其證書匹配的私鑰文件    
4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];   #支持ssl協議版本,默認為后三個    
5.ssl_session_cache off | none | [builtin[:size]]    #使用OpenSSL內建緩存,為每worker進程私有    
6.ssl_session_timeout time;    #客戶端連接可以復用ssl session cache中緩存的ssl參數的有效時長,默認5m

10.重定向模塊ngx_ http_ rewrite_ module

1.rewrite regex replacement [flag]     #將用戶請求的URI基于regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI    
2.return    #停止處理,并返回給客戶端指定的響應碼    
3.rewrite_log on | off;    #是否開啟重寫日志, 發送至error_log(notice level)    
4.set $variable value;    #用戶自定義變量

11.反向代理模塊

1.proxy_pass URL    #proxy_pass后面的路徑不帶uri時,其會將location的uri傳遞給后端主機;proxy_pass后面的路徑是一個uri時,其會將location的uri替換為proxy_pass的uri;    
2.proxy_set_header filed value    #設定發往后端主機的請求報文的請求首部的值    
3.proxy_cache_path;    #定義可用于proxy功能的緩存; Context:http    
4.proxy_cache zone | off    #指明調用的緩存,或關閉緩存機制    
5.proxy_cache_key string    #緩存中用于“鍵”的內容    
6.proxy_cache_valid [code ...] time;    #定義對特定響應碼的響應內容的緩存時長    
7.proxy_cache_methods GET | HEAD | POST ...;  #對哪些客戶端請求方法對應的響應進行緩存, GET和HEAD方法總是被緩存    
8.proxy_connect_timeout time;    #定義與后端服務器建立連接的超時時長,如超時會出現502錯誤,默認為60s,一般不建議超出75s    
9.proxy_send_timeout time;    #把請求發送給后端服務器的超時時長;默認為60s    
10.proxy_read_timeout time;    #等待后端服務器發送響應報文的超時時長, 默認為60s

12.ngx_ stream_ proxy_ module模塊

可實現代理基于TCP, UDP (1.9.13), UNIX-domain sockets的數據流。

1.proxy_pass address;    #指定后端服務器地址    
2.proxy_timeout timeout;  #無數據傳輸時,保持連接狀態的超時時長    
3.proxy_connect_timeout time;    #設置nginx與被代理的服務器嘗試建立連接的超時時長默認為60s

二、Linux集群類型、系統擴展方式及調度方法


Linux的集群類型包括:

1.LB:Load Balancing:負載均衡;    
2.HA:High Availiablity:高可用集群;    
3.HP:High Performance:高性集群。

系統擴展方式包括:

1.向上擴展:Scale up;    
2.向外擴展:Scale out。

調度算法:根據調度時是否考慮各RS當前的負載狀態,可將調度算法分為靜態方法和動態方法兩種。

靜態算法:

1.RR:roundrobin,輪詢;    
2.WRR:weighted RR,加權輪詢;    
3.SH:source hashing,實現session sticy,源ip地址hash,將來自同一個IP地址的請求始終發往第一次挑中的RS,從而實現回話綁定;    
4.DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡;

動態算法:根據每RS當前的負載狀態及調度算法進行調度,方法主要有:LC,WLC,SED,NQ,LBLC等。

三、lvs四種集群有點及使用場景


LVS集群包括:lvs-nat;lvs-dr;lvs-tun,lvs-fullnat。

lvs-nat特點:多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發。

1.RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP;    
2.請求報文和響應報文都必須經由Director轉發;Director易于成為系統瓶頸;    
3.支持端口映射,可修改請求報文的目標PORT;    
4.vs必須是Linux系統,rs可以是任意系統;

lvs-dr的特點:通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變。

1.確保前端路由器將目標IP為VIP的請求報文發往Director;    
2.RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;    
3.RS跟Director要在同一個物理網絡;    
4.請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;    
5.不支持端口映射;

lvs-tun特點:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)。

1.DIP, VIP, RIP都應該是公網地址;    
2.RS的網關不能,也不可能指向DIP;    
3.請求報文要經由Director,但響應不能經由Director;    
4.不支持端口映射;    
5.RS的OS得支持隧道功能;

lvs-fullnat的特點:通過同時修改請求報文的源IP地址和目標IP地址進行轉發

1.VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;    
2.RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Director還要將其發往Client;    
3.請求和響應報文都經由Director;    
4.支持端口映射。

四、LVS-NAT、LVS-DR的工作原理并實現配置


LVS-NAT的工作原理:

1.首先client 發送請求[package] 給VIP;    
2.VIP 收到package后,會根據LVS設置的LB算法選擇一個合適的realserver,然后把package 的DST IP 修改為realserver;    
3.realserver 收到這個package后判斷dst ip 是自己,就處理這個package ,處理完后把這個包發送給LVS VIP;
4.LVS 收到這個package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后發送給client;

1.其中Director server:10.3.223.11(對外提供服務的IP),192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
2.在Director Server上配置LVS;首先打開系統的包轉換功能,從而使系統充當路由器:

[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

3.配置ipvs:

[root@node1 ~]# ipvsadm -A -t 10.3.223.11:80 -s rr    
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.101:80 -m    
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.102:80 -m    

4.測試驗證:驗證httpd的負載均衡。

[root@node4 ~]# for i in {1..20};do curl http://10.3.223.11/;done    
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2

LVS-DR的工作原理:client 發送一個pv請求給VIP;VIP 收到這請求后會跟LVS設置的LB算法選擇一個LB 比較合理的realserver,然后把此請求的package 的MAC地址修改為realserver的MAC地址。

1.LVS:192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
Vip地址:192.168.88.188

2.添加ipvsadm轉發規則:

iptables -A -t 192.168.88.188:80 -s rr    
iptables -a -t 192.168.88.188:80 -r 192.168.88.101:80 -g -w 1    
iptables -a -t 192.168.88.188:80 -r 192.168.88.102:80 -g -w 1

3.添加vip:

ip addr add 192.168.88.188/32 dev lo

4.避免vip沖突:

cat>> /etc/sysctl.conf<<EOF
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99164

(1)
gw章gw章
上一篇 2018-05-22
下一篇 2018-05-23

相關推薦

  • Linux運維命令以及概念整理總結(4)

    1、grep
    2、正則表達式
    3、擴展正則表達式
    4、vim文本編輯工具

    2018-04-14
  • Centos7登陸顏色修改

    ? 在用遠程登陸軟件登陸Centos時,登陸提示符是一串黑色的字符,假如登陸的窗口多時很容易造成各種運維事故。本來要在機器A上修改文件配置,結果沒看清在機器B上修改文件配置,造成不必要的麻煩。這時修改登陸字符顏色就顯得很重要,設置一個醒目的提示字符顏色可減少不必要的麻煩,也能夠提醒自己謹慎操作!下面給大家說明下相關配置要求。 ? ? ? ? ? ? ? ? …

    Linux筆記 2018-03-31
  • Linux_bash基礎特性_命令行展開

    Linux_bash基礎特性_命令行展開

    2018-06-08
  • 手把手系列(三)教你自制簡單Linux系統

    CentOS啟動相關最重要的幾個文件有:內核vmlinuz文件、虛擬文件系統initramfs文件、grub文件以

    及init啟動程序,圍繞這幾個文件,我們來制作一個能夠簡單啟動的自制Linux系統

    2018-05-14
  • linux練習題以及用戶和組管理

    Linux練習題 列出當前系統上的所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 取出最后登錄到當前系統的用戶的相關信息 取出當前系統上被用戶當作默認shell的最多的那個shell 將/etc/passwd/中的第三個字段數值最大的后10個用戶信息全部改為大寫后保存至/tmp/maxusers中。 取出當前主機的IP地址,提示:對i…

    2018-05-26
欧美性久久久久