client | | LVS | | ------------------- | | | RS1 RS2 RS3
機器名稱 | ip配置 | ip配置 | 備註信息 |
---|---|---|---|
LVS | 192.168.2.23 | 192.168.11.11 | 2塊網卡 |
RS1 | 192.168.11.12 | ||
RS2 | 192.168.11.13 |
[root@lvs ~]# grep -i vs /boot/config-3.10.0-229.el7.x86_64 有IP_VS段說明支持
yum install -y ipvsadm
ipvsadm :
管理集羣服務
添加:-A -t|u|f service-address [-s scheduler]
-t:TCP協議
-u:UDP協議
-f:FWM,防火牆標記
修改:-E
刪除:-D -t|u|f service-address
# ipvsadm -A -t 192.168.2.23:80 -s rr
管理集羣服務中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定義好的某集羣服務
-r server-address:某RS的地址,在NAT模型中,可以使用IP:PORT實現映射
[-g|i|m]:LVS類型
-g:DR模型
-i:TUN模型
-m:NAT模型
[-w weight]:定義服務器權重
修改:-e
刪除:-d -t|u|f service-address -r server-address
# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.11 -m
# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.13 -m
查看:-L|l
-n:數字格式顯示主機地址和端口
--stats:統計數據
--rate:速率
--timeout:顯示tcp、tcpfin和udp的會話超時時長
-c:顯示當前的ipvs鏈接情況
刪除全部集羣服務 html
-C:清空ipvs規則
保存規則
-S
# ipvsadm -S > /ath/to/somfefile
載入此前的規則:
-R
# ipvsadm -R < /path/from/somefile
前端
[root@lvs ~]# ipvsadm -A -t 192.168.2.23:80 -s rr [root@lvs ~]# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.12 -m [root@lvs ~]# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.13 -m
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p 使配置文件生效node
root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2
NAT模式:客戶端-->分發路由器-->Real Server-->分發路由器-->客戶機
DR模式:客戶端-->分發路由器--Real Server-->客戶機
TUN模式:客戶機-->分發路由器--Real Server-->客戶機linux
client | | Router | | ------------------------------------ | | | RS1 LVS RS3 Rip:192.168.2.72 Rip:192.168.2.23 Rip:192.168.2.104 Vip:192.168.2.200 Vip:192.168.2.200 Vip:192.168.2.200
ip addr add 192.168.2.200/32 dev eno16777736:1 ipvsadm -A -t 192.168.2.200:80 -s rr ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.72 -g ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.104:80 -g
arp_ignore參數的做用是控制系統在收到外部的ARP請求, 是否要回返ARP響應。nginx
8 - 不迴應全部的ARP查詢web
2 - IP數據包的源IP地址,選擇該發送網卡上最合適的本地地址做爲ARP請求的源IP地址緩存
ip addr add 192.168.2.200/32 dev lo:1 echo 1 > /proc/sys/net/ipv4/conf/eno16777736/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce
root@node2:~# curl http://192.168.2.200/index.html rs1 root@node2:~# curl http://192.168.2.200/index.html rs2 root@node2:~# curl http://192.168.2.200/index.html rs1 root@node2:~# curl http://192.168.2.200/index.html rs2 root@node2:~# curl http://192.168.2.200/index.html rs1 root@node2:~# curl http://192.168.2.200/index.html rs2
代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務器接受客戶請求以後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的磁盤中,再發送給客戶機。安全
經過代理服務器訪問不能訪問的目標站點
互聯網上有施工開發的代理服務器,客戶機在訪問受限時,可經過不受限的代理服務器訪問目標站點服務器
反向代理有哪些主要應用
如今許多大型web網站都用到反向代理。除了能夠防止網網對內網服務器的惡意攻擊、緩存以減小服務器的壓力和訪問安全控制以外,還能夠進行負載均衡,將用戶請求分配給多個服務器。網絡
新建配置文件/etc/nginx/conf.d/proxy.conf
upstream websrvs { server 192.168.2.72:80; server 192.168.2.104:80; } server { listen 80 default_server; server_name _; location / { proxy_pass http://websrvs; index index.html ; } }
root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html rs1 root@node2:~# curl http://192.168.2.23/index.html rs2 root@node2:~# curl http://192.168.2.23/index.html
若是一臺服務器有多個IP,可使用基於IP的虛擬主機配置,將不一樣的服務綁定在不一樣的IP上。
[root@lvs conf.d]# ip addr add 192.168.2.151/24 dev eno16777736:2 [root@lvs conf.d]# ip addr add 192.168.2.152/24 dev eno16777736:3 [root@lvs conf.d]# ip addr add 192.168.2.154/24 dev eno16777736:4
[root@lvs conf.d]# mkdir -pv /data/www/15{1..3} mkdir: 已建立目錄 "/data" mkdir: 已建立目錄 "/data/www" mkdir: 已建立目錄 "/data/www/151" mkdir: 已建立目錄 "/data/www/152" mkdir: 已建立目錄 "/data/www/153" [root@lvs conf.d]# echo server151 > /data/www/151/index.html [root@lvs conf.d]# echo server152 > /data/www/152/index.html [root@lvs conf.d]# echo server153 > /data/www/153/index.html
/etc/nginx/conf.d/test.conf
server { listen 192.168.2.151:80; server_name www.test.com; location / { root /data/www/151; index index.html; } } server { listen 192.168.2.152:80; server_name www.test.com; location / { root /data/www/152; index index.html; } } server { listen 192.168.2.153:80; server_name www.test.com; location / { root /data/www/153; index index.html; } }
root@node2:~# curl http://192.168.2.153/index.html server153 root@node2:~# curl http://192.168.2.152/index.html server152 root@node2:~# curl http://192.168.2.151/index.html server151
若是一臺服務器只有一個IP或須要經過不一樣的端口訪問不一樣的虛擬主機,可使用基於端口的虛擬主機配置
[root@lvs conf.d]# mkdir /data/www/{7..9}081 [root@lvs conf.d]# echo "port 7081" > /data/www/7081/index.html [root@lvs conf.d]# echo "port 8081" > /data/www/8081/index.html [root@lvs conf.d]# echo "port 9081" > /data/www/9081/index.html
/etc/nginx/conf.d/port.conf
server { listen 192.168.2.155:7081; server_name www.port.com; location / { root /data/www/7081; index index.html; } } server { listen 192.168.2.155:8081; server_name www.port.com; location / { root /data/www/8081; index index.html; } } server { listen 192.168.2.155:9081; server_name www.port.com; location / { root /data/www/9081; index index.html; } }
測試結果:
root@node2:~# curl http://192.168.2.155:7081/index.html port 7081 root@node2:~# curl http://192.168.2.155:8081/index.html port 8081 root@node2:~# curl http://192.168.2.155:9081/index.html port 9081
使用基於域名的虛擬主機是比較流行的方式,能夠在同一個IP上配置多個域名,而且都經過80端口訪問
[root@lvs conf.d]# mkdir /data/www/www.oa.com [root@lvs conf.d]# mkdir /data/www/www.bbs.com [root@lvs conf.d]# mkdir /data/www/www.test.com [root@lvs conf.d]# echo www.oa.com > /data/www/www.oa.com/index.html [root@lvs conf.d]# echo www.bbs.com > /data/www/www.bbs.com/index.html [root@lvs conf.d]# echo www.test.com > /data/www/www.test.com/index.html
/etc/nginx/conf.d/vhost.conf
server { listen 192.168.2.155:80; server_name www.oa.com; location / { root /data/www/www.oa.com; index index.html; } } server { listen 192.168.2.155:80; server_name www.bbs.com; location / { root /data/www/www.bbs.com; index index.html; } } server { listen 192.168.2.155:80; server_name www.test.com; location / { root /data/www/www.test.com; index index.html; } }
root@node2:~# curl http://www.oa.com/index.html www.oa.com root@node2:~# curl http://www.bbs.com/index.html www.bbs.com root@node2:~# curl http://www.test.com/index.html www.test.com
參考文檔: https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_021_lvsnat.html https://www.cnblogs.com/knowledgesea/p/6407018.html#undefined https://www.cnblogs.com/lipengxiang2009/p/7451050.html https://blog.csdn.net/Daybreak1209/article/details/51549031 https://blog.csdn.net/liupeifeng3514/article/details/79006998 https://blog.csdn.net/liupeifeng3514/article/details/79007035 https://blog.csdn.net/liupeifeng3514/article/details/79007051