1. 程式人生 > >負載均衡基礎實踐

負載均衡基礎實踐

負載均衡

  • 使用NAT模型的TCP協議類型的lvs服務負載均衡一個php應用,如Discuz!論壇或者phpMyAdmin;

    首先了解nat模型:用戶端,通過訪問172.16.0.146端口,調度器會將請求隨機轉換到,後端的連個服務器,本次采用輪回調度的方式

    技術分享圖片

  • 在調度器上的,配置

    a.創建集群服務,並添加服務器


  •  [root@www ~]# ipvsadm -A -t 172.16.0.146:80 -s rr
    
     [root@www ~]# ipvsadm -a -t 172.16.0.146:80 -r 192.168.100.100:80 -m
     [root@www ~]# ipvsadm -a -t 172.16.0.146:80 -r 192.168.100.200:8000 -m
  • b.開啟此主機的核心轉發功能

    [root@www ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

    4.服務器上的配置,192.168.100.100服務器上配置,安裝httpd,php,php-mysql,mysql-server

    a.為此主機配置,phpmyadmin服務,並在資源目錄下做測試頁面index.html

    <VirtualHost 192.168.100.100:80>
            ServerName www.admin.com
            DocumentRoot "/myweb/admin/"
            <Directory "/myweb/admin/">
                    Options None
                    AllowOverRide None
                    Order deny,allow
                    Allow from all
            </Directory>
    </VirtualHost>

    b.給此服務器的數據庫創建新用戶並授權

    mysql> grant all on *.* to 'wang'@'localhost' identifide by '111111';

    c.修改此主機的防火墻策略,讓此服務器可以給調度器的請求做響應

    d.給此主機做默認網關,網關為192.168.100.1

    [root@localhost ~]# route add default gw 192.168.100.1

    5.給192.168.100.200:8000服務器也做同樣的操作

    6.在客戶端172.16.0.150做網關172.16.0.146,並對調度器進行訪問測試

    [root@localhost ~]# for i in {1..10};do curl 172.16.0.146/index.html;done
    192.168.100.200:8000
    192.168.100.100:80
    192.168.100.200:8000
    192.168.100.100:80
    192.168.100.200:8000
    192.168.100.100:80
    192.168.100.200:8000
    192.168.100.100:80
    192.168.100.200:8000
    192.168.100.100:80

    7。使用網頁訪問phpmyadmin,因為沒有建立持久連接,所以會一直保留在此頁面上,

    技術分享圖片

    但是在調度器上,使用ipvsadm -ln,可以看到,後端real server被訪問的次數,每登錄一次則,會自動跳到另一個服務器

    技術分享圖片

    8.當我們建立持久連接時,則可以訪問此程序,為了顯示更直觀,倆臺服務器,數據庫不同

    技術分享圖片

    因為長連接是有時間限制的,所以我們需要等一段時間,然後重新訪問,可以看到數據庫發生變化,證明負載均衡成功

    技術分享圖片

    9.為了使倆個服務器提供內容一樣,需要做數據庫共享;

    使用samba,做目錄共享,共享/mydata目錄,並賦予mysql用戶寫權限,同時在文件系統上讓/mydata文件系統對mysql用戶有寫權限,將192.168.100.100服務器的數據庫復制到/mydata下,使用192.168.100.200,用mysql用戶掛載到/data/下

    技術分享圖片

    [root@bogon ~]# mount -t cifs -o username=mysql //192.168.100.100/discuz /data

    更改192.168.100.200數據庫目錄,修改/etc/my.cnf的datadir=/data

    重啟mysql服務,這樣無論使用哪臺服務器訪問,都是同一個數據庫


    2.使用DR模型的FWM類型的lvs服務負載均衡一個php應用,如Discuz!論壇或者phpMyAdmin;

    所謂FWM類型,是利用防火墻標記進行,然後利用此標記填加集群服務

    所謂DR模型:是對報文的MAC地址進行重新封裝,轉發,但在整個過程中ip地址,端口號不會發生變化

    ----DR原理簡析:

    1. 客戶端向調度器VIP發送請求報文

    2. 調度器會對請求報文重新封裝,使得源MAC地址變為DIP,目標MAC地址為後端RIP

    3. 後端的real server,將請求報文解封裝後,對資源進行處理

    4. 後端real server在發送響應報文時,不再通過調度器,發送給客戶端,而是利用自己的環回接口為VIP的地址進行相應給客戶端

    a.首先觀察其拓撲圖

    技術分享圖片

    b.對調度器進行設置:

    1.設置DIP與VIP,DIP和VIP在同一個網卡上,且VIP應該設在標簽端口上(保證DIP和VIP是同一個MAC地址)


    2.做防火墻標記,在mangle表上標記

    3.使用該標記做集群服務

    4.給集群添加服務器

    技術分享圖片

    [root@localhost ~]# iptables -t mangle -A PREROUTING -d 172.16.0.150 -p tcp --dport 80 -j MARK --set-mark 2
    localhost ~]# ipvsadm -A -f 2 -s rr 
    [root@localhost ~]# ipvsadm -a -f 2 -r 172.16.0.151 -g -w 1
    [root@localhost ~]# ipvsadm -a -f 2 -r 172.16.0.152 -g -w 1
    [root@localhost ~]#

    c.對real server的配置:

    1.配置相應的RIP

    2.在環回接口上配置VIP,

    3.配置http,php,mysql服務

    4.設置合理的安全策略

    5.修改內核參數

    6.給lo接口做特定路由


       13  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  //只響應目的IP地址為接收網卡上的本地地址的ARP請求
       14  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
       15  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
       16  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  //忽略IP數據包的源IP地址,選擇該發送網卡上最合適的本地地址作為ARP請求的源IP地址
       17  route add -host 172.16.72.254 dev lo:0 //使響應報文從lo:0標簽接口向外封裝發送數據


    d.同樣使用客戶端先進行測試訪問

    技術分享圖片

    e.建立長連接

    f.使用網頁進行測試訪問

    技術分享圖片

    技術分享圖片

    註意:使用網頁訪問時,應該使用VIP作為目標IP

    添加集群服務器時,後端real server 不可以添加端口

    負載均衡基礎實踐