亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么叫高可用負載均衡架構

發布時間:2020-04-15 17:07:31 來源:億速云 閱讀:566 作者:三月 欄目:建站服務器

億速云負載均衡(Cloud Load Balancer)是對多臺云服務器進行流量分發的服務。億速云負載均衡可以通過流量分發擴展應用系統對外的服務能力,通過消除單點故障提升應用系統的可用性。億速云負載均衡服務通過設置虛擬服務地址(VIP),將位于同一地域的多臺云服務器資源虛擬成一個高性能、高可用的應用服務池。根據應用指定的方式,將來自客戶端的網絡請求分發到云服務器池中。億速云負載均衡服務會檢查云服務器池中云服務器實例的健康狀態,自動隔離異常狀態的實例,從而解決了云服務器的單點問題,同時提高了應用的整體服務能力。今天億速云給大家介紹下什么是高可用負載均衡架構


什么叫高可用負載均衡架構

高可用負載均衡架構

 

1     前言

1.1  LVS介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛擬云服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR),十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq):

1.1.1     靜態調度

①rr(Round Robin):輪詢調度,輪叫調度

輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然后重新開始循環。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。【提示:這里是不考慮每臺服務器的處理能力】

 

②wrr:weight,加權(以權重之間的比例實現在各主機之間進行調度)

由于每臺服務器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。

 

③sh:source hashing,源地址散列。主要實現會話綁定,能夠將此前建立的session信息保留了

源地址散列調度算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的并且沒有超負荷,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法的相同。它的算法流程與目標地址散列調度算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址,所以這里不一個一個敘述。

 

④Dh:Destination hashing:目標地址散列。把同一個IP地址的請求,發送給同一個server。

目標地址散列調度算法也是針對目標IP地址的負載均衡,它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

 

1.1.2     動態調度

①lc(Least-Connection):最少連接

最少連接調度算法是把新的連接請求分配到當前連接數最小的服務器,最小連接調度是一種動態調度短算法,它通過服務器當前所活躍的連接數來估計服務器的負載均衡,調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1,當連接中止或超時,其連接數減一,在系統實現時,我們也引入當服務器的權值為0時,表示該服務器不可用而不被調度。

簡單算法:active*256+inactive(誰的小,挑誰)

 

②wlc(Weighted Least-Connection Scheduling):加權最少連接。

加權最小連接調度算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權限,加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。

簡單算法:(active*256+inactive)/weight【(活動的連接數+1)/除以權重】(誰的小,挑誰)

 

③sed(Shortest Expected Delay):最短期望延遲

基于wlc算法

簡單算法:(active+1)*256/weight 【(活動的連接數+1)*256/除以權重】

 

④nq(never queue):永不排隊(改進的sed)

無需隊列,如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。

 

⑤LBLC(Locality-Based Least Connection):基于局部性的最少連接

基于局部性的最少連接算法是針對請求報文的目標IP地址的負載均衡調度,不簽主要用于Cache集群系統,因為Cache集群中客戶請求報文的布標IP地址是變化的,這里假設任何后端服務器都可以處理任何請求,算法的設計目標在服務器的負載基本平衡的情況下,將相同的目標IP地址的請求調度到同一個臺服務器,來提高個太服務器的訪問局部性和主存Cache命中率,從而調整整個集群系統的處理能力。

基于局部性的最少連接調度算法根據請求的目標IP地址找出該目標IP地址最近使用的RealServer,若該Real Server是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。

 

⑥LBLCR(Locality-Based Least ConnectionswithReplication):帶復制的基于局部性最少鏈接

帶復制的基于局部性最少鏈接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

 

1.1.3     IPVS實現負載均衡的方法

l  NAT:地址轉換(類似于DNAT)

1、集群點跟director必須工作在同一個IP的網絡中

2、RIP通常是私有地址,僅用于各集群節點間的的通信

3、director位于client和real server之間,并負責處理進出的所有通道。

4、realserver必須將網關執行DIP

5、director支持端口映射

6、realserver可以使用任何類型的操作系統(os)

7、較大規模應用場景中,director易成為系統瓶頸

l  DR:直接路由(及用于作為源地址)

1、各集群節點跟director必須在同一個物理網絡中;

2、RIP可以使用公網地址,實現便攜的遠程管理和監控;

3、director僅負責處理入站請求,形影報文則有realserver直接發往客戶端

4、realserver不能將網關指向DIP,而是直接指向前端網關;

