中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

haproxy+keepalived實現(xiàn)web集群的高可用性-創(chuàng)新互聯(lián)

haproxy+keepalived實現(xiàn)web集群高可用性

10年積累的成都網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有重慶免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

負(fù)載均衡集群的概念

負(fù)載均衡是設(shè)計分布式系統(tǒng)架構(gòu)必須要考慮的因素之一,它指的是通過調(diào)度分發(fā)的方式盡可能將“請求”、“訪問”的壓力負(fù)載平均分?jǐn)偟郊褐械母鱾€節(jié)點,避免有些節(jié)點負(fù)載太高導(dǎo)致訪問延遲,而有些節(jié)點負(fù)載很小導(dǎo)致資源浪費。這樣,每個節(jié)點都可以承擔(dān)一定的訪問請求負(fù)載壓力,并且可以實現(xiàn)訪問請求在各節(jié)點之間的動態(tài)分配,以實現(xiàn)負(fù)載均衡,從而為企業(yè)提供更高性能,更加穩(wěn)定的系統(tǒng)架構(gòu)解決方案。

高可用集群的概念

高可用是指以減少服務(wù)中斷時間或者避免服務(wù)中斷為目標(biāo)的技術(shù),它也是分布式系統(tǒng)架構(gòu)中必須要考慮的因素之一。集群中節(jié)點之間進(jìn)行心跳檢查,可以實現(xiàn)對整個集群中的節(jié)點健康狀態(tài)的檢測,如果某個節(jié)點失效,它的備節(jié)點將在幾秒鐘的時間內(nèi)接管它的工作。因此對于用戶而言,服務(wù)總是可以訪問的。

haproxy是什么?

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負(fù)載均衡,以及基于TCP和HTTP的應(yīng)用程序代理。HAProxy特別適用于那些負(fù)載特大的web站點(其實也適合數(shù)據(jù)庫的負(fù)載均衡),這些站點通常又需要會話保持或七層處理。HAProxy運行在當(dāng)前的硬件上,完全可以支持?jǐn)?shù)以萬計的并發(fā)連接。并且它的運行模式使得它可以很簡單安全的整合進(jìn)您當(dāng)前的架構(gòu)中, 同時可以保護(hù)你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上。

包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在內(nèi)的知名網(wǎng)站,及亞馬遜網(wǎng)絡(luò)服務(wù)系統(tǒng)都使用了HAProxy。

keepalived又是什么?

keepalived是一款輕量級的高可用軟件,它只能實現(xiàn)對IP資源的高可用。主要通過虛擬路由冗余協(xié)議(VRRP)實現(xiàn)高可用的功能。在非雙主keepalived集群中,會依靠優(yōu)先級選舉出一個主節(jié)點,IP資源會優(yōu)先綁定到主節(jié)點,其他節(jié)點成為備節(jié)點,主節(jié)點與備節(jié)點之間會通過檢查心跳線來檢測對方的存活,一旦主節(jié)點宕機(jī),備用節(jié)點就搶占IP資源,當(dāng)主節(jié)點恢復(fù)正常,備節(jié)點又會釋放IP資源給主節(jié)點。

下面通過一個簡單的實驗,來看看如何實現(xiàn)通過haproxy+keepalived實現(xiàn)web集群的高可用和負(fù)載均衡

環(huán)境設(shè)置

主機(jī)名
角色
IP
web1
real server-1
192.168.83.129/24
web2
real server-2
192.168.83.130/24
haproxy1
代理服務(wù)器-1
192.168.83.131/24
haproxy2
代理服務(wù)器-2
192.168.83.131/24
銀河
客戶端
192.168.43.159/24

//所有的服務(wù)器都要同步時間,集群的時間是很敏感的,在生產(chǎn)環(huán)境中建議用公司內(nèi)部的ntp服務(wù)器,用外部的ntp服務(wù)器隨著運行時間的增加,會逐漸出現(xiàn)時間偏移,一旦偏移量過大,集群便會出現(xiàn)非常嚴(yán)重的問題

 ntpdate time.nist.gov

 crontab -l

 */10 * * * * ntpdate time.nist.gov

在兩臺主機(jī)上部署apache作為real server

