部署haproxy代理 搭建nginx集群
- 前言
- 一、實驗環境:
- 二、實驗步驟:
- 1、編譯安裝Nginx服務器(nginx1,nginx2)
- 1.nginx1 服務器
- 2.nginx2 服務器 (使用腳本安裝,確認原始碼軟體已存放在/root目錄中)
- 2、Haproxy1代理服務器
- 1.編譯安裝haproxy
- 2.配置Haproxy
- 3.Haproxy相關引數優化
- 三、驗證
- 1.客戶機打開2個ie瀏覽器訪問:http://192.168.100.101
- 2.查看日志資訊
- 3.關閉節點服務器,查看日志資訊
- 四、haproxy日志管理:
- 五、擴展內容:haproxy集群的雙機熱備haproxy+nginx+keepalived如何實作
- 1、實驗程序:
- 1.增加主機haproxy2代理服務器 192.168.100.104
- 安裝haproxy
- 安裝keepalived
- 2. haproxy1 192.168.100.101
- 將此服務器網路連接斷開
- 改造此服務器
- 重新上線此服務器進行驗證
前言
使用需求: 負載均衡群階可以用tocat+nginx的負載均衡群集,還有lvs負載均衡群集,三種群集相比來說,lvs性能最好,但是搭建復雜,ningx的upstream模塊支持群集,但是群集的節點的故障檢查功能不是很多,性能也比不上haproxy,
相對來能實作什么樣的效果: 對于企業的服務器(web.ftp等)能實作負載均衡,其中一臺服務器宕機之后能依然能上網站ftp,
知識點的描述: 負載均衡的常用調度演算法:
(1):RR(Round Robin),是最簡單最常用的一種演算法,即輪詢調度,
(2):LC(LEAST Conections),即最小節點數演算法,根據后端的節點數大小動態分配前端請求
(3):SH(Source Hashing),即基于來源訪問調度演算法,用于一些有Session會話記錄在服務器端的場景,可以基于來源的IP,Cookis等做集群調度
(4):如果需要實作haproxy的高可用,可以配置前一次所講的keepalived,配置方法基本相同,需要增加一臺haproxy用來做備份,注意一點的是需要在防火墻上開啟keepalived的組播地址相應埠
Haproxy介紹:
Haproxy是一個開源的高性能的反向代理或者說是負載均衡服務軟體之一,它支持雙機熱備、虛擬主機、基于TCP和HTTP應用代理等功能,
其配置簡單,而且擁有很好的對服務器節點的健康檢查功能(相當于keepalived健康檢查),當其代理的后端服務器出現故障時,Haproxy會自動的將該故障服務器摘除,當服務器的故障恢復后Haproxy還會自動將RS服務器添加
Haproxy特別使用與那些訪問量很大,但又需要會話保持或七層應用的業務,Haproxy運行在普通的服務器硬體上,僅僅進行簡單的優化就可以支持數以萬計的并發連接,
并且它的運行模式使得它可以很簡單安全的整合到各種網站的架構中,同時使得應用服務器不會暴露到網路中,
Haproxy軟體引入了frontend,backend的功能,frontend(acl規則匹配)可以運維管理人員根據任意HTTP請求頭做規則匹配,然后把請求定向到相關的backend(server pools等待前端把請求轉過來的服務器組),通過frontend和backup,我們可以很容易的實作haproxy的7層代理功能,haproxy是一款不可多得的優秀代理服務軟體
Haproxy支持兩種主要代理模式: 第一個是4層tcp代理(例如:可用于郵件服務內部協議通信服務器、Mysql服務等),第二個是7層代理(如HTTP代理),在4層tcp代理模式下,Haproxy僅在客戶端和服務器之間雙向轉發流量,但是在7層模式下Haproxy會分析應用層協議,并且能通過運行、拒絕、交換、增加、修改或者洗掉請求(request)或者回應(reponse)里指定內容來控制協議,
一、實驗環境:
| 系統型別 | IP地址 | 主機名 | 所需軟體 |
|---|---|---|---|
| Centos7.4 1708 64bit | 192.168.100.101 | Haproxy1 | haproxy-1.5.19+keepalived |
| Centos7.4 1708 64bit | 192.168.100.102 | Nginx1 | nginx-1.12.0 |
| Centos7.4 1708 64bit | 192.168.100.103 | Nginx2 | nginx-1.12.0 |
| Centos7.4 1708 64bit | 192.168.100.104 | Haproxy2 | haproxy-1.5.19+keepalived |
實驗拓撲:

