理解負載均衡羣集的原理html
掌握LVS-NAT的部署java
1.Cluster,集羣、羣集
2.由多臺主機構成,但對外只表現爲一個總體linux
1.使用價格昂貴的小型機、大型機
2.使用普通服務器構建服務羣集web
1.負載均衡羣集(輪詢,最小鏈接的加權重)
2.高可用羣集(訪問的速度,可靠性)
3.高性能運算羣集(併發處理任務)算法負載均衡羣集(Load Balance Cluster):
1.以提升應用系統的響應能力、儘量處理更多的訪問請求、減小延遲爲目標,得到高併發、負載(LB) 的總體性能
2.LB的負載分配依賴於主節點的分流算法vim
1.以提升應用系統的可靠性、儘量地減小中斷時間爲目標,確保服務的連續性,達到高可用(HA) 的容錯效果
2.HA的工做方式包括雙工和主從兩種模式瀏覽器
1.以提升應用系統的CPU運算速度、擴展硬件資源和分析能力爲目標,得到至關於大型、超級計算機的高性能運算(HPC)能力
2.高性能運算羣集的高性能依賴於"分佈式運算」、「並行計算」 ,經過專用硬件和軟件將多個服務器的CPU、內存等資源整合在一塊兒,實現只有大型、超級計算機才具有的計算能力安全
1.地址轉換
2.IP隧道
3.直接路由(DR)bash
1.簡稱NAT模式,相似於防火牆的私有網絡結構,負載調度器做爲全部服務器節點的網關,即做爲客戶機的訪問入口,也是各節點回應客戶機的訪問出口
2.服務器節點使用私有IP地址,與負載調度器位於同一個物理網絡,安全性要優於其餘兩種方式服務器
1.簡稱TUN模式,採用開放式的網絡結構,負載調度器僅做爲客戶機的訪問入口,各節點經過各自的Internet鏈接直接回應客戶機,而再也不通過負載調度器
2.服務器節點分散在互聯網中的不一樣位置,具備獨立的公網IP地址,經過專用IP隧道與負載調度器相互通訊
1.簡稱DR模式,採用半開放式的網絡結構,與TUN模式的結構相似,但各節點並非分散在各地,而是與調度器位於同一個物理網絡
2.負載調度器與各節點服務器經過本地網絡鏈接,不須要創建專用的IP隧道
####負載均衡的結構:
1.第一層,負載調度器(Load Balancer或Director)
2.第二層,服務器池(Server Pool)
3.第三層,共享存儲(Share Storage)
1.針對Linux內核的負載均衡解決方案
2.1998年5月,由我國的章文嵩博士建立
3.官方網站: http://www.linuxvirtualserver.org/
①將收到的訪問請求按照順序輪流分配給羣集中的各節點(真實服務器)
②均等地對待每一臺服務器, 而無論服務器實際的鏈接數和系統負載
①根據真實服務器的處理能力輪流分配收到的訪問請求,調度器能夠自動查詢各節點的負載狀況,並動態調整其權重
②保證處理能力強的服務器承擔更多的訪問流量
①根據真實服務器已創建的鏈接數進行分配,將收到的訪問請求優先分配給鏈接數最少的節點
①在服務器節點的性能差別較大的狀況下,能夠爲真實服務器自動調整權重
②權重較高的節點將承擔更大比例的活動鏈接負載
1.依賴於RPC (遠端過程調用)
2.需安裝nfs-utils、rpcbind軟件包
3.系統服務: nfs、 rpcbind
4.共享配置文件: /etc/exports
1.安裝rpcbind軟件包,並啓動rpcbind服務
2.手動掛載NFS共享目錄
3.fstab自動掛載設置
CentOS 7-1:調度器,網關(須要兩塊網卡)外:12.0.0.1 內:192.168.200.1
CentOS 7-2:網站服務器(Apache)192.168.200.110
CentOS 7-3:網站服務器(Apache)192.168.200.120
CentOS 7-4:提供共享存儲 192.168.200.130
win7-1:客戶端 12.0.0.12
[root@localhost ~]# rpm -q nfs-utils nfs-utils-1.3.0-0.48.el7.x86_64 [root@localhost ~]# rpm -q rpcbind rpcbind-0.2.0-42.el7.x86_64
[root@localhost ~]# yum install httpd -y
//要先添加一個網絡適配器,成爲兩個網卡 [root@localhost ~]# yum install ipvsadm -y
//先將網卡更改成僅主機模式 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="static" //將dhcp改成static DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.200.130 //在末行下插入:IP,子網,網關 NETMASK=255.255.255.0 GATEWAY=192.168.200.1 修改完成後輸入:wq保存退出 [root@localhost ~]# service network restart Restarting network (via systemctl): [ 肯定 ] [root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl start nfs.service [root@localhost ~]# systemctl status nfs.service ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Active: active (exited) since 二 2019-11-26 17:42:05 CST; 11s ago ......省略多行,狀態爲Active說明正常 [root@localhost ~]# systemctl start rpcbind.service [root@localhost ~]# systemctl status rpcbind.service ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled) Active: active (running) since 二 2019-11-26 17:40:23 CST; 4min 26s ago ......省略多行,狀態爲Active說明正常 [root@localhost ~]# vim /etc/exports /usr/share *(ro,sync) /opt/accp 192.168.200.0/24(rw,sync) /opt/benet 192.168.200.0/24(rw,sync) //加入以上內容以後輸入:wq保存退出 [root@localhost ~]# cd /opt/ [root@localhost opt]# mkdir benet accp [root@localhost opt]# ls -l 總用量 0 drwxr-xr-x. 2 root root 6 11月 26 17:50 accp drwxr-xr-x. 2 root root 6 11月 26 17:50 benet drwxr-xr-x. 2 root root 6 3月 26 2015 rh [root@localhost opt]# chmod 777 accp/ benet/ //提高權限 [root@localhost opt]# ls -l 總用量 0 drwxrwxrwx. 2 root root 6 11月 26 17:50 accp drwxrwxrwx. 2 root root 6 11月 26 17:50 benet drwxr-xr-x. 2 root root 6 3月 26 2015 rh [root@localhost opt]# exportfs -rv //進行發佈 exporting 192.168.200.0/24:/opt/benet exporting 192.168.200.0/24:/opt/accp exporting *:/usr/share
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="static" //將dhcp改成static DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.200.110 //在末行下插入:IP,子網,網關 NETMASK=255.255.255.0 GATEWAY=192.168.200.1 修改完成後輸入:wq保存退出 [root@localhost ~]# service network restart Restarting network (via systemctl): [ 肯定 ] [root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl start httpd.service [root@localhost ~]# netstat -ntap | grep 80 tcp6 0 0 :::80 :::* LISTEN 7315/httpd //設置網絡適配器爲僅主機 [root@localhost ~]# ping 192.168.200.130 PING 192.168.200.130 (192.168.200.130) 56(84) bytes of data. 64 bytes from 192.168.200.130: icmp_seq=1 ttl=64 time=0.754 ms 64 bytes from 192.168.200.130: icmp_seq=2 ttl=64 time=0.368 ms 64 bytes from 192.168.200.130: icmp_seq=3 ttl=64 time=0.398 ms [root@localhost ~]# showmount -e 192.168.200.130 Export list for 192.168.200.130: /usr/share * /opt/benet 192.168.200.0/24 /opt/accp 192.168.200.0/24 [root@localhost ~]# mount.nfs 192.168.200.130:/opt/accp /var/www/html/ [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda2 20G 4.3G 16G 22% / devtmpfs 898M 0 898M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.0M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 6.0G 174M 5.9G 3% /boot /dev/sda5 10G 54M 10G 1% /home tmpfs 183M 4.0K 183M 1% /run/user/42 tmpfs 183M 20K 183M 1% /run/user/0 /dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64 192.168.200.130:/opt/accp 20G 3.4G 17G 17% /var/www/html [root@localhost ~]# cd /var/www/html/ [root@localhost html]# echo "this is accp web" > index.html [root@localhost html]# ls index.html
[root@localhost ~]# cd /opt/ [root@localhost opt]# ls accp benet rh [root@localhost opt]# cd accp/ [root@localhost accp]# ls index.html [root@localhost accp]# cat index.html this is accp web //此時有咱們新建的index.html文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="static" //將dhcp改成static DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.200.120 //在末行下插入:IP,子網,網關 NETMASK=255.255.255.0 GATEWAY=192.168.200.1 //修改完成後輸入:wq保存退出 [root@localhost ~]# service network restart Restarting network (via systemctl): [ 肯定 ] [root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl start httpd.service [root@localhost ~]# netstat -ntap | grep 80 tcp6 0 0 :::80 :::* LISTEN 7315/httpd //設置網絡適配器爲僅主機 [root@localhost ~]# ping 192.168.200.130 PING 192.168.200.130 (192.168.200.130) 56(84) bytes of data. 64 bytes from 192.168.200.130: icmp_seq=1 ttl=64 time=0.532 ms 64 bytes from 192.168.200.130: icmp_seq=2 ttl=64 time=1.01 ms 64 bytes from 192.168.200.130: icmp_seq=3 ttl=64 time=0.940 ms [root@localhost ~]# showmount -e 192.168.200.130 Export list for 192.168.200.130: /usr/share * /opt/benet 192.168.200.0/24 /opt/accp 192.168.200.0/24 [root@localhost ~]# mount.nfs 192.168.200.130:/opt/benet /var/www/html/ [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda2 20G 3.4G 17G 17% / devtmpfs 898M 0 898M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.0M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 6.0G 174M 5.9G 3% /boot /dev/sda5 10G 54M 10G 1% /home tmpfs 183M 4.0K 183M 1% /run/user/42 tmpfs 183M 20K 183M 1% /run/user/0 /dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64 192.168.200.130:/opt/benet 20G 3.4G 17G 17% /var/www/html [root@localhost ~]# cd /var/www/html/ [root@localhost html]# echo "this is benet web" > index.html [root@localhost html]# ls index.html
[root@localhost ~]# cd /opt/ [root@localhost opt]# ls accp benet rh [root@localhost opt]# cd accp/ [root@localhost accp]# ls index.html [root@localhost accp]# cat index.html this is benet web //此時有咱們新建的index.html文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-ens33 ifdown-ppp ifup-ib ifup-Team ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36 [root@localhost network-scripts]# vim ifcfg-ens36 BOOTPROTO="static" //將dhcp改成static NAME="ens36" //把名稱改成ens36 UUID號刪除 DEVICE="ens36" //把名稱改成ens36 ONBOOT="yes" IPADDR=12.0.0.1 //在末行下插入:IP,子網 NETMASK=255.255.255.0 //修改完成後輸入:wq保存退出 [root@localhost network-scripts]# vim ifcfg-ens33 BOOTPROTO="static" //將dhcp改成static DEVICE="ens33" ONBOOT="yes" //在末行下插入:IP,子網 IPADDR=192.168.200.1 NETMASK=255.255.255.0 //修改完成後輸入:wq保存退出 [root@localhost network-scripts]# service network restart Restarting network (via systemctl): [ 肯定 ] [root@localhost network-scripts]# vim /etc/sysctl.conf //在最後一行按o轉下行插入 net.ipv4.ip_forward=1 //修改完成後輸入:wq保存退出 [root@localhost network-scripts]# sysctl -p net.ipv4.ip_forward = 1 [root@localhost network-scripts]# iptables -t nat -F [root@localhost network-scripts]# iptables -F [root@localhost network-scripts]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
[root@localhost html]# ping 12.0.0.12 PING 12.0.0.12 (12.0.0.12) 56(84) bytes of data. 64 bytes from 12.0.0.12: icmp_seq=1 ttl=127 time=1.14 ms 64 bytes from 12.0.0.12: icmp_seq=2 ttl=127 time=1.78 ms 64 bytes from 12.0.0.12: icmp_seq=3 ttl=127 time=1.02 ms //此時能夠ping通,說明迴應沒有問題
[root@localhost network-scripts]# modprobe ip_vs [root@localhost network-scripts]# cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost network-scripts]# ipvsadm --save > /etc/sysconfig/ipvsadm [root@localhost network-scripts]# systemctl start ipvsadm.service
[root@localhost network-scripts]# cd /opt/ [root@localhost opt]# vim nat.sh #!/bin/bash ipvsadm -C //清除內核虛擬服務器表中的全部記錄 ipvsadm -A -t 12.0.0.1:80 -s rr //添加新的虛擬的服務器 ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.110:80 -m ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.120:80 -m ipvsadm //輸入完成後輸入:wq保存退出 [root@localhost opt]# source nat.sh IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP localhost.localdomain:http rr -> 129.168.200.110:http Masq 1 0 0 -> 129.168.200.120:http Masq 1 0 0