5、director不支持端口映射

6、大多數操作系統能夠用在realserver

7、director能夠處理更多的realserver

l  TUN:隧道

1、集群節點可以跨越Internet

2、RIP必須是公網地址

3、director僅負責處理入站請求,形影報文則有realserver直接發往客戶端

4、realserver網關不能指向director

5、只有咫尺隧道功能的OS才能用于realserver

6、不支持端口映射

1.2  Keepalived

Keepalived在這里主要用作RealServer的健康狀態檢查以及Master主機和BackUP主機之間failover的實現下面,搭建基于LVS+Keepalived的高可用負載均衡集群,其中,LVS實現負載均衡,但是,簡單的LVS不能監控后端節點是否健康,它只是基于具體的調度算法對后端服務節點進行訪問。同時,單一的LVS又存在單點故障的風險。在這里,引進了Keepalived,可以實現以下幾個功能:

1. 檢測后端節點是否健康。

2. 實現LVS本身的高可用。

 

1.3  Haproxy

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件[1],其提供高可用性、負載均衡,以及基于TCP和HTTP的應用程序代理。

HAProxy特別適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。

HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間(User-Space)實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

2     架構圖

什么叫高可用負載均衡架構

架構圖說明:

1,LVS兩臺服務器,虛擬IP使用在Haproxy服務器上,保證高可用。

2,Haproxy主要作用是夸網段IP支持,LVS不支持夸網段。

3,Nginx Proxy主要有緩存作用增加性能。

4,后端數據庫層次,再次使用了LVS高可用,虛擬IP使用在mycat服務器上。

5,Mycat作用是讀寫分離,增加性能和高可用Mysql。正常情況下寫是Mysql Master1,讀是Mysql Master2,Mysql Slave,如Mysql Master1出現故障。則讀寫切換到Mysql Master2。

PS:最上層兩臺LVS服務器建議用高性能物理機。

 

3     應用安裝配置

3.1  實驗環境

系統版本:Centos 7 64位

服務器角色

服務器IP

Nginx  Proxy1

192.168.8.14

Nginx  Proxy2

192.168.8.15

Nginx  Web1

192.168.8.16

Nginx  Web2

192.168.8.17

Tomcat1

192.168.8.18

Tomcat2

192.168.8.19

Tcpserver(ftp)1

192.168.8.20

Tcpserver(ftp)2

192.168.8.21

 

3.2  Nginx Proxy安裝配置

(192.168.8.14和192.168.8.15)兩臺服務器操作

3.2.1     nginx的yum源

vi /etc/yum.repos.d/nginx.repo

[nginx]

name=nginx  repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

 

3.2.2     yum安裝nginx

yuminstall nginx

 

3.2.3     配置nginx

vi/etc/nginx/nginx.conf

user  nginx;

worker_processes  4;

worker_cpu_affinity  0001 0010 0100 1000;

 

error_log  logs/error.log  notice;

 

events  {

    use epoll;

    worker_connections  1024;

}

 

 