二、實驗步驟:
1、編譯安裝Nginx服務器(nginx1,nginx2)
1.nginx1 服務器
192.168.100.102
[root@nginx1 ~]# yum -y install pcre-devel zlib-devel
[root@nginx1 ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/
[root@nginx1 ~]# cd /usr/src/nginx-1.12.0
[root@nginx1 nginx-1.12.0]# useradd -M -s /sbin/nologin nginx
[root@nginx1 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx &&make &&make install
[root@nginx1 nginx-1.12.0]# echo $?
0
[root@nginx1 nginx-1.12.0]# cd
[root@nginx1 ~]# echo '<h1>web1</h1>' >/usr/local/nginx/html/index.html
[root@nginx1 ~]# /usr/local/nginx/sbin/nginx -t
[root@nginx1 ~]# /usr/local/nginx/sbin/nginx
[root@nginx1 ~]# netstat -anput |grep nginx
如果需要關閉服務 /usr/local/nginx/sbin/nginx -s stop
2.nginx2 服務器 (使用腳本安裝,確認原始碼軟體已存放在/root目錄中)
192.168.100.103
[root@nginx2 ~]# vim nginx-install.sh
---------------------------------------------------------
#!/bin/bash
read -p "請輸入首頁內容:" index
yum -y install pcre-devel zlib-devel
tar zxvf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
echo "$index" > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
netstat -anput|grep nginx &>/dev/null
if [ $? -eq 0 ] ;then
echo "nginx服務成功啟動"
else
echo "nginx服務未成功啟動,請檢查安裝程序"
fi
-------------------------------------------------------
[root@nginx2 ~]# chmod +x nginx-install.sh
[root@nginx2 ~]# ./nginx-install.sh
[root@nginx2 ~]# echo $?
0
-------------------------------------------------------
2、Haproxy1代理服務器
1.編譯安裝haproxy
[root@haproxy1 ~]# yum -y install pcre-devel bzip2-devel
[root@haproxy1 ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src/
[root@haproxy1 ~]# cd /usr/src/haproxy-1.5.19/
[root@haproxy1 haproxy-1.5.19]# make TARGET=linux26 ##64位系統
[root@haproxy1 haproxy-1.5.19]# make install
[root@haproxy1 haproxy-1.5.19]# cd
2.配置Haproxy
[root@haproxy1 ~]# mkdir /etc/haproxy
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
## 編輯組態檔如下
-------------------------------------------------------------------------------
global ##全域部分
log /dev/log local0 info
log /dev/log local1 notice ##把info和notice日志分別存放,以便查看
maxconn 4096 ##最大連接數
uid 99
gid 99 ##用戶和組id
daemon ##后臺運行
defaults ##默認配置
log global ##應用全域部分的日志配置
mode http ##模式為http
option httplog ##日志類別
option dontlognull ##如果產生了一個空連接,那這個空連接的日志將不會記錄
retries 3 ##檢查節點的失敗次數,連續達到3次認為節點不可用
maxconn 2000 ##最大連接數
contimeout 5000 ##連接超時時間5000
clitimeout 50000
srvtimeout 50000 ##客戶端和服務器超時時間都是50000毫秒
listen webcluster 0.0.0.0:80 ##web集群(偵聽的地址和介面)
option httpchk GET /index.html ##心跳檢測方式為檢測后端服務器index.html檔案,還有其他方式
balance roundrobin ##負載均衡調度演算法 輪詢 roundrobin
server inst1 192.168.100.102:80 check inter 2000 fall 3
server inst2 192.168.100.103:80 check inter 2000 fall 3 ##服務器節點的地址、名稱、埠 、檢查間隔時間2000毫秒、健康檢查次數3次認為失敗
---------------------------------------------------------------------------------
[root@haproxy1 ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy1 ~]# chmod +x /etc/init.d/haproxy
[root@haproxy1 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@haproxy1 ~]# /etc/init.d/haproxy restart
---------------------------------------------------------------------------------
3.Haproxy相關引數優化
maxconn 最大的連接數 推薦使用10240
daemon 守護行程模式 可以使用非守護默認
nbproc 負載均衡的并發行程數 建議與當前服務器cpu核相等或2倍
retries 重試次數 對集群節點的檢查,節點多并發量大,設定為2到3次
option http-server-close 主動關閉http請求選項 生產環境中使用此選項,避免由于timeout時間設定過長導致http連接堆積
timeout http-keep-alive 長連接超時時間(10s)
timeout http-request http請求超時時間(5~10s) 增加http連接釋放的速度
timeout client 客戶端超時時間
三、驗證
1.客戶機打開2個ie瀏覽器訪問:http://192.168.100.101
查看是否能夠獲取不同的網頁內容即成功
2.查看日志資訊
[root@haproxy1 ~]# tail -f /var/log/messages
3.關閉節點服務器,查看日志資訊
[root@haproxy1 ~]# tail -f /var/log/messages
四、haproxy日志管理:
Haproxy的日志默認是輸出到系統的syslog中,查看起來不是很方便,為了方便管理haproxy的日志,在生產環境中單獨定義
[root@haproxy1 ~]# cd /etc/rsyslog.d/
[root@haproxy1 rsyslog.d]# vim haproxy.conf
--------------------------------------------------------------
local0.* /var/log/haproxy/ha-info.log
local1.* /var/log/haproxy/ha-notice.log
--------------------------------------------------------------
##如果不加下面的的配置則除了在/var/log/haproxy.log中寫入日志外,也會寫入message檔案
--------------------------------------------------------------
[root@haproxy1 ~]# vim /etc/sysconfig/rsyslog
添加:
SYSLOGD_OPTIONS="-r -m 0 -c 2" ## -r 開啟遠程日志 -m 0 標記時間戳,單位是分鐘,為0時,表示禁用該功能 -c 2 使用兼容模式,默認是 -c 5
:wq ## 保存退出
-----------------------------------------------------------------
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
-----------------------------------------------------------------
global
log /dev/log local0 info
log /dev/log local1 notice
-----------------------------------------------------------------
經檢查在配置haproxy.cfg已配置
[root@haproxy1 ~]# systemctl restart rsyslog
[root@haproxy1 ~]# /etc/init.d/haproxy restart
-----------------------------------------------------------------
驗證測驗:
[root@haproxy1 ~]# tail /var/log/haproxy/ha-info.log
查看是否有日志產生
-----------------------------------------------------------------
相關rsyslog配置,使用rainerscript語言撰寫,適用于復雜環境,略---用上述方法實作即可
vim /etc/rsyslog.d/haproxy.conf
編輯內容:
if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
-------------------------------------------------------------------
五、擴展內容:haproxy集群的雙機熱備haproxy+nginx+keepalived如何實作
在上述實驗環境上,增加一臺haproxy代理服務器,使用keepalived技術實作雙機熱備,群集ip 192.168.100.200
1、實驗程序:
1.增加主機haproxy2代理服務器 192.168.100.104
安裝haproxy
[root@haproxy2 ~]# yum -y install pcre-devel bzip2-devel
[root@haproxy2 ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src/
[root@haproxy2 ~]# cd /usr/src/haproxy-1.5.19/
[root@haproxy2 haproxy-1.5.19]# make TARGET=linux26
[root@haproxy2 haproxy-1.5.19]# make install
[root@haproxy2 ~]# cd
[root@haproxy2 ~]# mkdir /etc/haproxy
[root@haproxy2 ~]# vim /etc/haproxy/haproxy.cfg
和haproxy1組態檔相同
[root@haproxy2 ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy2 ~]# chmod +x /etc/init.d/haproxy
[root@haproxy2 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@haproxy2 ~]# /etc/init.d/haproxy restart
[root@haproxy2 ~]# netstat -anput | grep haproxy
安裝keepalived
[root@haproxy2 ~]# yum -y install keepalived
[root@haproxy2 ~]# systemctl enable keepalived
[root@haproxy2 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
---------------------------------------------------------------------------
[root@haproxy2 ~]# echo '
global_defs {
router_id HA_TEST_R2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 1
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.100.200
}
}
' >/etc/keepalived/keepalived.conf
----------------------------------------------------------------------------
[root@haproxy2 ~]# systemctl restart keepalived
[root@haproxy2 ~]# ip a
查看漂移ip192.168.100.200是否存在
[root@haproxy2 ~]# systemctl restart haproxy
2. haproxy1 192.168.100.101
將此服務器網路連接斷開
客戶機訪問 http://192.168.100.200 是否能夠實作群集的訪問
改造此服務器
[root@haproxy1 ~]# yum -y install keepalived
[root@haproxy1 ~]# systemctl enable keepalived
[root@haproxy1 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
-----------------------------------------------------------------------------
[root@haproxy1 ~]# echo '
global_defs {
router_id HA_TEST_R1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.100.200
}
}
' >/etc/keepalived/keepalived.conf
-------------------------------------------------------------------------------
[root@haproxy1 ~]# cat /etc/keepalived/keepalived.conf
[root@haproxy1 ~]# systemctl restart keepalived
[root@haproxy1 ~]# ip a
--------------------------------------------------------------------------------
重新上線此服務器進行驗證
注:模擬實驗環境中重啟keepalived服務前需要先啟網卡
鏈接: CSDN資源永久共享地址
提取碼:idmz
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210397.html
標籤:python
