1. 程式人生 > >pacemaker + corosync 實現 haproxy 的高可用負載均衡

pacemaker + corosync 實現 haproxy 的高可用負載均衡

1. HAProxy簡介

  • HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy執行在時下的硬體上,完全可以支援數以萬計的 併發連線。並且它的執行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。
  • HAProxy 實現了一種事件驅動、單一程序模型,此模型支援非常大的併發連線數。多程序或多執行緒模型受記憶體限制 、系統排程器限制以及無處不在的鎖限制,很少能處理數千併發連線。事件驅動模型因為在有更好的資源和時間管理的使用者端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充套件性較差。這就是為什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
  • HAProxy 支援連線拒絕 : 因為維護一個連線的開啟的開銷是很低的,有時我們很需要限制攻擊蠕蟲(attack bots),也就是說限制它們的連線開啟從而限制它們的危害。 這個已經為一個陷於小型DDoS攻擊的網站開發了而且已經拯救了很多站點,這個優點也是其它負載均衡器沒有的。

2. haproxy 配置

拓撲:
haproxy 伺服器 server2ip:172.25.21.2,server3:172.25.21.4
httpd 伺服器 Server7,server13

1. 進行haprox 的安裝

換取haproxy 原始碼包,並進行安裝

  • 將原碼包編譯成rpm包
    原碼包中需要包含 .spec 檔案,其中寫入了原碼編譯成rpm包的規則
    find -name *.spec 通過此命令來查詢是否存在
    然後將原碼包編譯成 rpm 包
 [root@server3 haproxy-1.6.11]# rpmbuild -tb haproxy-1.6.11.tar.gz 

可看到rpm 包被建立的為位置
然後執行 rpm -ivh 加安裝包 進行安裝
這裡寫圖片描述
可在其啟動指令碼中檢視配置檔案,然後在原碼包中獲取
進入原碼包獲取配置檔案
啟動指令碼
這裡寫圖片描述
原始碼包,配置檔案模版
這裡寫圖片描述
/mnt/haproxy-1.6.11/examples

2. 配置haproxy

生成haproxy配置檔案

 [[email protected] examples]# cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg 
[[email protected] ~]vim /etc/haproxy/haproxy.cfg 對配置檔案進行編輯 內容如下: global maxconn 10000 # 最大連線數 stats socket /var/run/haproxy.stat mode 600 level admin log 127.0.0.1 local0 uid 200 # 使用者ID 如果沒有,需要手動新增使用者 gid 200 chroot /var/empty # 監牢,保護機制,讓訪問的使用者在此目錄內,無法對其他目錄進行操作 daemon defaults # 定義預設配置 mode http # 負載均衡軟體,7層協議 log global option httplog option dontlognull monitor-uri /monitoruri # 本機狀態的健康檢查 maxconn 8000 # 最大連機數,會覆蓋gloab 中的設定 timeout client 30s stats uri /admin/stats uri 狀態,全域性狀態,包含本機與後端服務 option prefer-last-server retries 2 option redispatch timeout connect 5s timeout server 5s # The public 'www' address in the DMZ frontend public # 前端配置 bind *:80 name clear # 監聽本機所有IP #bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem #use_backend static if { hdr_beg(host) -i img } #use_backend static if { path_beg /img /css } default_backend static # 預設後端的名稱 # The static backend backend for 'Host: img', /img and /css. backend static # 後端 mode http # http 協議 balance roundrobin # 演算法rr server statsrv1 172.25.21.7:80 check inter 1000 # 後端伺服器 server statsrv2 172.25.21.13:80 check inter 1000

編輯完成,重啟服務:

 [root@server2 ~]# /etc/init.d/haproxy restart
 Shutting down haproxy:                                     [  OK  ]
 Starting haproxy:                                          [  OK  ]

在瀏覽取中檢視狀態
輸入 172.25.21.2/monitoruri # 本機狀態的健康檢查
這裡寫圖片描述
輸入 172.25.21.2/adminstats # monitoruri # 本機狀態的健康檢查
這裡寫圖片描述

開啟後端伺服器,進行負載均衡的檢視

 [root@server7 ~]# /etc/init.d/httpd start
 [root@server13 ~]# /etc/init.d/httpd start

這裡寫圖片描述
這裡寫圖片描述
瀏覽器中檢視
這裡寫圖片描述
這裡寫圖片描述

3 設定日誌記錄

在配置檔案中可看到日誌記錄規定

  log             127.0.0.1 local0
 Local0 為日誌記錄

編輯/etc/rsyslog.conf 進行設定