http  {

    include       mime.types;

    default_type  application/octet-stream;

 

    log_format  main   '$http_x_forwarded_for - $remote_user [$time_local]  "$request" '

                      '$status  $body_bytes_sent "$http_referer" '

                       '"$http_user_agent" $remote_addr';

 

    #access_log  logs/access.log  main;

 

    sendfile                             on;

    tcp_nopush                           on;

    tcp_nodelay                          on;

 

    server_names_hash_bucket_size       128;

    large_client_header_buffers    4    128k;

    client_max_body_size               128m;

    client_header_buffer_size           32k;

    keepalive_timeout                   120;

 

    fastcgi_connect_timeout             300;

    fastcgi_send_timeout                300;

    fastcgi_read_timeout                300;

    fastcgi_buffer_size                128k;

    fastcgi_buffers                4   128k;

    fastcgi_busy_buffers_size          256k;

    fastcgi_temp_file_write_size       256k;

 

    gzip                                 on;

    gzip_vary                            on;

    gzip_min_length                      1k;

    gzip_buffers                   4     64k;

    gzip_http_version                   1.0;

    gzip_comp_level                       9;

    gzip_types              text/plain  application/x-javascript text/css text/javascript application/javascript  application/xml p_w_picpath/jpeg p_w_picpath/gif p_w_picpath/png;

 

    proxy_cache_path /etc/nginx/cache  levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;

 

    upstream testweb {

        server 192.168.8.16:80;

        server 192.168.8.17:80;

        }

 

    upstream testtomcat {

        server 192.168.8.18:8080;

        server 192.168.8.19:8080;

        }

 

    server {

        listen       80;

        server_name  testweb.com.cn;

 

        access_log  logs/testweb.access.log  main;

 

        location ~ .*\.(css|js|gif|jpg|png)$  {

                proxy_pass http://testweb;

                proxy_cache cache_one;

                proxy_cache_valid 200 301 302  5m;

                proxy_cache_valid any      1m;

                proxy_cache_key            $host$uri$is_args$args;

                expires 30d;

                }

 

        location / {

            proxy_pass http://testweb;

            proxy_redirect off;   

            proxy_set_header Host $host;   

            proxy_set_header X-Real-IP  $remote_addr;   

            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;   

            client_max_body_size 10m;   

            client_body_buffer_size  128k;   

            proxy_connect_timeout 300;   

            proxy_send_timeout 300;   

            proxy_read_timeout 300;   

            proxy_buffer_size 4k;   

            proxy_buffers 4 32k;   

            proxy_busy_buffers_size 64k;   

            proxy_temp_file_write_size  64k; 

        }

 

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

             root   html;

        }

    }

 

    server {

        listen       80;

        server_name  testtomcat.com.cn;

 

        access_log  logs/testtomcat.access.log  main;

 

        location / {

            proxy_pass http://testtomcat;

            proxy_redirect off;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP  $remote_addr;

            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size 10m;

            client_body_buffer_size 128k;

            proxy_connect_timeout 300;

            proxy_send_timeout 300;

            proxy_read_timeout 300;

            proxy_buffer_size 4k;

            proxy_buffers 4 32k;

            proxy_busy_buffers_size 64k;

            proxy_temp_file_write_size 64k;

        }

 

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

 

mkdir/etc/nginx/logs/

 

啟動nginx

/etc/init.d/nginxstart

 

3.3  Nginx Web安裝配置

(192.168.8.16和192.168.8.17)兩臺服務器操作

3.3.1     nginx的yum源

vi /etc/yum.repos.d/nginx.repo

[nginx]

name=nginx  repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

 

3.3.2     yum安裝nginx

yuminstall nginx

 

3.3.3     配置nginx

略,根據生產情況配置

在網站根目錄配置一個測試文件,如:

192.168.8.16服務器:

cattest.html

web16

 

192.168.8.17服務器:

web17

啟動nginx

/etc/init.d/nginxstart

3.4  tomcat 安裝配置

(192.168.8.18和192.168.8.19)兩臺服務器操作

3.4.1     安裝JAVA

yum install–y java-1.8.0-openjdk

3.4.2     下載tomcat

官網下載http://tomcat.apache.org/

 

3.4.3     安裝tomcat

tarzxvf apache-tomcat-8.5.20.tar.gz

mvapache-tomcat-8.5.20 /usr/local/

3.4.4     測試頁面

cd/usr/local/apache-tomcat-8.5.20/webapps/ROOT/

192.168.8.18服務器:

vitest.html

tomcat18

192.168.8.19服務器:

vitest.html

tomcat19

啟動tomcat

/usr/local/apache-tomcat-8.5.20/bin/startup.sh

 

3.5  ftp安裝配置

(192.168.8.20和192.168.8.21)兩臺服務器操作

3.5.1     安裝ftp

yuminstall vsftpd

3.5.2     配置ftp

vi/etc/vsftpd/vsftpd.conf

增加配置:

pasv_enable=YES

pasv_promiscuous=YES

port_enable=YES

port_promiscuous=NO

pasv_min_port=10001

pasv_max_port=10010     #如果用戶較多,可以放大

 

啟動ftp

/etc/init.d/vsftpdstart

 

4     haproxy安裝配置

4.1  實驗環境

系統版本:Centos 7 64位

服務器角色

服務器IP

Haproxy

192.168.8.12

Haproxy

192.168.8.13

(192.168.8.12和192.168.8.13)兩臺服務器操作

4.2  安裝haproxy

tarzxvf haproxy-1.7.7.tar.gz

makeTARGET=linux2628 PREFIX=/usr/local/haproxy

#”TARGET”指定編譯對應的os對應的內核版本,通過”uname -r”查詢內核版本呢,README文件可查詢對應關系。

makeinstall PREFIX=/usr/local/haproxy

 

groupaddhaproxy

useradd-g haproxy haproxy -s /sbin/nologin

 

4.3  配置haproxy

默認安裝目錄下沒有配置文件,只有”doc”,“sbin”,“share”三個目錄,可手工創建目錄及配置文件。

haproxy的配置文件主要是以下5部分:

global全局配置、defaults默認配置、監控頁面配置、frontend配置、backend配置。

mkdir-p /usr/local/haproxy/etc

cd/usr/local/haproxy/etc/

vimhaproxy.cfg

4.3.1     示例配置

global

    #定義全局日志, 配置在本地, 通過local0 輸出, 默認是info級別,可配置兩條

    log 127.0.0.1 local0 warning

    #定義日志級別【error warning info debug】

    #log 127.0.0.1 local1 info

     

    #運行路徑

    chroot /usr/local/haproxy

    #PID 文件存放路徑

    pidfile /var/run/haproxy.pid

     

    #設置每haproxy進程的最大并發連接數, 其等同于命令行選項“-n”; “ulimit -n”自動計算的結果參照此參數設定.

    maxconn 4096

     

    #運行haproxy 用戶, 或者使用關鍵字uid

    user haproxy

    #運行haproxy 用戶組, 或者使用關鍵字gid

    group haproxy

     

    #后臺運行haproxy

    daemon

  

    #設置啟動的haproxy進程數量, 只能用于守護進程模式的haproxy;

    #默認只啟動一個進程, 鑒于調試困難等多方面的原因, 一般只在單進程僅能打開少數文件描述符的場景中才使用多進程模式.

    nbproc 1

    #設置每進程所能夠打開的最大文件描述符數目, 默認情況其會自動進行計算, 因此不推薦修改此選項.

    #ulimit-n 819200

     

    #調試級別, 一般只在開啟單進程時調試, 且生產環境禁用.

    #debug

    #haproxy啟動后不會顯示任何相關信息, 這與在命令行啟動haproxy時加上參數“-q”相同

    #quiet

     

    #定義統計信息保存位置

    stats socket /usr/local/haproxy/stats

 

#默認配置

defaults

    #默認的模式【tcp:4層; http:7層;  health:只返回OK】

    mode http

     

    #繼承全局的日志定義輸出

    log global

     

    #日志類別, httplog

    #option httplog

  

    #如果后端服務器需要記錄客戶端真實ip, 需要在HTTP請求中添加”X-Forwarded-For”字段;

    #但haproxy自身的健康檢測機制訪問后端服務器時, 不應將記錄訪問日志,可用except來排除127.0.0.0,即haproxy本身.

    #option forwardfor except 127.0.0.0/8

    option forwardfor

  

    #開啟http協議中服務器端關閉功能, 每個請求完畢后主動關閉http通道, 使得支持長連接,使得會話可以被重用,使得每一個日志記錄都會被記錄.

    option httpclose

  

    #如果產生了一個空連接,那這個空連接的日志將不會記錄.

    option dontlognull

  

    #當與后端服務器的會話失敗(服務器故障或其他原因)時, 把會話重新分發到其他健康的服務器上; 當故障服務器恢復時, 會話又被定向到已恢復的服務器上;

    #還可以用”retries”關鍵字來設定在判定會話失敗時的嘗試連接的次數

    option redispatch

    retries 3

     

    #當haproxy負載很高時, 自動結束掉當前隊列處理比較久的鏈接.

    option abortonclose

  

    #默認http請求超時時間

    timeout http-request 10s

    #默認隊列超時時間, 后端服務器在高負載時, 會將haproxy發來的請求放進一個隊列中.

    timeout queue 1m

    #haproxy與后端服務器連接超時時間.

    timeout connect 5s

    #客戶端與haproxy連接后, 數據傳輸完畢,  不再有數據傳輸, 即非活動連接的超時時間.

    timeout client 1m

    #haproxy與后端服務器非活動連接的超時時間.

    timeout server 1m

    #默認新的http請求連接建立的超時時間,時間較短時可以盡快釋放出資源,節約資源.

    timeout http-keep-alive 10s

    #心跳檢測超時時間

    timeout check 10s

     

    #最大并發連接數

    maxconn 2000

     

    #設置默認的負載均衡方式

    #balance source

    #balnace leastconn

 

#統計頁面配置, frontend和backend的組合體, 監控組的名稱可按需自定義

listen  admin_status

    #配置監控運行模式

    mode http

     

    #配置統計頁面訪問端口

    bind 0.0.0.0:1080

     

    #統計頁面默認最大連接數

    maxconn 10

     

    #http日志格式

    option httplog

     

    #開啟統計

    stats enable

     

    #隱藏統計頁面上的haproxy版本信息

    stats hide-version

     

    #監控頁面自動刷新時間

    stats refresh 30s

     

    #統計頁面訪問url

    stats uri /stats

     

    #統計頁面密碼框提示文本

    stats realm mCloud\ Haproxy

     

    #監控頁面的用戶和密碼:admin, 可設置多個用戶名

    stats auth admin:admin

     

    #手工啟動/禁用后端服務器, 可通過web管理節點

    stats admin if TRUE

    #設置haproxy錯誤頁面

    errorfile 400  /usr/local/haproxy/errorfiles/400.http

    errorfile 403  /usr/local/haproxy/errorfiles/403.http

    errorfile 408  /usr/local/haproxy/errorfiles/408.http

    errorfile 500  /usr/local/haproxy/errorfiles/500.http

     errorfile 502 /usr/local/haproxy/errorfiles/502.http

    errorfile 503  /usr/local/haproxy/errorfiles/503.http

    errorfile 504  /usr/local/haproxy/errorfiles/504.http

 

#監控haproxy后端服務器的監控狀態

listen  site_status

       bind 0.0.0.0:1081 #監聽端口

       mode http #http的7層模式

       log 127.0.0.1 local2 err #[err warning  info debug]

       monitor-uri /site_status #網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回503

       acl site_dead nbsrv(php_server) lt 1 #定義網站down時的策略當掛在負載均衡上的指定backend的中有效機器數小于1臺時返回true

       acl site_dead nbsrv(html_server) lt 1

       acl site_dead nbsrv(backend_default)  lt 1

       monitor fail if site_dead #當滿足策略的時候返回503,網上文檔說的是500,實際測試為503

       monitor-net 192.168.4.171/32 #來自192.168.4.152的日志信息不會被記錄和轉發

       monitor-net 192.168.4.172/32

     

#frontend,  名字自定義

frontend  HAproxy_Cluster

    #定義前端監聽端口, 建議采用bind *:80的形式,否則做集群高可用的時候有問題,vip切換到其余機器就不能訪問.

    bind 0.0.0.0:80

 

    #acl后面是規則名稱,當請求的url末尾是以.php結尾時,匹配觸發php_web規則,以下兩種寫法均可.

 

    #當請求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif結尾時,匹配并觸發static_web規則.

    #acl static_web path_end .gif .png .jpg  .css .js .jpeg

    #acl static_web url_reg  /*.(css|jpg|png|jpeg|js|gif)$

    #-i為忽略大小寫,當被請求的是以www.test.com開頭的主機時,匹配并觸發dns_name規則.

    acl html_web hdr_beg(host) -i  www.haproxytest.com

    #acl html_web hdr_beg(host) 10.11.4.152

    #當客戶端的IP是x.x.x.x時,匹配并觸發src_ip規則.

    #acl src_ip src x.x.x.x

    #如果匹配acl規則php_web,將請求轉交到php_server組處理;如果匹配acl規則html_web,將請求轉交到html_server組處理.

    use_backend php_server if php_web

    use_backend html_server if html_web

    #如果以上規則都不匹配時,將請求轉交到default_backend組處理.

    default_backend backend_default

 

#backend后端配置, 配置php_server組與html_server組

backend  php_server

    #定義負載均衡方式為roundrobin方式, 即基于權重進行輪詢調度的算法, 在服務器性能分布較均勻情況下推薦.

    #另有如下幾種負載均衡方式:

    #-- static-rr: 也是基于權重進行輪轉調度, 但屬于靜態方法, 運行時調整后端機組權重不會使用新的權重;

    #-- source: 基于請求源IP進行hash運算匹配后端服務器組;

    #-- leastconn: 不適合會話較短的環境, 如基于http的應用;

    #-- uri: 對整個URI進行hash運算;

    #-- uri_param: 對URI中的參數進行轉發;

    #-- hdr(<name>):根據http頭進行轉發, 無該頭部則轉為使用roundrobin.

    balance roundrobin

    mode http

    #允許插入serverid到cookie中,serverid后面可定義

    cookie SERVERID

    #心跳檢測方式為檢測后端服務器index.html文件,還有其他方式

    option httpchk GET /index.html

    #后端服務器定義, maxconn 1024表示該服務器的最大連接數, cookie 1表示serverid為1, weight代表權重(默認1,最大為265,0則表示不參與負載均衡),

    #check inter 1500是檢測心跳頻率, rise 2是2次正確認為服務器可用, fall 3是3次失敗認為服務器不可用.

    server php1 192.168.4.171:80 maxconn 1024  cookie 1 weight 3 check inter 1500 rise 2 fall 3

 

backend  html_server

    balance source

    mode http

    server html1 192.168.4.172:80 maxconn  1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

 

backend  backend_default

    balance source

    mode http

    server default1 192.168.4.171:80 maxconn  1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

 

4.3.2     生產配置

global

    log 127.0.0.1 local0 warning

    chroot /usr/local/haproxy

    pidfile /var/run/haproxy.pid

    maxconn 4096

    user haproxy

    group haproxy

    daemon

    nbproc 1

    stats socket /usr/local/haproxy/stats

 

defaults

    mode http

    log global

    option forwardfor except 127.0.0.0/8

    option httpclose

    option dontlognull

    option redispatch

    retries 3

    option abortonclose

    timeout http-request 10s

    timeout queue 1m

    timeout connect 5s

    #timeout client 1m

    #timeout server 1m

    timeout http-keep-alive 10s

    timeout check 10s

    maxconn 200000

     

 

listen  admin_status

    mode http

    bind 0.0.0.0:1080

    maxconn 10

    option httplog

    stats enable

    stats hide-version

    stats refresh 30s

    stats uri /stats

    stats realm mCloud\ Haproxy

    stats auth admin:123456

    stats admin if TRUE

    errorfile 400  /usr/local/haproxy/errorfiles/400.http

    errorfile 403  /usr/local/haproxy/errorfiles/403.http

    errorfile 408  /usr/local/haproxy/errorfiles/408.http

    errorfile 500 /usr/local/haproxy/errorfiles/500.http

    errorfile 502  /usr/local/haproxy/errorfiles/502.http

    errorfile 503  /usr/local/haproxy/errorfiles/503.http

    errorfile 504  /usr/local/haproxy/errorfiles/504.http

 

listen  site_status

       bind 0.0.0.0:1081

       mode http

       log 127.0.0.1 local2 err

       monitor-uri /site_status

       acl site_dead nbsrv(nginx_proxy1) lt 1

       monitor fail if site_dead

monitor-net 192.168.8.14/32

       monitor-net 192.168.8.15/32

       monitor-net 192.168.8.20/32

       monitor-net 192.168.8.21/32

frontend  nginx_cluster

       mode http

       bind 0.0.0.0:80

       acl nginx_1 hdr_beg(host) -i  testweb.com.cn

       acl nginx_2 hdr_beg(host) -i  testtomcat.com.cn

       use_backend nginx_proxy1 if nginx_1

       use_backend nginx_proxy1 if nginx_2

backend  nginx_proxy1

       mode http

       balance roundrobin

       server nginx1 192.168.8.14:80 maxconn  10240 cookie 1 weight 3 check inter 1500 rise 2 fall 3

       server nginx2 192.168.8.15:80 maxconn  10240 cookie 2 weight 3 check inter 1500 rise 2 fall 3

listen  ftp_service

      bind 0.0.0.0:21

      bind 0.0.0.0:10001-10010

      mode tcp

      option tcplog

      balance   roundrobin

      server     ftp_20 192.168.8.20 weight 2 check port 21 inter 10s rise 1 fall 2

      server     ftp_21 192.168.8.21 weight 2 check port 21 inter 10s rise 1 fall 2

error文件

cp -r/usr/local/src/haproxy-1.7.7/examples/errorfiles/ /usr/local/haproxy/

 

日志文件

mkdir-p /usr/local/haproxy/log

touch/usr/local/haproxy/log/haproxy.log

ln -s/usr/local/haproxy/log/haproxy.log /var/log/

chownhaproxy:haproxy /var/log/haproxy.log

 

vim/etc/sysconfig/rsyslog

SYSLOGD_OPTIONS="-c2 -r -m 0"

 

cd/etc/rsyslog.d/

touchhaproxy.conf

chownhaproxy:haproxy haproxy.conf

vimhaproxy.conf

#  Provides UDP syslog reception

$ModLoad  imudp

$UDPServerRun  514

#  haproxy.log

#

local0.*  /usr/local/haproxy/log/haproxy.log

#local1.*  /usr/local/haproxy/log/haproxy.log

local2.*  /usr/local/haproxy/log/haproxy.log

&~

 

systemctlrestart rsyslog.service

#haproxy默認沒有日志,依靠rsyslog收集日志;

#文件最末尾的“&~”,如果沒有此配置,日志除寫入指定文件外,會同步寫入messages文件;

 

chown-R haproxy:haproxy /usr/local/haproxy/

mkdir-p /etc/haproxy

ln -s/usr/local/haproxy/etc/haproxy.cfg /etc/haproxy/

chown-R haproxy:haproxy /etc/haproxy

 

cp/usr/local/src/haproxy-1.7.7/examples/haproxy.init /etc/rc.d/init.d/haproxy

chownhaproxy:haproxy /etc/rc.d/init.d/haproxy

#/etc/rc.d/init.d/haproxy會有一個報錯:

/etc/init.d/haproxy:line 26: [: =: unary operator expected

修改haproxy

vihaproxy

26行:

[[${NETWORKING} = "no" ]] && exit 0

 

chmod+x /etc/rc.d/init.d/haproxy

 

ln -s/usr/local/haproxy/sbin/haproxy /usr/sbin/

chownhaproxy:haproxy /usr/sbin/haproxy

 

啟動haproxy

/etc/init.d/haproxystart

 

5     keepalived安裝配置

5.1  實驗環境

服務器角色

服務器IP

VIP1

192.168.8.100

LVS1

192.168.8.10

LVS2

192.168.8.11

(192.168.8.10和192.168.8.11)兩臺服務器操作

5.2  安裝keepalived

yum install -y keepalived ipvsadm

5.3  配置keepalived

5.3.1     示例配置

vim/etc/keepalived/keepalived.conf

!  Configuration File for keepalived

 

global_defs  {

   notification_email {

     acassen@firewall.loc     #設置報警郵件地址,可以設置多個,每行一個。

     failover@firewall.loc      #需開啟本機的sendmail服務

     sysadmin@firewall.loc

   }

   notification_email_from  Alexandre.Cassen@firewall.loc  #設置郵件的發送地址

   smtp_server 127.0.0.1        #設置smtp server地址

   smtp_connect_timeout 30    #設置連接smtp server的超時時間

   router_id LVS_DEVEL        #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息

}

 

vrrp_instance  VI_1 {

state BACKUP              #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器,但主掛了之后,再恢復會導致搶資源現象。所以這邊都設置BACKUP,為了防止搶資源。

    interface eth0           #指定HA監測網絡的接口

    virtual_router_id 51      #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的

    priority 100              #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大于BACKUP的優先級

advert_int 1              #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

nopreempt                        #不搶占資源,意思就是它活了之后也不會再把主搶回來

    authentication {          #設置驗證類型和密碼

        auth_type PASS        #設置驗證類型,主要有PASS和AH兩種

        auth_pass 1111        #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信

    }

    virtual_ipaddress {       #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個

        192.168.8.97

    }

}

 

virtual_server  192.168.8.97 3306 {  #設置虛擬服務器,需要指定虛擬IP地址和服務端口,IP與端口之間用空格隔開

    delay_loop 6              #設置運行情況檢查時間,單位是秒

    lb_algo rr                #設置負載調度算法,這里設置為rr,即輪詢算法

    lb_kind DR                #設置LVS實現負載均衡的機制,有NAT、TUN、DR三個模式可選

    nat_mask 255.255.255.0

    persistence_timeout 50    #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,為集群系統中的session共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。需要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操作動態頁面時,如果50秒內沒有執行任何操作那么接下來的操作會被分發到另外的節點,但是如果用戶一直在操作動態頁面,則不受50秒的時間限制

    protocol TCP              #指定轉發協議類型,有TCP和UDP兩種

 

    real_server 192.168.8.90 3306 { #配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開

        weight 1              #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小可以為不同性能的服務器。分配不同的負載,可以為性能高的服務器設置較高的權值,而為性能較低的服務器設置相對較低的權值,這樣才能合理地利用和分配系統資源

        TCP_CHECK {           #realserver的狀態檢測設置部分,單位是秒

            connect_timeout 3    #表示3秒無響應超時

            nb_get_retry 3        #表示重試次數

            delay_before_retry 3  #表示重試間隔

            connect_port 3306   #健康檢查端口

        }

    }

    real_server 192.168.8.91 3306 {  #配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開

        weight 1                 #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小可以為不同性能的服務器。分配不同的負載,可以為性能高的服務器設置較高的權值,而為性能較低的服務器設置相對較低的權值,這樣才能合理地利用和分配系統資源

        TCP_CHECK {             #realserver的狀態檢測設置部分,單位是秒

            connect_timeout 3    #連接超時時間

            nb_get_retry 3        #重連次數

            delay_before_retry 3  #表示重試間隔

            connect_port 3306    #健康檢查端口

        }

    }

}

 

5.3.2     生產配置

LVS-DR-Master上,其配置如下(192.168.8.10操作):

!  Configuration File for keepalived

 

global_defs  {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from  Alexandre.Cassen@firewall.loc

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance  VI_1 {

    state BACKUP

    interface ens160

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

    virtual_ipaddress {

        192.168.8.100

    }

}

 

virtual_server  192.168.8.100 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.8.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

 

    real_server 192.168.8.13 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

 

virtual_server  192.168.8.100 21 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.8.12 21 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 21

        }

    }

 

    real_server 192.168.8.13 21 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 21

        }

    }

}

 

