keepAlived應用於HaProxy的主備自動切換實現高可用,避免單點故障
前言
對於訪問量較大的網站來說,隨著流量的增加單臺伺服器已經無法處理所有的請求,這時候需要多臺伺服器對大量的請求進行分流處理,即負載均衡。而如果實現負載均衡,必須在網站的入口部署伺服器(不只是一臺)對這些請求進行分發,這臺伺服器即反向代理。由於反向代理伺服器是網站的入口,其負載壓力大且易遭到攻擊,存在單點故障的風險,所以我們需要一個高可用的方案來實現當一臺反向代理伺服器宕機的時候,另一臺伺服器會自動接管服務。基於以上要求,我們使用HAProxy,KeepAlived來構建高可用的反向代理系統。
介紹
HAProxy是高效能的代理伺服器,其可以提供7層和4層代理,具有healthcheck,負載均衡等多種特性,效能卓越,包括Twitter,Reddit,StackOverflow,GitHub在內的多家知名網際網路公司在
KeepAlived是一個高可用方案,通過VIP(即虛擬IP)和心跳檢測來實現高可用。其原理是存在一組(兩臺)伺服器,分別賦予Master,Backup兩個角色,預設情況下Master會繫結VIP到自己的網絡卡上,對外提供服務。Master,Backup會在一定的時間間隔向對方傳送心跳資料包來檢測對方的狀態,這個時間間隔一般為2秒鐘,如果Backup發現Master宕機,那麼Backup會發送ARP包到閘道器,把VIP繫結到自己的網絡卡,此時Backup對外提供服務,實現自動化的故障轉移,當Master恢復的時候會重新接管服務。
環境
OS: CentOS Linux release 6.0 (Final) 2.6.32-71.29.1.el6.x86_64
HAProxy: 1.4.18
KeepAlived: 1.2.2
VIP: 192.168.1.99
M: 192.168.1.222
S: 192.168.1.189
架構
192.168.1.99 +-----------VIP----------+ | | | | Master Backup 192.168.1.189 192.168.1.222 +----------+ +----------+ | HAProxy | | HAProxy | |keepalived| |keepalived| +----------+ +----------+ | v +--------+---------+ | | | | | | v v v +------+ +------+ +------+ | WEB1 | | WEB2 | | WEB3 | +------+ +------+ +------+
安裝HAProxy
安裝pcre
$ yum install pcre
$ wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.18.tar.gz
$ tar -zxvf haproxy-1.4.18.tar.gz
$ cd haproxy-1.4.18
注意編譯引數:
TARGET是指自己系統的核心版本 ARCH指定系統是32位還是64位
CPU=native: use the build machine's specific processor optimizations
更多編譯引數內容見原始碼中的README
$ make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 CPU=native $ make install
配置檔案 /etc/haproxy.cfg
global
log 127.0.0.1 local3
maxconn 20000
uid 535 #uid和gid按照實際情況進行配置
gid 520
chroot /var/chroot/haproxy
daemon
nbproc 1
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
retries 2
balance roundrobin
stats uri /haproxy-stats
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind *:80
default_backend pool1
backend pool1
option httpchk HEAD / HTTP/1.0
stats refresh 2
server WEB1 192.168.1.189:81 weight 3 maxconn 10000 check
server WEB2 192.168.1.222:81 weight 3 maxconn 10000 check
檢視HAProxy的狀態:http://192.168.1.99/haproxy-stats,這個頁面會顯示HAProxy本身以及後端伺服器的狀態。
日誌
haproxy會把日誌記錄傳送到syslog server(CentOS6下是rsyslogd,UDP514埠), 編輯/etc/rsyslog.conf檔案,新增如下內容:
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
local3.* /var/log/haproxy.log
重啟rsyslog
$ /etc/init.d/rsyslog restart
自動輪轉日誌,編輯/etc/logrotate.d/haproxy.cfg,新增如下內容:
/var/log/haproxy.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog > /dev/null 2>&1 || true
endscript
}
啟動指令碼
$ wget -O haproxy https://raw.github.com/gist/3665034/4125bd5b81977a72e5eec30650fb21f3034782a0/haproxy-init.d
$ cp haproxy /etc/init.d/haproxy
$ chmod +x /etc/init.d/haproxy
#使用方式
$ /etc/init.d/haproxy start|stop|restart
安裝KeepAlived
安裝依賴庫
$ yum install popt popt-devel
安裝KeepAlived
$ wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
$ tar -zxvf keepalived-1.2.2.tar.gz
$ cd keepalived-1.2.2
$ ./configure --prefix=/usr/local/keepalived
$ make && make install
$ cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
$ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
$ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
$ mkdir -p /etc/keepalived/
$ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
$ chmod +x /etc/init.d/keepalived
使用方式
$ /etc/init.d/keepalived start|stop|restart
Master伺服器上的配置 /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.x.x
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#監測haproxy程序狀態,每2秒執行一次
vrrp_script chk_haproxy {
script "/usr/local/keepalived/chk_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER #標示狀態為MASTER
interface eth0
virtual_router_id 51
priority 101 #MASTER權重要高於BACKUP
advert_int 1
mcast_src_ip 192.168.1.189 #Master伺服器IP
authentication {
auth_type PASS #主從伺服器驗證方式
auth_pass 1111
}
track_script {
chk_haproxy #監測haproxy程序狀態
}
#VIP
virtual_ipaddress {
192.168.1.99 #虛擬IP
}
}
Bakcup伺服器上的配置 /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.x.x
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#監測haproxy程序狀態,每2秒執行一次
vrrp_script chk_haproxy {
script "/usr/local/keepalived/chk_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP #狀態為BACKUP
interface eth0
virtual_router_id 51
priority 100 #權重要低於MASTER
advert_int 1
mcast_src_ip 192.168.1.222 #Backup伺服器的IP
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy #監測haproxy程序狀態
}
#VIP
virtual_ipaddress {
192.168.1.99 #虛擬IP
}
}
chk_haproxy.sh內容
#!/bin/bash
#
# author: weizhifeng
# description:
# 定時檢視haproxy是否存在,如果不存在則啟動haproxy,
# 如果啟動失敗,則停止keepalived
#
status=$(ps aux|grep haproxy | grep -v grep | grep -v bash | wc -l)
if [ "${status}" = "0" ]; then
/etc/init.d/haproxy start
status2=$(ps aux|grep haproxy | grep -v grep | grep -v bash |wc -l)
if [ "${status2}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
高可用測試
-
在Master上停止keepalived,檢視系統日誌,發現MASTER釋放了VIP
$ /etc/init.d/keepalived stop $ tail -f /var/log/message Keepalived: Terminating on signal Keepalived: Stopping Keepalived v1.2.2 (11/03,2011) Keepalived_vrrp: Terminating VRRP child process on signal Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
-
在Backup上檢視系統日誌,發現Backup已經進入MASTER角色,並且綁定了VIP 192.168.1.99
$ tail -f /var/log/message Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.99 #在Backup上檢視VIP是否已經繫結
-
在Master上重新啟動keepalived,檢視系統日誌,發現重新獲得MASTER角色,並且繫結VIP 192.168.1.99
$ /etc/init.d/keepalived start $ tail -f /var/log/message Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs. Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.99
-
在Backup上檢視系統日誌,發現其重新回到BACKUP角色,並且釋放VIP
$ tail -f /var/log/message Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
併發測試
我們使用webbench來對HAProxy進行併發測試
$ yum install ctags
$ wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
$ tar -zxvf webbench-1.5.tar.gz
$ cd webbench-1.5
$ make
$ mkdir -p /usr/local/man && make install
測試環境:
CPU:Intel 雙核 x86_64 主頻3191MHZ
Mem:2G
修改php-fpm.conf,設定PHP-FPM spawn的程序數量為100:
pm.start_servers = 100
pm.max_spare_servers = 100
測試方法:
$ webbench -c 100 -t 3000 http://192.168.1.99/check.txt
$ webbench -c 100 -t 3000 http://192.168.1.99/test.php
測試結果:
併發訪問txt檔案,HAProxy的session數量為10000左右,這說明HAProxy能夠hold住10000個併發連線;併發訪問php檔案,HAProxy的session峰值為200左右,接近於後端PHP的併發處理能力(100x2)。
參考:
相關推薦
keepAlived應用於HaProxy的主備自動切換實現高可用,避免單點故障
前言 對於訪問量較大的網站來說,隨著流量的增加單臺伺服器已經無法處理所有的請求,這時候需要多臺伺服器對大量的請求進行分流處理,即負載均衡。而如果實現負載均衡,必須在網站的入口部署伺服器(不只是一臺)對這些請求進行分發,這臺伺服器即反向代理。由於反向代理伺服器是網站的入口
解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用
解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee
使用mycat實現mysql讀寫分離以及主備自動切換模式
一:軟體環境 Window7 Mycat-server1.6 JDK1.8 Mysql5.62臺 二:讀寫分離的好處 增加了冗餘(備份資料)。 讀寫分開,減輕機器壓力,提高資料庫併發。 Mycat
Nginx+keepalived主從雙機熱備自動切換架構
1:安裝 keepalived 安裝 keepalived 非常的簡單和容易,這跟安裝其他 GNU 原始碼軟體步驟是以模一樣的。下面 給出其安裝過程 下載最新穩定版 wget http://www.keepalived.org/software/keepaliv
超詳細MySQL主主復制+MMM實現高可用
mnt 更新 nat mount iad com 基於 read p12 簡介 MMM(Master-Master Replication Manager for MySQL, MySQL主主復制管理器)是一套靈活的腳本程序,基於perl實現,用來對mysql replic
greenplum(5.10)生產系統主備節點切換
node directory usr build refused elk sync 信息 ges 集群安裝信息參考:系統初始化:http://blog.51cto.com/michaelkang/2167195集群安裝配置:http://blog.51cto.com/mic
postgresql 主備及切換-恢復方案
連接 報警 err 判斷 ber arch 處理 clu cluster 前言 前期的gitlab 已經開始推廣測試,最近對postgresql 做了主備,這裏說下方案及在實施過程中遇到的坑。postgresql 的具安裝不在此介紹。 基礎信息 primary_ip
keepalived實現nginx高可用,一主一備
ddr cti 文件重命名 實現 usr time deb 安裝 fall keepalived實現nginx高可用(HA) 安裝直接yum安裝就可以,版本可能比官網落後,但是夠用了, yum -y install keepalived 編輯配置文件,默認路徑 /et
經驗分享(4)Yarn ResourceManager頁面如何實現主被自動切換
hdfs、yarn、hbase這些元件的master支援多個,實現自動主備切換,其中hdfs、hbase無論訪問主master或者備master都可以正常訪問頁面,但是yarn比較特別,只有主master的頁面可以訪問,備master會返回Refresh,3s後重定向; 一種方式是提供兩個域名,分別對應兩個
haproxy對mysql主主複製的負載均衡中配keepalived實現高可用
突破單點故障限制,實現熱備防止宕機 在主主複製的基礎和負載均衡的基礎之上用keepalived實現熱備 keepalived 提供一個vip 虛擬的ip,並監測haproxy1和haproxy2的執行情況,讓這個vip在兩者間進行搶佔(機制有預設,有優先,有宕機後另一個自動獲取) keep
Keepalived熱備(處理單點故障,高可用) Keepalived+LVS(高可用,負載均衡) 、 HAProxy伺服器(負載均衡)
keepalived概述 keepalived執行原理 Top NSD CLUSTER DAY03 案例1:Keepalived高可用伺服器
Oracle 11g Data Guard之主備庫切換(switchover不使用DG Broker)
--目前主庫PROD3,備庫AUX --檢視主備庫日誌傳輸情況 [email protected]> select max(sequence#) from v$archived_log; MAX(SEQUENCE#) --------------
Mycat實現讀寫分離,主備熱切換
Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 不涉及過多理論,只有實現的過程。mysql讀寫分離和主備熱切換,容災,資料分片的實現手段目前比較流行的是Mycat。當然利用應用層程式碼去解決這些
MySQL+MyCat實現讀寫分離和主備熱切換
配置MyCat的schema.xml檔案 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <tab
decorator 裝飾頁面,根據不同設備自動切換移動和pc站
str 設備 跳轉 util 自動 handle 不同 author tor package com.thinkgem.jeesite.modules.sys.interceptor; import javax.servlet.http.HttpServle
Spring Boot中自定義註解+AOP實現主備庫切換
摘要: 本篇文章的場景是做排程中心和監控中心時的需求,後端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢資料時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義註解結合AOP實現直接連線備庫查詢。 一.通過A
ansible實現nginx雙主模式反代,keepalived高可用,memcached緩存
ansible實現nginx前端反代 keepalived高可用與對後端rs的配置 ansible自動化運維工具配置ngnix前端反代到後端真實機,並設置keepalived高可用,在後端一臺真實主機上配置httpd,mysql,php-fpm;設置memcached緩存服務器在這臺真實主機上;(
HAproxy+Keepalived實現高可用
daemon type tom com rontab date redis start virt HAproxy+Keepalived實現高可用 說明: HA1:HAproxy+Keepalived(master) HA2:HAproxy+Keepalived(back
keepalived+mysql主主實現高可用
keepalived+mysqlmysql主從配置參考:http://blog.51cto.com/243662875/2126015 主主配置就是互為主從 keepalived下載網址:http://www.keepalived.org/ 環境 準備應用 keepalived-2.0.2.tar.gz o
幹貨,memcached+keepalived實現主主復制和高可用,詳解!
sdf 功能 部署方式 live sys ref mtu pad gin keepalived+memcached主主復制高可用介紹: 客戶端連接兩臺服務器之間的VIP地址,如果後端服務器故障自動切換。 Keepalive原理: 1.故障檢測: Keepalived的作用