web1

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf   #出于安全性考慮,把默認(rèn)端口改成8080
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd
[root@web1 ~]# echo "web1" > /var//www/html/index.html

[root@web1 ~]# curl http://192.168.83.129:8080
web1

web2

[root@web2 ~]# yum -y install httpd

[root@web2 ~]# sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf   #出于安全性考慮,把默認(rèn)端口改成8080[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd

[root@web2 ~]# echo "web2" > /var/www/html/index.html
[root@web2 ~]# curl http://192.168.83.130:8080
web2

設(shè)置代理服務(wù)器1

[root@haproxy1 ~]# yum -y install haproxy       #安裝haproxy
[root@haproxy1 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak`date +%F-%T`     #在實際工作中,修改文件一定要謹(jǐn)慎,最好事先做一個備份
[root@haproxy1 haproxy]# cat haproxy.cfg.bak2017-05-28-01\:16\:53 |egrep -v "(#|^$)" > haproxy.cfg       #過濾注釋和空行

[root@haproxy1 ~]# cat /etc/haproxy/haproxy.cfg      #把配置文件修改如下

global      #全局配置
   log        127.0.0.1 local3 info #把發(fā)送到日志設(shè)備local3的info級別的日志記錄在本地
   chroot     /var/lib/haproxy     #綁定haproxy的工作路徑
   pidfile    /var/run/haproxy.pid     #pid文件路徑
   maxconn    4000           #大連接數(shù)
   user       haproxy          #運行進(jìn)程的用戶
   group      haproxy        #運行進(jìn)程的用戶組
   daemon                          #以后臺方式運行
   stats socket /var/lib/haproxy/stats   #haproxy動態(tài)維護(hù)的套接字文件,下面會通過一個小實驗看這個玩意的作用
defaults     #除非有具體定義,否則default選項會加入到后面 選項,不適用的就不會被定義
   mode                   http     #默認(rèn)的模式
   log                    global     #引用全局的日志配置
   option                 httplog   #啟用日志記錄http請求,haproxy默認(rèn)不記錄http請求日志
   option                 dontlognull    #日志中不記錄健康檢查的連接
   option http-server-close    #對于某些server端不支持http長連接的情況,利用這個參數(shù)可以使用客戶端到haproxy是長連接,而haproxy到server端是短連接

    option forwardfor      except 127.0.0.0/8   #允許服務(wù)器記錄發(fā)起請求的真實客戶端的IP地址

  option        redispatch   #當(dāng)client從web服務(wù)器每獲取一個資源的時候都需要建立一次tcp連接,為了保持會話的持久性在一定時間之內(nèi)讓tcp連接保持持久性,當(dāng)再次訪問相同的資源的時候就不再需要建立tcp連接,tcp的持久性依賴cookie,當(dāng)你的一個realserver down了之后,會把訪問過的http的緩存重定向到另外一個real server

   retries        3    #連接真實服務(wù)器的失敗重連次數(shù),超過這個值后會將對應(yīng)正式服務(wù)器標(biāo)記為不可用
   timeout http-request   10s  #http請求超時時間
   timeout queue          1m      #請求在隊列中的超時時間
   timeout connect        10s      #連接超時
   timeout client         1m         #客戶端連接超時
   timeout server         1m         #服務(wù)端連接超時
   timeout http-keep-alive 10s  #http-keep-alive超時時間
   timeout check          10s        #檢測超時時間
   maxconn                3000        #每個進(jìn)程大的連接數(shù)
frontend www     #定義前端
   bind *:80            #綁定客戶端訪問的是哪個IP的80端口
   mode http         #指定模式為http
   option httplog    #記錄http請求的日志
   log global           #應(yīng)用全局的日志配置
   stats uri /haproxy?stats   #haproxy自帶的監(jiān)控頁面
   default_backend            web   #指定默認(rèn)的后端
backend web      #定義后端
   mode http      #模式為http
   option redispatch
   balance roundrobin   #負(fù)載均衡算法指定為輪詢
   option httpchk GET /index.html     #檢測后端真實服務(wù)器的方法
server web1 192.168.83.129:8080 cookie web1 weight 1 check inter 2000 rise 2 fall 3
server web2 192.168.83.130:8080 cookie web2 weight 1 check inter 2000 rise 2 fall 3

#定義的真實服務(wù)器,權(quán)重為1,健康檢測時間間隔為2秒,重試2次,失敗3次標(biāo)記為不可用

[root@haproxy1 ~]# haproxy -c -f /etc/haproxy/haproxy.cfg   #檢查配置文件是否正確
Configuration file is valid

開啟遠(yuǎn)程記錄日志的功能

[root@haproxy1 ~]# cat -n /etc/rsyslog.conf
   15 $ModLoad imudp        #刪除注釋
   16 $UDPServerRun 514    #刪除注釋
   73 local7.*                                          /var/log/boot.log     #在這一行下面添加下面的內(nèi)容
   74 local3.*                                         /var/log/haproxy.log #把發(fā)送到local3日志設(shè)備的日志記錄在/var/log/haproxy.log

[root@haproxy1 ~]# systemctl restart rsyslog

[root@haproxy1 ~]# systemctl start haproxy
[root@haproxy1 ~]# systemctl enable haproxy

驗證

haproxy+keepalived實現(xiàn)web集群的高可用性

haproxy+keepalived實現(xiàn)web集群的高可用性

瀏覽器輸入:http://192.168.83.131/haproxy?stats訪問haproxy的監(jiān)控頁面

haproxy+keepalived實現(xiàn)web集群的高可用性

測試一下配置文件中設(shè)置的真實服務(wù)器監(jiān)控狀態(tài)檢測的功能( option httpchk GET /index.html  )

[root@haproxy1 haproxy]# sed -i 's/index\.html/test.html/g' haproxy.cfg  #把檢測頁面更改為test.index

[root@haproxy1 haproxy]# systemctl reload haproxy   #重載haproxy,生產(chǎn)中不建議重啟haprox,因為這會斷開所有現(xiàn)有的連接
Message from syslogd@localhost at May 29 10:30:23 ...
 haproxy[3305]: backend web has no server available!  #馬上提示后端服務(wù)器不可用

在監(jiān)控頁面可以看到后端的真實服務(wù)器宕機(jī)haproxy+keepalived實現(xiàn)web集群的高可用性

配置文件里面有一行是關(guān)于動態(tài)維護(hù)haproxy的,那么動態(tài)維護(hù)haproxy是什么回事呢,舉一個小示例如下:
[root@haproxy1 ~]# yum -y install socat

[root@haproxy1 ~]# echo "show info"|socat stdio /var/lib/haproxy/stats  #查看info的信息,里面的內(nèi)容可以用于監(jiān)控haproxy的狀態(tài)
Name: HAProxy
Version: 1.5.14
Release_date: 2015/07/02
Nbproc: 1
Process_num: 1
Pid: 3390
Uptime: 0d 0h24m43s
Uptime_sec: 883
Memmax_MB: 0
Ulimit-n: 8033
Maxsock: 8033
Maxconn: 4000
Hard_maxconn: 4000
CurrConns: 0
CumConns: 19
CumReq: 37
MaxSslConns: 0
CurrSslConns: 0
CumSslConns: 0
Maxpipes: 0
PipesUsed: 0
PipesFree: 0
ConnRate: 0
ConnRateLimit: 0
MaxConnRate: 2
Se***ate: 0
Se***ateLimit: 0
MaxSe***ate: 2
SslRate: 0
SslRateLimit: 0
MaxSslRate: 0
SslFrontendKeyRate: 0
SslFrontendMaxKeyRate: 0
SslFrontendSessionReuse_pct: 0
SslBackendKeyRate: 0
SslBackendMaxKeyRate: 0
SslCacheLookups: 0
SslCacheMisses: 0
CompressBpsIn: 0
CompressBpsOut: 0
CompressBpsRateLim: 0
ZlibMemUsage: 0
MaxZlibMemUsage: 0
Tasks: 8
Run_queue: 1
Idle_pct: 100
node: haproxy1
description:

動態(tài)維護(hù)haproxy的功能還有很多,比如關(guān)閉重啟后端的真實服務(wù)器等等。

根據(jù)acl進(jìn)行訪問內(nèi)容的重定向

haproxy有一個很實用的功能,可以根據(jù)acl進(jìn)行訪問內(nèi)容的重定向,把配置文件中關(guān)于前端后端的配置更改如下:

frontend www
   bind *:80
   mode http
   option httplog
   log global
   stats uri /haproxy?stats
   acl web1 hdr_reg(host) -i www.web1.com  #web1,acl的名字;hdr_reg(host),固定格式,用來識別host
   acl web2 hdr_reg(host) -i www.web2.com
   use_backend www1 if web1      #use_backend指定使用哪個后端,if用來識別acl

   use_backend www2 if web2
backend www1
   mode http
   option redispatch
   balance roundrobin
   option httpchk GET /index.html
   server web1 192.168.83.129:8080 cookie web1 weight 1 check inter 2000 rise 2 fall 3
backend www2
   mode http
   option redispatch
   balance roundrobin
   option httpchk GET /index.html
   server web2 192.168.83.130:8080 cookie web2 weight 1 check inter 2000 rise 2 fall 3

不知道為什么我的手提電腦用谷歌火狐IE一直提示連接超時,域名解析我也配置了,就用代理1來驗證

haproxy+keepalived實現(xiàn)web集群的高可用性

除了根據(jù)域名,還可以根據(jù)文件的后綴名實現(xiàn)訪問內(nèi)容重定向

frontend www
   bind *:80
   mode http
   option httplog
   option forwardfor
   log global
   stats uri /haproxy?stats
   acl is_static_reg url_reg /*.(css|jpg|png|js)$
   use_backend static_web if is_static_reg
   default_backend web
backend web
   mode http
   option redispatch
   balance roundrobin
   option httpchk GET /index.html
   server web1 192.168.83.129:8080 cookie web1 weight 1 check inter 2000 rise 2 fall 3
   server web2 192.168.83.130:8080 cookie web2 weight 1 check inter 2000 rise 2 fall 3
backend static_web
   mode http
   option redispatch
   balance roundrobin
   option httpchk GET /index.html
   server web2 192.168.83.130:8080 cookie web2 weight 1 check inter 2000 rise 2 fall 3

[root@web2 html]# echo test_static > index.jpg

驗證

haproxy+keepalived實現(xiàn)web集群的高可用性

haproxy+keepalived

為了防止單點故障還有單臺的haproxy無法承受大并發(fā)量,生產(chǎn)環(huán)境中一般會有兩臺或者以上的haproxy服務(wù)器做代理。

準(zhǔn)備另外一臺代理機(jī)haproxy2,配置和代理1大同小異

[root@haproxy2 ~]# yum -y install haproxy

[root@haproxy1 ~]# scp /etc/haproxy/haproxy.cfg haproxy2:/etc/haproxy/ #把haproxy1上的配置文件copy到haproxy2
[root@haproxy1 ~]# scp /etc/rsyslog.conf haproxy2:/etc/  ##把haproxy1上的配置文件copy到haproxy2

[root@haproxy2 ~]# systemctl enable haproxy
[root@haproxy2 ~]# systemctl restart haproxy
[root@haproxy2 ~]# systemctl restart rsyslog

驗證haproxy2功能正常

haproxy+keepalived實現(xiàn)web集群的高可用性

haproxy+keepalived實現(xiàn)web集群的高可用性

在haproxy1上配置keepalived

[root@haproxy1 ~]# yum -y install keepalived  #下載keepalived

[root@haproxy1 ~]# tail -2 /etc/sysconfig/keepalived  #設(shè)置keepalived的日志發(fā)送到日志設(shè)備6
KEEPALIVED_OPTIONS="-D -S 6"

修改配置文件如下

[root@haproxy1 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
  notification_email {
  root@localhost   #告警郵件接收地址
  }
  notification_email_from keepalived@localhost  #應(yīng)該是郵件的標(biāo)題
  smtp_server 127.0.0.1    #smtp服務(wù)器地址
  smtp_connect_timeout 30  #連接smtp服務(wù)器超時時間
  router_id haproxy1    #每一個keepalived節(jié)點的router_id都是唯一的,不可以重復(fù)
vrrp_script haproxy{            #vrrp_script是為了防止keepalived節(jié)點宕機(jī)之后vip不會發(fā)生轉(zhuǎn)移,
  script "kiall -0 haproxy    用來檢查keepalived服務(wù)的狀態(tài)的模塊,這個模塊只關(guān)注腳本的返回值是0
  weight -25                 還是1,如果返回為1即時檢查失敗,把次節(jié)點的keepalived優(yōu)先級減去25
  }
}

vrrp_instance ha1 {
   state MASTER    #角色為MASTER
   interface eno16777736  #指定haproxy檢查網(wǎng)絡(luò)的接口
   virtual_router_id 51  #虛擬路由的ID,在所有的keepalived節(jié)點必須保持一致
   priority 100     #優(yōu)先級
   advert_int 1    #心跳檢查的時間間隔
   authentication {
       auth_type PASS   #指定keepalived節(jié)點之間的驗證方式為密碼驗證
       auth_pass linux    #keepalived節(jié)點的認(rèn)證密碼
   }
   virtual_ipaddress {
       192.168.83.111/24 dev eno16777736   #vip地址
   }
track_script{
            haproxy   #調(diào)用haproxy檢查腳本
           }
}

在haproxy2上配置keepalived

[root@haproxy1 ~]# scp /etc/keepalived/keepalived.conf ;scp /etc/rsyslog.conf;scp /etc/sysconfig/keepalived  #把代理機(jī)1的配置文件傳輸?shù)?

[root@haproxy2 ~]# cat /etc/keepalived/keepalived.conf  #修改字段
  router_id haproxy2  #修改虛擬路由的ID
   state BACKUP  #修改角色
  priority 80    #修改優(yōu)先級

重啟haproxy1、2的服務(wù)

[root@haproxy1 ~]# systemctl restart keepalived
[root@haproxy1 ~]# systemctl restart haproxy
[root@haproxy1 ~]# systemctl restart rsyslog
[root@haproxy2 ~]# systemctl restart keepalived
[root@haproxy2 ~]# systemctl restart haproxy
[root@haproxy2 ~]# systemctl restart rsyslog

驗證

[root@haproxy1 ~]# ip a |grep 111     #主節(jié)點haproxy1生成vip

   inet 192.168.83.111/24 scope global secondary eno16777736
[root@haproxy2 ~]# ip a |grep 111    #而備節(jié)點還有vip

訪問真實服務(wù)器

[root@haproxy1 ~]# curl http://192.168.83.111
web1
[root@haproxy1 ~]# curl http://192.168.83.111
web2

[root@haproxy1 ~]# systemctl stop keepalived  #模擬代理1宕機(jī),停服務(wù)模擬也OK,只要到1的心跳檢查不通過,2就會認(rèn)為1宕機(jī),從而搶占vip

[root@haproxy2 ~]# ip a |grep 111   #vip漂移到2
   inet 192.168.83.111/24 scope global secondary eno16777736

真實服務(wù)器依然可以訪問

haproxy+keepalived實現(xiàn)web集群的高可用性haproxy+keepalived實現(xiàn)web集群的高可用性

這就是通過haproxy+keepalived方式實現(xiàn)web集群高可用的簡單實驗,在工作中其實還有許許多多的配置,我暫時不是很明白,等我明白的差不多也會發(fā)上來和大家討論,暫時就先不發(fā)上來誤人子弟了,哈哈哈哈哈哈哈哈!

如有紕漏,歡迎指正。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:haproxy+keepalived實現(xiàn)web集群的高可用性-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.rwnh.cn/article24/dgsjje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站企業(yè)建站、全網(wǎng)營銷推廣定制網(wǎng)站、服務(wù)器托管手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
新河县| 南部县| 河东区| 玉门市| 垣曲县| 瓦房店市| 遵化市| 湘西| 黄浦区| 阿勒泰市| 阜平县| 盐亭县| 阜新市| 佛坪县| 临西县| 喀喇| 陆河县| 翁源县| 东方市| 额敏县| 中超| 郑州市| 五莲县| 资中县| 阿拉善右旗| 林口县| 泰安市| 虞城县| 通山县| 无锡市| 内丘县| 米林县| 右玉县| 鄂托克旗| 鹤壁市| 都昌县| 宁晋县| 分宜县| 镇平县| 新沂市| 姚安县|