[root@server2 log]# vim /etc/rsyslog.conf
 編輯如下:
 允許UDP 日誌接收
 # Provides UDP syslog reception
 $ModLoad imudp
 $UDPServerRun 514

 *.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages
 不將日誌傳送到/var/log/messages
 local0.*                                             /var/log/haproxy.log
 # 定義日誌接收點

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
編輯完成,重啟日誌服務
這裡寫圖片描述
檢視日誌
這裡寫圖片描述

4. haproxy動靜分離:

定義多個後端
 frontend public
         bind            *:80 name clear
         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

         #use_backend     static if { hdr_beg(host) -i img }
         #use_backend     static if { path_beg /img /css   }
         use_backend     static2 if { path_end -i .php   }   
         # 如過訪問的頁面以 .php 結尾,則訪問後端 static2
         default_backend static1   # 預設訪問的後端 static1

 # The static backend backend for 'Host: img', /img and /css.
 backend static1     # 後端1
         mode            http
         balance         roundrobin

         server          statsrv1 172.25.21.7:80 check inter 1000
 backend static2    # 後端2
         mode            http
         balance         roundrobin

         server          statsrv2 172.25.21.13:80 check inter 1000

編輯如下:
這裡寫圖片描述

在瀏覽器檢視
預設後端
這裡寫圖片描述
訪問.php
這裡寫圖片描述

5. haproxy訪問控制:

在前端定義

編輯配置檔案,進行訪問控制設定

 [[email protected] log]# vim /etc/haproxy/haproxy.cfg

 # The public 'www' address in the DMZ
 frontend public
         bind            *:80 name clear
         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

         acl black_lsit src 172.25.21.250  
         # 訪問控制列表 black_list 為自定義,前後一致即可
         http-request deny if black_list    
         # http-request deny 訪問控制黑名單
 errorloc 403 http://172.25.1:8080  
         # 重定向,將錯誤顯示型別,重新定向到指定頁面

這裡寫圖片描述

172.25.21.250 主機訪問效果如下:
這裡寫圖片描述

根據錯誤型別將訪問重定向:

這裡寫圖片描述
172.25.25.2:8080 為該172.25.21.2主機http 的埠
編輯預設釋出檔案,並重新啟動服務
這裡寫圖片描述
172.25.21.250 主機訪問效果如下:
這裡寫圖片描述

編輯配置檔案,進行訪問重定向(crul 命令不支援重定向)

redirect location 重定向,將訪問的頁面重新定向到指定頁面

 [[email protected] log]# vim /etc/haproxy/haproxy.cfg

 frontend public
         bind            *:80 name clear
         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

 #       acl black_list src 172.25.21.250
 #       http-request deny if black_list
 #       errorloc 403 http://172.25.21.2:8080  # 重定向

         acl blacklist src 172.25.21.250
         redirect location http://www.nba.com  
         # 將上述訪問的源地址重定向到 www.nba.com

這裡寫圖片描述
編輯完成重新載入配置檔案

 [root@server2 log]# /etc/init.d/haproxy reload

172.25.21.250 主機訪問效果如下:直接被重新定向到www.nba.com
這裡寫圖片描述

6. haproxy讀寫分離:

通過haproxy 實現網頁的讀寫分離

編輯 /etc/haproxy/haproxy.cfg

 [[email protected] ~]# vim /etc/haproxy/haproxy.cfg
 編輯內容如下:

 frontend public
         bind            *:80 name clear
         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

 #       acl black_list src 172.25.21.250
 #       http-request deny if black_list
 #       errorloc 403 http://172.25.21.2:8080  # 重定向 

 #       acl blacklist src 172.25.21.250
 #       redirect location http://www.nba.com  # 重定向
         acl write method POST      # 控制表寫,方法為PSOT
         acl write method PUT       # 控制表寫,方法為PUT

         #use_backend     static if { hdr_beg(host) -i img }
         #use_backend     static if { path_beg /img /css   }
         use_backend     static2 if { path_end -i .php   }
         use_backend     static2 if write   # 執行寫的方法時,訪問static2
.........................省略...............................
backend static1
        mode            http
        balance         roundrobin

        server          statsrv1 172.25.21.7:80 check inter 1000
backend static2
        mode            http
        balance         roundrobin

        server          statsrv2 172.25.21.13:80 check inter 1000

這裡寫圖片描述
這裡寫圖片描述
編輯完成重啟服務
給haproxy 服務端安裝 php ,來進行對.php的解析

 [root@server2 ~]# /etc/init.d/haproxy reload

