LVS:
LVS是四層協議的開源負載均衡器,工作在netfilter框架INPUT鏈中,它根據不同的算
法將用戶的請求調度給后端服務器,它不受sockt套接字文件限制,性能比nginx七層
負載均衡器性能高很多。
類型:
lvs-nat:多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發
lvs-dr:通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,
目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;
lvs-tun:在請求原報文的首部再次封裝一個IP首部
lvs-fullnat:修改請求報文的源和目標IP
相關術語:
DS: Director Server,指的是前端負載均衡器節點。
RS:Real Server。后端提供服務的服務器。
VIP: 作為用戶請求的目標的IP地址
DIP :DS與RS之間相互通訊
RIP: 后端服務器IP
CIP: Client IP 客戶端IP
CIP <–> VIP == DIP <–> RIP
LVS-NAT 類型的工作原理:
- 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
- PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
- IPVS比對數據包請求的服務是否為集群服務,若是,根據調度算法修改數據包的目標IP地址為后端某一服務器IP,然后將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP
- POSTROUTING鏈通過選路,將數據包發送給Real Server
- Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP
- Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然后響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP
環境部署:
1 準備三臺主機 A B C D
2 主機A作為DS服務器,配置VIP:172.18.0.9 ,DIP為:192.168.10.254
3 主機B C作為RS服務器 ,配置IP時網關指向DS服務器的192.168.10.254
B主機IP:192.168.10.3/24 網關:192.168.10.254
C主機IP:192.168.10.4/24 網關:192.168.10.254
(備注:centos7用nmtui命令,centos6用setup命令)
D主機IP:192.168.10.5(提供wordpress等)
D主機配置:(centos6)
[root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx
# service mysqld start
[root@node1 ~]# mysql ## 創建數據庫和授權用戶
mysql> create database wpdb;
mysql> grant all on wpdb.* to ‘wpuser’@’192.168.10.%’ identified by ‘wppass’
mysql> exit
[root@node1 ~]# mkdir /data/
[root@node1 ~]# cd /data/
wget ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
[root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
[root@node1 data]# chown -R nginx.nginx /data/wordpress
[root@node1 data]# vim /etc/exports
/data/wordpress 192.168.10.[34](rw)
[root@node1 ~]# service nfs start
[root@node1 ~]# showmount -e 172.18.99.7 ## 查看 nfs 共享目錄
B C兩臺主機配置:
[root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
[root@centos7 ~]# mkdir -p /data/wordpress
#vim /etc/nginx/conf.d/wps/conf
server {
listen 80 default_server;
server_name www.magedu.com;
root /data/wordpress/;
index index.php index.html index.html;
location / {
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/data/wordpress/$fastcgi_script_name;
include fastcgi_params;
}
}
root@centos7 nginx]# vim nginx.conf
# default server ##注釋或刪除主配置文件里的 default server
[root@centos7 conf.d]# nginx
[root@centos7 conf.d]# systemctl start php-fpm
[root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress
A主機配置:
ipvsadm -A -t 172.18.0.9 -s rr
ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.3 -m -w 2
ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.4 -m -w 1
sysctl -w net.ipv4.ip_forward=1(打開核心轉發功能)
LVS-dr模型工原理:
(1)每一個服務器都配有VIP
(2)Ditector轉發數據包給后端RealServer時,在原有數據包上再封裝一層RealServer的真是IP的mac到達。
(3)RS通過VIP回數據包時,數據必須從lo:0轉發給本機的ethX物理端口后,再由本機的ethX的物理端口轉發給客戶端
(4)RIP和VIP不一定在哦同一個網段(不在同一網段的可能性非常大,這樣可以起到隱藏后端RS的作用)
LVS-dr:
環境部署:
1準備四臺主機 A B C D
2 A主機是DS服務器:172.18.0.9
3 B C 主機是RS服務器
B主機IP:172.18.0.3 C主機IP:172.18.0.4
4 D主機提供wordpress等 IP:172.18.0.5
配置D 主機:(centos6)
[root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx
# service mysqld start
[root@node1 ~]# mysql ## 創建數據庫和授權用戶
mysql> create database wpdb;
mysql> grant all on wpdb.* to ‘wpuser’@’172.18.99.%’ identified by ‘wppass’
mysql> exit
[root@node1 ~]# mkdir /data/
[root@node1 ~]# cd /data/
wget ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
[root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
[root@node1 data]# chown -R nginx.nginx /data/wordpress
[root@node1 data]# vim /etc/exports
/data/wordpress 172.18.99.1[01](rw)
[root@node1 ~]# service nfs start
[root@node1 ~]# showmount -e 172.18.99.7 ## 查看 nfs 共享目錄
配置B主機:(centos7)
[root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
[root@centos7 ~]# mkdir -p /data/wordpress
#vim /etc/nginx/conf.d/wps/conf
server {
listen 80 default_server;
server_name www.magedu.com;
root /data/wordpress/;
index index.php index.html index.html;
location / {
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/data/wordpress/$fastcgi_script_name;
include fastcgi_params;
}
}
root@centos7 nginx]# vim nginx.conf
# default server ##注釋或刪除主配置文件里的 default server
[root@centos7 conf.d]# nginx
[root@centos7 conf.d]# systemctl start php-fpm
[root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress
[root@centos7 ~]# vim dr.sh ## 為 real-server 配置 vip
#!/bin/bash
VIP=172.18.0.24
case “$1” in
start)
echo “配置 lvs Real Server 開始…”
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up ## 配置 VIP
route add -host $VIP dev lo:0 ## 添加主機路由
## 限制響應和通告級別
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
;;
stop)
echo “正在關閉 lvs Real server”
ifconfig lo:0 down
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo “用法: $0 {start|stop}”
exit 1
esac
[root@centos7 ~]# bash dr.sh start
配置 lvs Real Server 開始
配置C主機:(centos7)
[root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
[root@centos7 ~]# mkdir -p /data/wordpress
[root@centos7 ~]# mount 172.18.99.7:/data/wordpress /data/wordpress
#systemctl start php-fpm
#vim /etc/nginx/conf.d/wps/conf
server {
listen 80 default_server;
server_name www.magedu.com;
root /data/wordpress/;
index index.php index.html index.html;
location / {
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/data/wordpress/$fastcgi_script_name;
include fastcgi_params;
}
}
root@centos7 nginx]# vim nginx.conf
# default server ##注釋或刪除主配置文件里的 default server
[root@centos7 ~]# bash dr.sh start
配置 lvs Real Server 開始…
配置A主機:
[root@node2 ~]# yum install ipvsadm -y
#ifconfig eth1 192.18.0.24 netmask 255.255.255.255 broadcast 172.18.0.24 up
#ifconfig
[root@node2 ~]# ipvsadm -A -t 172.18.0.24:80 -s rr ##新增一個集群服務
[root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.10:80 -g
## 為集群添加 real-server
[root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.11:80 -g
[root@node2 ~]# ipvsadm -Ln ## 查看集群規則
備注:route add -host 172.18.0.24 dev lo:0(可以在倆臺RS主機上設置,目的是為了讓響應報文從lo出去,但這不是必須的。
原創文章,作者:m22shanyongguo,如若轉載,請注明出處:http://www.www58058.com/75103