LVS-DR-Backup上,其配置如下(192.168.8.11操作):

!  Configuration File for keepalived

 

global_defs  {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from  Alexandre.Cassen@firewall.loc

    smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance  VI_1 {

    state BACKUP

    interface ens160

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

}

     virtual_ipaddress {

        192.168.8.100

    }

}

 

virtual_server  192.168.8.100 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.8.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

 

    real_server 192.168.8.13 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

 

virtual_server  192.168.8.100 21 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.8.12 21 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 21

        }

    }

 

    real_server 192.168.8.13 21 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 21

        }

    }

}

 

5.4  虛擬IP腳本

haproxy服務器(192.168.8.12和192.168.8.13)操作

chmod+x /etc/rc.d/init.d/functions

vi/usr/local/bin/realserver.sh

#!/bin/bash

#description:  Config realserver

 

VIP=192.168.8.100

 

/etc/rc.d/init.d/functions

 

case  "$1" in

start)

       /sbin/ifconfig lo:0 $VIP netmask  255.255.255.255 broadcast $VIP

       /sbin/route add -host $VIP dev lo:0

       echo "1"  >/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "2"  >/proc/sys/net/ipv4/conf/lo/arp_announce

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

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

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"

       ;;

stop)

       /sbin/ifconfig lo:0 down

       /sbin/route del $VIP >/dev/null  2>&1

       echo "0"  >/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "0"  >/proc/sys/net/ipv4/conf/lo/arp_announce

       echo "0"  >/proc/sys/net/ipv4/conf/all/arp_ignore

       echo "0"  >/proc/sys/net/ipv4/conf/all/arp_announce

       echo "RealServer Stoped"

       ;;