在後端伺服器進行配置
在172.25.21.7,與172.25.21.13 /var/www/html/載入下載安裝目錄
Upload 目錄,中實現簡單的upload
這裡寫圖片描述
兩個後端http伺服器都進行此操作
這裡寫圖片描述
在兩個後端伺服器進行php服務的安裝
然後重啟httpd 服務
為172.25.21.7主機的/var/www/html/images/ 新增圖片
這裡寫圖片描述

 [root@server7 html]# yum install -y php
 [root@server7 html]# /etc/init.d/httpd restart
 [root@server13 html]# yum install -y php
 [root@server13 html]# /etc/init.d/httpd restart

在服務端進行測試:
訪問172.25.21.7/images/中的檔案
這裡寫圖片描述

訪問haproxy主機
進行上傳操作
這裡寫圖片描述
進行上傳檔案的選擇
這裡寫圖片描述
選擇上傳
這裡寫圖片描述
上傳成功
這裡寫圖片描述

2. Pacemaker + haproxy 實現高可用叢集

  • 基本配置:
    給兩個節點安裝 haproxy ,pacemaker,corosync,crmsh,pssh
    安裝完成後,進行 corosync 的配置:

編輯主配置檔案:

 compatibility: whitetank

 totem {   
         version: 2
         secauth: off
         threads: 0
         interface {   # 需要根據你的環境設定以下值
                 ringnumber: 0
                 bindnetaddr: 172.25.21.0     # 叢集網段
                 mcastaddr: 226.94.1.21    # 多播地址,保證與其他叢集伺服器不 同,否則會造成衝突
                 mcastport: 5405   # 多播埠
                 ttl: 1
         }
 }

 ..................省略.........................
 service {
         name: pacemaker   # 新增服務名稱
         ver: 0               # 
 }

這裡寫圖片描述
這裡寫圖片描述

 編輯成功,兩節點同時啟動corosync 
 可通過 crm 命令來進行對配置進行管理
 Crm recurce
 Crm_verify -VL

首先檢測配置檔案是否異常
這裡寫圖片描述

這是因為stonith,目前,我們禁用這個特性,然後在 配置STONISH 章節來配置它。這裡要指出,使用STONITH是非常有必要的。關閉這個特性就是告訴叢集:假裝故障的節點已經安全的關機了。一些供應商甚至不允許這個特性被關閉。
我們將 stonith-enabled設定為 false 來關閉STONITH

 # crm configure property stonith-enabled=false
 # crm_verify -L

這裡寫圖片描述
設定完這個選項以後,校驗配置檔案就正常了。

進行Fence的安裝

進行fence的安裝

 [root@server3 ~]# yum install -y fence-virt-0.2.3-15.el6.x86_64

在真實主機安裝fence 服務,並生成金鑰,傳到兩個節點主機的/etc/cluster下

 通過crm configure 進行配置
 crm(live)configure# primitive vmfence stonith:fence_xvm params  pcmk_host_map="server2:Server2;server3:Server4" op monitor interval=30s

 # pcmk_host_map=“節點名+節點所在主機的域名;節點名+節點所在主機域名”
 crm(live)configure# property stonith-enabled=ture
 # 啟用 stonith 
 crm(live)configure# commit 
 # 儲存配置
 [root@server2 cluster]# crm configure
 crm(live)configure# show
 檢視最終配置

這裡寫圖片描述

 在節點處檢視狀態
 crm_mon

這裡寫圖片描述

進行測試fence(高可用測試)
手動讓server2 服務所在機器崩潰

 Echo c > /proc/sysrq-trigger  手動讓核心崩潰

這裡寫圖片描述
Server2 宕機,服務全部移動至server3,fence 重新啟動server2
這裡寫圖片描述

相關推薦

linux進階之pacemaker+corosync實現haproxy可用

一、環境介紹 1. 系統環境 rhel6.5 selinux and iptables if disable server1: 172.25.14.1 pacemaker + haproxy node1 server4: 172.25.14.4

Keepalived+Haproxy可用負載均衡群集

刷新 rfi opened width col vim router 一個 .com 介紹 HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,

keepalived+haproxy 可用負載均衡叢集

案例 chkconfig NetworkManager off chkconfig iptables off cat /etc/sysconfig/selinux #例行公事四臺都要這樣selinux為disabled狀態。 #web為配置好的狀態 只有一個頁面。

centos部署lvs+keepalived+apache/tomcat實現高效能可用負載均衡

