拓撲圖如下:
為什麼要使用負載均衡技術?
1、系統高可用性
2、系統可擴充套件性
3、負載均衡能力
lvs+keepalived
能很好的實現以上的要求,
lvs提供負載均衡,
keepalived
提供健康檢查,故障轉移,提高系統的可用性!採用這樣的架構以後很容易對現有系統進行擴充套件,只要在後端新增或者減少
realserver
,只要更改
lvs的配置檔案,並能實現無縫配置變更!
二、lvs+keepalived
介紹1、
lvslvs
是乙個開源的軟體,可以實現
linux
平台下的簡單負載均衡。
lvs是
linux virtual server
的縮寫,意思是
linux
虛擬伺服器。目前有三種
ip負載均衡
技術(vs/nat
、vs/tun
和vs/dr
);八種排程演算法(
rr,wrr,lc,wlc,lblc,lblcr,dh,sh
)。2、
keepalived
keepalived
是執行在
lvs
之上,它的主要功能是實現真實機的故障隔離及負載均衡器間的失敗切換,提高系統的可用性,
keepalived的作用是檢測web伺服器的狀態,如果有一台web伺服器宕機,或工作出現故障,keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後keepalived自動將web伺服器加入到伺服器群中。
ip配置資訊:
lvs-dr-master 172.10.2.174
lvs-dr-backup 172
lvs-dr-vip 172.10.2.201 #這個不是一台機子,是在nginx上用指令碼建的,下面會有指令碼**。
web1-ngxserver
172.10.2.170 #這個nginx,後端我用的是apache,nginx**apache
web2-ngxserver 172.10.2.206 #這個也是nginx
三、ipvsadm安裝:
先安裝所需要的庫:
yum install zlib-devel kernel-* libnl* popt* openssl openssl-devel net-snmp-*
#ipvs安裝報錯主要是缺少,libnl跟popt庫檔案
解壓後:make && make install
安裝好後測試下:
ipvsadm ## 必須先執行此命令才能載入ip_vs模組
沒報錯有輸出說明安裝ok了。
再輸入:
lsmod | grep ip_vs
四、安裝keepalived(lvs和keepalived裝在一台機子上,我全用的虛擬機器子)
解壓後:
./configure --prefix=/usr/local/keepalived --enable-snmp && make && make install
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #沒有這個keepalived啟動後,不會檢測到real server的vip
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ #沒有這個keepalived無法啟動,報錯說找不到命令
啟動:/etc/init.d/keepalived start
4.1 /etc/keepalived/keepalived.conf配置如下
! configuration file for keepalived
global_defs
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id lvs_devel }
vrrp_sync_group lvs }
vrrp_instance vi_1
virtual_ipaddress
}virtual_server 172.10.2.89 80 }
real_server 172.10.2.206 80 }
}五、在兩台nginx上放入指令碼,(/etc/init.d/lvs_start.sh)內容如下:
#! /bin/bash
syn_vip=172.10.2.201
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $syn_vip netmask 255.255.255.255 broadcast $syn_vip
/sbin/route add -host $syn_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)
ifconfig lo:0 down
route del $syn_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 stop"
;; *)
echo "usage: $0 "
exit 1
esac
配置許可權:chmod +x /etc/init.d/lvs_start.sh
開啟:/etc/init.d/lvs_start.sh start 會提示functions許可權不夠
加許可權chmod +x /etc/rc.d/init.d/functions
/etc/init.d/lvs_start.sh start
再ifconfig看看
說明vip配置ok了。兩個nginx機子都使用相同的這個指令碼
六、訪問測試:
在lvs keepd機子上輸入命令
ip add #命令檢視real server的vip是否已經被繫結到keepalived的master或者backup上
inet 172.10.2.201/32 scope global eth0 #說明成功繫結
ipvsadm命令檢測nginx是否正常工作,
都已經檢測到兩台nginx在正常工作,
把170和206兩台nginx開啟,
接下來要清一下,由於我測試時訪問ip沒搞對,老訪問不了,
在nginx上有配置的vip(172.10.2.201),這個ip是對外的,直接對應使用者,我們在lvs_keepd機子上有繫結這個vip,那麼當使用者訪問這個ip時,lvs_keepd會接收這個請求然後**給170和206其中某一台機子,這裡lvs也會實現乙個小小的負載,
那本地windows的host配置是
172.10.2.201 www.b.com #這樣訪問這個網域名稱時,直接到了lvs,再**給了nginx,nginx再去後端apache獲取資料
測試:當訪問www.b.com/test235.html, lvs收到後**給了ngx206來接收了請求,
當我把ngx206的nginx服務給關了,再次請求,lvs收到後**給了ngx170,
當把ngx206開啟時,在lvs_keepd上ipvsadm一下,會看到206重新加入進來。
這裡具體怎麼看,看訪問日誌。
#這裡有一些是參照網上的一例子,但小兵新測過,可行。
利用magent搭建memcached集群
memcached雖然能夠通過分布式快取,實現其中memcached宕掉不會丟失全部快取資料,但部分資料還是難逃一劫。我們可以利用magent memcached實現主從備份來保證快取資料完好無損,而且magent還可以作為從繼續使用,但大體工作原理如下 1.magent每次寫資料都會寫到主memc...
CentOS環境搭建zookeeper集群篇
1,確定已安裝jdk環境 可看我的centos環境jdk安裝篇 2,解壓zookeeper 3.4.8.tar.gz root yandype home tar zxvf zookeeper 3.4.8.tar.gz 我的zookeeper包是在根目錄的home資料夾下面 解壓後變成zookeepe...
windows單機搭建RabbitMQ集群
1 先安裝erlang,安裝完成後,設定環境變數 變數名 erlang home 變數值 d erl9.1 2 安裝rabbitmq,安裝過程中會自動啟動rabbitmq服務 安裝之前,先設定環境變數 變數名 rabbitmq home 變數值 d rabbitmq server rabbitmq ...