1、結合圖形描述LVS的工作原理;
LVS是一種用軟件實現的LB集群; 作用于傳輸層; LVS工作原理:通過Director調度把用戶請求按照分配算法分配給后端的Real server,然后由后端Real server響應客戶請求; lvs模式分為三種。 lvs-nat: 多目標的DNAT:通過將請求報文的目標地址和目標端口修改為挑選出某RS的RIP和PORT來實現; (1) RIP和DIP應該使用私網地址,RS的網狀應該指向DIP; (2) 請求和響應報文都要經由director轉發;極高負載的場景中,Director可能會成為系統瓶頸; (3) 支持端口映射; (4) VS必須為Linux,RS可以是任意的OS; (5) RS的RIP與Director的DIP必須在同一IP網絡; lvs-dr: 通過修改請求報文的MAC地址進行轉發;IP首部不會發生變化(源IP為CIP,目標IP始終為VIP); (1) 確保前端路由器將目標IP為VIP的請求報文一定會發送給Director; 解決方案: 靜態綁定; 禁止RS響應VIP的ARP請求; (a) arptables; (b) 修改各RS的內核參數,并把VIP配置在特定的接口上實現禁止其響應; (2) RS的RIP可以使用私有地址,也可以使用公網地址; (3) RS跟Director必須在同一物理網絡中; (4) 請求報文必須由Director調度,但響應報文必須不能經由Director; (5) 不支持端口映射; (6) 各RS可以使用大多數的OS; lvs-tun 轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原有的IP首部這外再次封裝一個IP首部(源IP為DIP,目標IP為RIP); (1) RIP,DIP,VIP全得是公網地址; (2) RS的網關不能也不可能指向DIP; (3) 請求報文經由Director調度,但響應報文將直接發給CIP; (4) 不支持端口映射; (5) RS的OS必須支持IP隧道功能; lvs調度后端Real server方法: 根據其調度時是否考慮后端主機的當前負載,可分為靜態方法和動態方法;
靜態方法:僅根據算法本身進行調度; RR:Round Robin,輪詢/論調; WRR:Weighted RR,加權輪詢; SH:Source Hashing,源地址哈希;(短鏈接,需要保持持久鏈接時使用;如電商購物;把源地址跟原來挑選車來rs綁定,使得下次能繼續訪問這臺rs) DH:Destination Hashing,目標地址哈希; 正向的web代理(緩存)。負載均衡內網用戶對外部服務器的請求 哈希目標地址;
動態方法:根據算法及各RS當前的負載狀態進行評估調度; LC:least connections,最少鏈接;(如果沒有最少的,根據rs表至上而下輪詢) OVerhead=Active*256+Inactive WLC:Weighted LC,加權最少鏈接; OVerhead=(Active*256+Inactive)/weight SED:Shortest Expections Delay OVerhead=(Active+1)*256+Inactive NQ:Never Queue 每個rs先分配一個,然后再SED LBLC:Locality-Based LC 動態的DH算法; LBLCR:LBLC with Replication, 帶復制功能的LBLC;
2、搭建一套LVS-DR模型的高性能集群,并實現以下功能:
(1)、wordpress程序通過nfs共享給各個realserver;
(2)、后端realserver中的nginx和php分離
準備三臺服務器,兩臺Real server(Centos 6.6)分別搭建nginx和php+nfs+wordpress,另一臺服務器搭建+Director(Centos 7.1) 所有服務器統一安裝編譯環境 yum groupinstall "Development Tools" "Server Platform Development" -y
Real server1配置:
IP地址:192.168.10.100做nginx服務器,系統:Centos 6.6選擇nginx-1.10.1版本,從官網獲取到安裝包,放置服務器/root目錄下 安裝依賴包: yum install -y openssl-devel pcre-devel zlib-devel 做好準備工作下面開始安裝 [root@caicai ~]# tar xf nginx-1.10.1.tar.gz [root@caicai ~]# cd nginx-1.10.1[root@caicai ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsg --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre [root@caicai nginx-1.10.1]# make && make install 編譯安裝好以后創建用戶 [root@caicai ~]# groupadd -r -g 501 nginx [root@caicai ~]# useradd -r -g nginx -u 501 nginx 接下來就可以啟動nginx了,但是為了方便我們應該把nginx腳本加入PATH中 [root@caicai ~]# vim /etc/profile.d/nginx.sh export PATH=/usr/local/nginx/sbin:$PATH [root@caicai ~]# exec bash /etc/profile.d/nginx.sh (執行此命令會斷開ssh,重新連接就好)配置好以后就可以直接使用nginx命令啟動nginx服務了 Ye~! [root@caicai ~]# nginx查看下是否正常啟動 [root@caicai ~]# ss -tnl | grep :80LISTEN 0 128 *:80 *:* [root@caicai ~]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 6444 root 6u IPv4 55359 0t0 TCP *:http (LISTEN) nginx 6445 nginx 6u IPv4 55359 0t0 TCP *:http (LISTEN) 待Real server2配置完第4部回來配置: [root@caizhijian ~]# mkdir /www [root@caicai ~]# chown -R nginx:nginx /www/ [root@caicai ~]# chown -R nginx:nginx /www [root@caicai ~]# mount -t nfs 192.168.10.101:/www /www [root@caicai ~]# vim /etc/nginx/nginx.conf location / { root /www; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root /www; fastcgi_pass 192.168.10.101:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name; include fastcgi_params; } 檢查下配置語法是否有問題: [root@caicai ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 沒問題reload重新加載一下配置文件: [root@caicai ~]# nginx -s reload
Real server2配置:
IP地址:192.168.10.101 做php服務器 為了方便這里就直接使用yum安裝了;
1、安裝php-fpm和一些插件 [root@caizhijian ~]# yum install -y php-fpm php-mysql php-mbstring php-gd php-xml 2、編輯配置文件 [root@caizhijian ~]# vim /etc/php-fpm.d/www.conf ;listen.allowed_clients = 127.0.0.1 //注釋掉只能本地訪問,默認所有ip都可以訪問 user = nginx //更改使用的用戶 user = nginx //更改使用的組 listen = 192.168.10.101:9000 //修改監控地址 3、開啟nfs功能(默認Centos 5以上的版本已經默認安裝了,可直接啟用) [root@caizhijian ~]# vim /etc/exports /www *(rw) [root@caizhijian ~]# service nfs start 4、新建用戶和共享文件 [root@caicai ~]# groupadd -r -g 501 nginx [root@caicai ~]# useradd -r -g nginx -u 501 nginx [root@caizhijian ~]# mkdir /www [root@caicai ~]# chown -R nginx:nginx /www/ [root@caicai ~]# chown -R nginx:nginx /www 5、建測試頁做測試 [root@caizhijian ~]# vim /www/index.php <?php phpinfo(); ?> 打瀏覽器訪問http://192.168.10.100測試能否訪問6、安裝wordpress程序 獲取wordpress程序程序包wordpress-4.5.3-zh_CN.tar.gz,放置/root目錄下 [root@caizhijian ~]# tar xf wordpress-4.5.3-zh_CN.tar.gz -C /www [root@caizhijian ~]# chown -R nginx:nginx /www 訪問下http://192.168.10.100/wordpress
LVS-dr配置:
準備2張網卡配置VIP、DIP VIP地址:192.168.10.99 DIP地址:192.168.10.98 用虛擬機克隆一臺Real server1,多裝一臺nginx服務器做驗證命名為Real server3; 設置ip地址為:192.168.10.102 [root@caicai ~]# ifconfig eth1 192.168.10.102 netmask 255.255.255.0 掛載nfs [root@caicai ~]# mount -t nfs 192.168.10.101:/www /usr/local/nginx/html/www/ 在各主機(Director,RS)均需要配置VIP;因此,要解決地址沖突問題,這里采用修改內核參數限制arp響應通告; 建立一個bash腳本分別在Real server1和Real server3上執行 #!/bin/bash case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_annouce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_annouce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_annouce ifconfig lo:0 192.168.10.99 netmask 255.255.255.0 broadcast 192.168.10.99 up route add -host 192.168.10.99 dev lo:0 ;; stop) echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_annouce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce ifconfig lo:0 down ;; esac 接下來配置Director主機 [root@localhost ~]# yum install ipvsadm -y添加規則 [root@localhost ~]# ipvsadm -A -t 192.168.10.99:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.100 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.102 -g -w 2 到這就配置完了,還有很多東西需要改進(例如數據庫等)
原創文章,作者:N21_志建,如若轉載,請注明出處:http://www.www58058.com/56462
贊,又是一位比較超前的。LVS現在的話應該說是四種,課程里面也講解了這四種的區別和使用場景,建議再細化下~~繼續加油~