前言: 常用的負載均衡軟體有lvs、haproxy、nginx,一般lvs和keeplavied一起使用 lvs是實現負載均衡作用的,即將客戶端的需求採用特定的負載均衡演算法分發到後端的web應用伺服器上,keepalived是用來實現高可用的,即保證主lvs宕機後,從lv

基於salt-stack實現可用負載均衡 salt-stack模組介紹認識

Salt-satck一鍵部署keepalived;haproxy服務: 角色 server-id 安裝 MASTER Server1 haproxy;keepalived(MASTER) MINION Serve

Nginx + Keepalived實現應用可用負載均衡功能

監控nginx .tar.gz provides listening 一個 list nginx負載均衡 服務器ip load 說明:此處僅介紹 Keepalived 實現nginx負載均衡器的高可用,關於nginx介紹和負載均衡實現可查看我的另兩篇博文 Nginx負載均衡

pacemaker + corosync 實現 haproxy可用負載均衡

1. HAProxy簡介 HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又

Haproxy + Pacemaker 實現可用負載均衡(二)

Pacemaker server1 和 server2 均安裝pacemaker 和 corosync server1 和 server2 作相同配置 [root@server1 ~]# yum install -y pacemaker coros

HAProxy+Varnish+LNMP實現可用負載均衡動靜分離集群部署

else 應用服務器 bash == 開機啟動 多少 heal 啟用 4.0 轉自http://bbs.hfteams.com/forum.php?mod=viewthread&tid=11&extra=page%3D1 HAProxy+Varnish+LN

http可用+負載均衡 corosync + pacemaker + pcs

http高可用+負載均衡 corosync + pacemaker + pcs openstack pike 部署 目錄彙總 http://www.cnblogs.com/elvi/p/7613861.html #http高可用+負載均衡pacemaker+haproxy #ht

docker下用keepalived+Haproxy實現可用負載均衡叢集

先記錄下遇到的坑,避免之後忘了; 花時間最多去解決的一個題是:在docker下啟動haproxy服務後在這個docker服務內安裝keepalived無法ping通的問題,雖然最後也是莫名其妙就好了,但是加強了不少對docker的理解和還需深入學習的地方。 為什麼要用

saltstack實現一鍵部署keepalived+haproxy可用負載均衡叢集

配置環境 主機名 ip 服務 server1 172.25.1.1 salt-master、salt-minion haproxy、keepalived server2 172.25.1.2 salt-minion

Keepalived+Nginx實現可用負載均衡集群

連接 靜態 adf -1 rip mail fff hostname dex 一 環境介紹 1.操作系統CentOS Linux release 7.2.1511 (Core) 2.服務keepalived+lvs雙主高可用負載均衡集群及LAMP應用keepalived-1

基於HAProxy+Keepalived可用負載均衡web服務的搭建

1.2 epo cnblogs oba backup 保持 ica mysql redis 一 原理簡介 1.HAProxyHAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那

LVS+Keepalived實現可用負載均衡

lvs+keepalived 高可用 負載均衡 用LVS+Keepalived實現高可用負載均衡,簡單來說就是由LVS提供負載均衡,keepalived通過對rs進行健康檢查、對主備機(director)進行故障自動切換,實現高可用。1. LVS NAT模式配置準備三臺服務器,一臺director, 兩

corosync+pacemaker+crm實現drbd可用

drbd.not configured corosync packmaker crm pcs 系統:Centos 7.2 內核3.10.0-327.el7.x86_64 # 內核需要高於2.6.32Drbd : 192.168.8.111:node1/dev/drdb0 /my

Haproxy + keepalived 可用負載均衡解決方案

haproxy + keepalived文檔作者:amunlinux文檔版本:Version 1.1修改記錄:2017-04-22系統環境:CentOS 6.8 64 bitIP 信息列表: 名稱 IP -----------------------------------VIP 192.1

[轉] Haproxy、Keepalived雙主可用負載均衡

配置過程 virtual dev gnu 文本 tpch margin amp queue http://blog.chinaunix.net/uid-25266990-id-3989321.html 在測試了Nginx+Keepalived的負載均衡後,也對Haprox

Keepalived+Haproxy搭建可用負載均衡

eas 1.5 desc patch ble set 雙機 backend sql global_defs { notification_email { [email protected]/* */ } n

基於corosyncpacemaker+drbd實現mfs可用

mfs高可用 drbd pacemaker corosync moosefs 基於corosync和pacemaker+drbd實現mfs高可用一、MooseFS簡介1、介紹 MooseFS是一個具備冗余容錯功能的分布式網絡文件系統,它將數據分別存