LVS負載均衡

版權聲明:本文爲yunshuxueyuan原創文章。
如需轉載請標明出處: http://www.cnblogs.com/sxt-zkys/
QQ技術交流羣:299142667css

LVS負載均衡

1. 基本介紹html

負載均衡集羣是 load balance 集羣的簡寫,翻譯成中文就是負載均衡集羣。經常使用的負載均衡開源軟件有nginx、lvs、haproxy,商業的硬件負載均衡設備F五、Netscale。這裏主要是學習 LVS 並對其進行了詳細的總結記錄。java

LB集羣的架構和原理很簡單,就是當用戶的請求過來時,會直接分發到Director Server上,而後它把用戶的請求根據設置好的調度算法,智能均衡地分發到後端真正服務器(real server)上。爲了不不一樣機器上用戶請求獲得的數據不同,須要用到了共享存儲,這樣保證全部用戶請求的數據是同樣的。nginx

2. Lvs的組成:web

LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。算法

1. ipvs(ip virtual server):一段代碼工做在內核空間,叫ipvs,是真正生效實現調度的代碼。後端

2. ipvsadm:另一段是工做在用戶空間,叫ipvsadm,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)緩存

3. Lvs配置步驟:tomcat

a. 準備好3臺虛擬機,配置ip在同一網段服務器

b. 配置lvs的VIP

 

c. 調整後端真實server的響應,通告級別(每一臺)

echo 1  > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2  > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 1  > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2  > /proc/sys/net/ipv4/conf/all/arp_announce

d. 調整後端真實server的VIP(每一臺)

ifconfig lo:8 192.168.9.100 netmask 255.255.255.255

e. 啓動真實server上的httpd服務,並編寫歡迎頁面

service httpd start

/var/www/html

vi index.html  from ooxxip

f. 在LVS主機器上安裝ipvsadm,並配置

yum install ipvsadm -y

ipvsadm -A -t 192.168.9.100:80 -s rr

ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g

ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.13 -g

ipvsadm -ln

ipvsadm –lnc

g. 保存規則:

ipvsadm -S > /tmp/lvs_conf

h. 載入此前規則:

ipvsadm -R < /tmp/lvs_conf

KEEPALIVED高可用

1. 定義

Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現。

2. 安裝配置:

a. yum install  keepalived

b. vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived



global_defs {

   notification_email {

     acassen@firewall.loc  #發送提醒郵件的目標地址能夠有多個

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc #發送郵件的from地址,能夠隨意寫,郵件地址不存在都無所謂

   smtp_server 192.168.200.1 #郵件服務的地址,通常寫本地

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}



vrrp_instance VI_1 {

    state MASTER         #MASTER 主和從

    interface eth0       #VIP須要綁定的網卡名稱

    virtual_router_id 51

    priority 150         #優先級 主的優先級要高

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

192.168.122.200/24 dev eth0 label eth0:0 #設置VIP

    }

}



virtual_server 192.168.122.200 80 { #設置虛擬lvs服務,VIP PORT

    delay_loop 6

    lb_algo rr #調度算法

    lb_kind DR #lvs的模式

    nat_mask 255.255.255.0

    persistence_timeout 0 同一個IP地址在n秒內lvs轉發給同一個後端服務器

    protocol TCP



    real_server 192.168.122.112 80 {#設置真實服務器的心跳機制

        weight 1#權重

        HTTP_GET {#心跳檢測的方式(注意空格)

            url {

              path /#心跳檢查的地址

            status_code 200#心跳檢查返回的狀態

            }

            connect_timeout 3#超時時間

            nb_get_retry 3#重複檢查3次

            delay_before_retry 3#每隔1秒鐘再次檢查

        }

    }

    real_server 192.168.122.113 80 {#同上

        weight 1

        HTTP_GET {

            url {

              path /

            status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

c. service keepalived start

NGINX

1. Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

2. 安裝:

a. 下載源碼包

b. 解壓縮:tar xf filename

c. ./configure

檢查操做系統

檢查編譯環境

yum install gcc

pcre 依賴庫

yum search pcre

yum install pcre-devel

openssl

yum install opssl-devel

./configure --help

./configure --prefix=/opt/sxt/nginx

d. make && make install

3. 添加tengine到註冊表,將下面文件中的代碼,拷貝到/etc/init.d/nginx中;而後就可使用service命令了

4. 配置:

a. 文件結構

全局塊:配置影響nginx全局的指令。通常有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,容許生成worker process數等。

events塊:配置影響nginx服務器或與用戶的網絡鏈接。有每一個進程的最大鏈接數,選取哪一種事件驅動模型處理鏈接請求,是否容許同時接受多個網路鏈接,開啓多個網絡鏈接序列化等。

http塊:能夠嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間,單鏈接請求數等。

server塊:配置虛擬主機的相關參數,一個http中能夠有多個server。

location塊:配置請求的路由,以及各類頁面的處理狀況。

b. 配置文件示例:

#user  nobody; #配置用戶或者組,默認爲nobody nobody

worker_processes  1; #容許生成的進程數,默認爲1



#error_log  logs/error.log;#制定日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;



#pid        logs/nginx.pid;#指定nginx進程運行文件存放地址





events {

    worker_connections  1024;#最大鏈接數

}



# load modules compiled as Dynamic Shared Object (DSO)

#

#dso {

#    load ngx_http_fastcgi_module.so;

#    load ngx_http_rewrite_module.so;

#}



http {

    include       mime.types;#文件擴展名與文件類型映射表

    default_type  application/octet-stream;#默認文件類型,默認爲text/plain



    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #                  '$status $body_bytes_sent "$http_referer" '

    #                  '"$http_user_agent" "$http_x_forwarded_for"';



    #access_log  logs/access.log  main;



    sendfile        on;#容許sendfile方式傳輸文件

    #tcp_nopush     on;



    keepalive_timeout  0;#鏈接超時時間

    #keepalive_timeout  65;



    #gzip  on;



    upstream httpd {#服務器列表

server 192.168.122.112:80;

server 192.168.122.113:80;

    }



    upstream tom {

server 192.168.122.112:8080;

server 192.168.122.113:8080;

    }



    server {

        listen       80;#監聽端口

        server_name  localhost;#監聽地址



        #charset koi8-r;



        #access_log  logs/host.access.log  main;



        location / {#請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。

            root   html;#根目錄

            index  index.html index.htm;#設置默認頁

    #autoindex on;

        }



location /mp3 {

    proxy_pass http://httpd/;#請求轉向httpd 定義的服務器列表

}



location /tom {

    proxy_pass http://tom/;

}



}

c. location匹配規則:

先普通

順序無關

最大前綴

匹配規則簡單

打斷:

^~

徹底匹配

再正則

不徹底匹配

正則特殊性:一條URI能夠和多條location匹配上

有順序的

先匹配,先應用,即時退出匹配

5. session共享及一致性解決方案:

a. memcached緩存服務,能夠和tomcat整合

b. 安裝memcached

yum install memcached –y

c. 啓動memcached

memcached -d -m 128m -p 11211 -l 192.168.122.111 -u root -P /tmp/

d. 拷貝memcached相關jar包到tomcat的lib下

e. 配置tomcat,每一個tomcat裏面的context.xml中加入

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:192.168.122.111:11211"

    sticky="false"

    lockingMode="auto"

    sessionBackupAsync="false"

   requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>
相關文章
相關標籤/搜索