1.安裝Keepalived(主備服務器都要安裝)linux
10.8.80.218 主服務器redis
10.8.80.217 備服務器 算法
10.8.80.200 虛擬IPvim
$ wget http://www.keepalived.org/software/keepalived-1.2.0.tar.gz
$ tar -zxvf keepalived-1.2.0.tar.gz
$ cd keepalived-1.2.0
$ ./configure --prefix=/usr/local/keepalived
$ make && make install後端
文件Copy服務器
$ 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/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf網絡
keepalived.conf配置以下:負載均衡
10.8.80.218主服務器:oop
global_defs { } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.8.80.200 } } virtual_server 10.8.80.200 6379 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 protocol TCP real_server 10.8.80.218 6379 { weight 1 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } real_server 10.8.80.217 6379 { weight 1 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }
有幾個地方解釋一下:性能
state MASTER :表示是主服務器
priority 101 : 主的權重要高於從
virtual_ipaddress :對外提供的虛擬IP
lb_algo rr : LVS有8種調度算法:
輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
基於局部性的最少連接(Locality-Based Least Connections)
"基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務 器,將請求發送到該服務器。
帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的 程度。
目標地址散列(Destination Hashing)
"目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
源地址散列(Source Hashing)
"源地址散列"調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空
lb_kind :LVS的3種包轉發模式:
protocol TCP: 採用TCP/UDP協議
real_server: 物理服務器
10.8.80.217從服務器:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 10 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.8.80.200 } } virtual_server 10.8.80.200 6379 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 protocol TCP real_server 10.8.80.218 6379 { weight 1 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } real_server 10.8.80.217 6379 { weight 1 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }
配置基本和主服務器同樣,要注意的是state 是BACKUP。
2.安裝配置ipvsadm
1.下載ipvsadm
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
# ln -s /usr/src/kernels/2.6.32-279.el6.i686//usr/src/linux/
# tar zxvf ipvsadm-1.26.tar.gz
# cd ipvsadm-1.26
# make && make install
2.開啓路由轉發
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
3.添加ifcfg-eth:0文件
拷貝ifcfg-eth0文件,名稱爲ifcfg-eth0:0,而後編輯ifcfg-eth0:0將文件中的IPADDR修改成VIP,DEVICE設置爲「eth0:0
設置完成後從新啓動network服務(service network restart)
4.在ipvsadm添加配置
ipvsadm -C ipvsadm -A -t 10.8.80.200:6379 -s rr ipvsadm -a -t 10.8.80.200:6379 -r 10.8.80.222 -g ipvsadm -a -t 10.8.80.200:6379 -r 10.8.80.221 -g
幾點說明一下:
-C:清除虛擬內核服務器表中記錄
-A: 添加虛擬服務器
-s:使用的調度算法,有這樣幾個選項rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是:wlc
-a:-add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器
-r: 真實的服務器
-g:--gatewaying 指定LVS 的工做模式爲直接路由模式(也是LVS 默認的模式)
3.配置物理Redis服務器
添加sh腳本,腳本內容以下:
VIP = 10.8.80.200
/etc/rc.d/init.d/functions case $1 in start) echo "Start Realserver"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up 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 ;; stop) echo "Stop Realserver"
/sbin/ifconfig lo:0 down 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 "Usage: $0 (start | stop)" exit 1 esac
而後使用sh命令執行。
4.在Master和Backup上啓動keepalived:
cd /etc/init.d/keepalived ./keepalived start
啓動redis客戶端,輸入ipvsadm -L --stats 查看調用狀況