*)

       echo "Usage: $0 {start|stop}"

       exit 1

esac

 

exit  0

啟動腳本

/usr/local/bin/realserver.shstart

 

5.5  啟動keepalived

LVS-DR-Master(192.168.8.12)和LVS-DR-Backup(192.168.8.13)分別操作:

/etc/init.d/keepalivedstart

通過ipvsadm -L命令查看VIP是否能成功映射到后端服務。如果失敗了,可通過/var/log/messages日志定位keepalived啟動失敗的原因。

IPVirtual Server version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  test1:ftp rr persistent 50

  -> 192.168.8.12:ftp            Route   1     0          0        

  -> 192.168.8.13:ftp            Route  1      0          0        

TCP  test1:http rr persistent 50

  -> 192.168.8.12:http           Route   1     0          0        

  -> 192.168.8.13:http           Route   1     0          0 


如果大家還有什么地方需要了解的可以在億速云官網找我們的專業技術工程師的,億速云技術工程師在行業內擁有十幾年的經驗了,所以會比小編回答的更加詳細專業。億速云官網鏈接www.mlszssj.com


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平武县| 奈曼旗| 大理市| 伊金霍洛旗| 台州市| 海阳市| 化隆| 东源县| 京山县| 成安县| 晴隆县| 梁山县| 尉犁县| 静乐县| 浏阳市| 洪雅县| 临夏县| 垣曲县| 沛县| 莱阳市| 鱼台县| 弥渡县| 和政县| 白水县| 玛纳斯县| 宁化县| 灌云县| 霸州市| 合作市| 普宁市| 苏尼特左旗| 九江县| 阿荣旗| 台北市| 邓州市| 页游| 城口县| 洮南市| 温宿县| 麻城市| 澄江县|