一 LVS工作原理
1. lvs-nat模型
lvs-nat:多目標的DNAT, 通過將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT 實現轉發。
(1) RIP和DIP必須在同一IP網絡,且應該使用私有地址,RS的網絡要指向DIP(保證響應報文必須由VS); (2) 請求報文和響應報文都經由Director轉發,較高負載下,Director易于成為系統性能瓶頸; (3) 支持端口映射; (4) VS必須是Linux, RS可以是任意OS.
lvs-nat模型工作原理如圖:
2. lvs-dr模型
lvs-dr:通過為請求報文的重新封裝一個MAC首部進行轉發,源MAC是DIP所在接口的MAC, 目標MAC是挑選出某RS的RIP所在接口的MAC地址,IP首部不會發生變化。
(1) 確保前端路徑將目標IP為VIP的請求報文發往Director; 解決方案: 在路由器上靜態綁定VIP和Director的MAC地址; 禁止RS響應VIP的ARP請求,禁止RS對VIP進行通告。 (a) arptables; (b) 修改RS的內核參數,并把VIP綁定lo的別名上 arp_ignore, arp_announce. (2) RS的RIP可以使用私有地址,也可以使用公網地址; (3) RS跟Director必須在同一物理網絡; (4) 請求報文必須由Director調度,但響應報文必須不能經由Director; (5) 不支持端口映射; (6) RS可以使用大多的OS;
lvs-dr模型工作原理如圖:
3. lvs-tun模型
lvs-tun:轉發方式:不修改請求報文的IP首部(源IP為CIP, 目標IP為VIP),而是源IP首部之外再封裝一個IP首部(源IP為DIP, 目標IP為挑選出的RS的RIP)。
(1) RIP, DIP, VIP全得是公網地址; (2) RS網關不能指向也可能指向DIP; (3) 請求報文經由Director轉發,但響應報文將直接發往CIP; (4) 不支持端口映射; (5) RS的OS必須支持隧道功能。
lvs-tun模型工作原理如圖:
4. lvs-fullnat
lvs-fullnat:通過同時修改請求報文的源IP地址(CIP—>DIP)和目標地址(VIP—>RIP)進行轉發。
(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一網絡中,但需要經由路由器互通; (2) RS收到的請求報文源IP為DIP, 因此響應報文將直接響應給DIP; (3) 請求和響應報文都經由Director; (4) 支持端口映射。
二 搭建LVS-DR的高性能集群實驗
1. 架構描述
通過Director訪問調度到RS1和RS2實現負載均衡,另一臺服務器負責動態分離及給RS1和RS2提供共享實現數據同步并提供數據庫服務。
架構圖如下:
2. 環境情況
操作系統:CentOS7.2
Director:ipvsadm
-
VIP:192.168.20.108
-
DIP:192.168.237.128
RS1:nginx
-
RIP:192.168.237.129
RS2:nginx
-
RIP:192.168.237.130
RS3:MariaDB+PHP+NFS
-
IP:192.168.237.131
3. 安裝配置
(1) RS1安裝配置nginx
#安裝nginx yum install nginx #配置nginx vim /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index 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 /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 192.168.237.131:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} #啟動nginx systemctl start nginx #RS2同RS1安裝配置nginx
(2) RS3安裝配置MariaDB,NFS及PHH-FPM
#安裝MariaDB, NFS, PHP-FPM和PHP yum install mariadb nfs-utils php-fpm php #啟動MariaDB systemctl start mariadb #創建共享目錄,與RS1和RS2的nginx根目錄一致 mkdir -p /usr/share/nginx/html #配置NFS vim /etc/exports /usr/share/nginx/html 192.168.237.0/24(rw,no_root_squash) #啟動NFS服務 systemctl start nfs #創建nginx用戶,與RS1和RS2上的nginx用戶UID和GID一致, nginx的UID為994, GID為996 groupadd -g 996 nginx useradd -u 994 -g nginx -s /sbin/nologin nginx #配置php-fpm vim /etc/php-fpm.d/www.conf listen = 192.168.237.131:9000 listen.allowed_clients = 192.168.237.129,192.168.237.130 user = nginx group = nginx #啟動PHP-FPM systemctl start php-fpm
(3) 在RS1和RS2上掛載共享文件
#安裝NFS yum install nfs-utils #掛載共享文件 mount 192.168.237.131:/usr/share/nginx/html /usr/share/nginx/html #RS2同RS1操作
(4) 在Director安裝配置ipvs
#安裝ipvs yum install ipvsadm #增加集群服務 ipvsadm -A -t 192.168.20.108:80 -s rr #配置集群規則 ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.129:80 -g ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.130:80 -g #開啟路由轉發 echo 1 > /proc/sys/net/ipv4/ip_forward
(5) 在RS1上配置VIP及修改相關內核參數
#修改arp_ignore和arp_announce兩個內核參數 echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce #配置VIP ifconfig lo:0 192.168.20.108 netmask 255.255.255.255 broadcast 192.168.20.108 #增加路由 route add -host 192.168.20.108 dev lo:0 #RS2同RS1配置
(6) 創建wordpress數據庫并分配權限
#創建數據庫 MariaDB [(none)]> create database wordpress; #創建數據庫用戶、設置密碼并分配權限 MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'192.168.237.131' identified by '123456';
(7) 安裝wordpress
#解壓目錄到nginx根目錄 [root@localhost ~]# tar xvzf wordpress-4.5.3-zh_CN.tar.gz -C /usr/share/nginx/html/
在瀏覽器中輸入192.168.237.129/wordpress/wp-admin/setup-config.php
這樣就可以進行安裝了,就不再具體演示。
不過LVS調度還有些問題,有待進一步研究。
原創文章,作者:N25_zzc,如若轉載,請注明出處:http://www.www58058.com/62885