Redis集羣+twemproxy+keepalived的安裝指南(3)-keepalived的安裝

進入服務器192.168.1.149(主服務器)

cd/home/zhuhaiquan/

tarxvf keepalived-1.2.15.tar.gz

cdkeepalived-1.2.15

./configure

make&&makeinstall

 

注:若這裏報錯提示沒有裝openssl,則執行yum –y install openssl-devel安裝,若還有其他的包沒裝,則執行yum命令進行安裝 或 採用rpm安裝

cp/usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir/etc/keepalived

cp/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

 ln -s /usr/local/sbin/keepalived /usr/sbin/

vi/etc/keepalived/keepalived.conf

將內容改爲如下

!Configuration File for keepalived

 

vrrp_scriptchk_nutcracker {

   script"/etc/keepalived/check_nutcracker.sh"

   #script"</dev/tcp/127.0.0.1/22111" #監測nutcraker是否正常

   interval 2

}

global_defs{

       router_id LVS_DEVEL

}

vrrp_instanceVI_1 {

       state BACKUP

       interface eth0

       virtual_router_id 51

       priority 120

       advert_int 1

       authentication {

              auth_typePASS

              auth_pass1111

       }

       track_script {

              chk_nutcracker

       }

       virtual_ipaddress {

              192.168.1.189

       }

}

保存

vi /etc/keepalived/check_nutcracker.sh

添加內容

#!/bin/bash

#A= `ps -C haproxy --no-header |wc -l`

if[[ `ps -C nutcracker --no-header |wc -l` -eq 0 ]];

then

echo"nutcracker not runing,attempt to start up."

/usr/local/nutcracker/bin/nutcracker-c -d /usr/local/nutcracker/conf/nutcracker.yml

sleep3

if[[ `ps -C nutcracker --no-header |wc -l` -eq 0 ]];

then

/etc/init.d/keepalivedstop

echo"nutcracker start failure,stop keepalived"

else

echo"nutcracker started success"

fi

fi

 

進入服務器192.168.1.150(備服務器)

cd/home/zhuhaiquan/

tarxvf keepalived-1.2.15.tar.gz

cdkeepalived-1.2.15

./configure

make&&makeinstall

 

注:若這裏報錯提示沒有裝openssl,則執行yum –y install openssl-devel安裝,若還有其他的包沒裝,則執行yum命令進行安裝

cp/usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived 

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 

ln -s /usr/local/sbin/keepalived /usr/sbin/ 

vi /etc/keepalived/keepalived.conf 

將內容改爲如下

!Configuration File for keepalived

vrrp_scriptchk_nutcracker {

   script "/etc/keepalived/check_nutcracker.sh"

   #script"</dev/tcp/127.0.0.1/22111" #監測nutcraker是否正常

   interval 2

}

global_defs{

       router_id LVS_DEVEL

}

vrrp_instanceVI_1 {

       state BACKUP

       interface eth0

       virtual_router_id 51

       priority 100

       advert_int 1

       authentication {

              auth_typePASS

              auth_pass1111

       }

       track_script {

              chk_nutcracker

       }

       virtual_ipaddress {

              192.168.1.189

       }

}

保存

vi /etc/keepalived/check_nutcracker.sh

添加內容

#!/bin/bash

#A= `ps -C haproxy --no-header |wc -l`

if[[ `ps -C nutcracker --no-header |wc -l` -eq 0 ]];

then

echo"nutcracker not runing,attempt to start up."

/usr/local/nutcracker/bin/nutcracker-c -d /usr/local/nutcracker/conf/nutcracker.yml

sleep3

if[[ `ps -C nutcracker --no-header |wc -l` -eq 0 ]];

then

/etc/init.d/keepalivedstop

echo"nutcracker start failure,stop keepalived"

else

echo"nutcracker started success"

fi

fi

 

給檢測腳本賦權:

chmoda+x /etc/keepalived/check_nutcracker.sh

 

Tips:

查看keepalived的切換日誌: tail -f /var/log/messages

在配置keepalived時,需要將twemproxy中的listen設爲0.0.0.0:port,如果設置爲IP:PORT時,當keepalived掛掉時,無法進行切換。

常見問題

1、安裝Redis時遇到的問題

(1)編譯redis時 提示make cc Command not found

 在linux系統上對redis源碼進行編譯時提示提示“makecc Command not found,make: *** [adlist.o] Error 127”

原因分析:由於系統沒有gcc環境,需要安裝gcc相關的包

 

 

2、安裝Twemproxy遇到的問題

 

遇到問題:

報錯:

[zhuhaiquan@localhost git-master]$ make&& make install

   GEN perl/PM.stamp

   SUBDIR perl

/usr/bin/perl Makefile.PLPREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'

Can't locate ExtUtils/MakeMaker.pm in @INC(@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5/usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/usr/share/perl5 .) at Makefile.PL line 3.

BEGIN failed--compilation aborted atMakefile.PL line 3.

make[1]: *** [perl.mak] Error 2

make: *** [perl/perl.mak] Error 2

yum install perl-ExtUtils-MakeMaker package

 

 

[root@localhost rpm]# rpm -ivhperl-devel-5.10.1-136.el6.i686.rpmperl-ExtUtils-MakeMaker-6.55-136.el6.i686.rpmperl-ExtUtils-ParseXS-2.2003.0-136.el6.i686.rpmperl-Test-Harness-3.17-136.el6.i686.rpm

warning:perl-devel-5.10.1-136.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key IDfd431d51: NOKEY

Preparing...               ########################################### [100%]

  1:perl-ExtUtils-ParseXS ########################################### [ 25%]

  2:perl-ExtUtils-MakeMaker########################################### [50%]

  3:perl-devel            ########################################### [ 75%]

  4:perl-Test-Harness     ########################################### [100%]

這幾個需同時安裝,相互依賴

 

 

 

3、驗證連接時遇到的問題:

(1)telnet command not found

 

解決方法:安裝telnet相關包就OK

 

(2)在129上連接到128時(telnet192.168.189.128 6379)報如下錯誤


解決方法:

在目標機器上執行:iptables -F 可解決此問題,但機器重啓之後依然需執行一次,具體解決方案有待研究

 

 

4、在虛擬機上安裝了twemproxy,使用的是nutcracker-0.2.2.tar。配置文件如下:

redis:

 listen: 192.168.189.128:22111

hash: fnv1a_64

 distribution: ketama

 redis: true

 auto_eject_hosts: true

 server_retry_timeout: 3000

 server_failure_limit: 3

 servers:

   -192.168.189.128:6379:1

   -192.168.189.129:6379:1

兩個redis都啓動時,服務正常。當我把192.168.189.128:6379停掉時,該服務節點不自動摘除,執行set命令時一直有服務拒絕的命令(通過Jedis調用的時候總是連接到停掉的服務上,導致不可用)

(error) ERR Connection refused

當我把故障的redis恢復後,發現服務正常了。

解決方法:

server_retry_timeout:3000

server_failure_limit:3

Twemproxy默認的配置爲server_retry_timeout: 3000,server_failure_limit: 3

第一個retry的間隔時間要拉長,不然你的nutcracker一直在重試連接,自然一直摘不掉機器;第二個容忍的錯誤數可以設置成0容忍,就是說有錯誤立馬摘掉這個機器,參數值應爲:

server_retry_timeout: 3000000(發現故障後,恢復連接間隔時間)

    server_failure_limit: 0

修改後,再重新驗證,已OK,停掉後會連接到正常的機器。

 

參考:

http://www.oschina.net/question/1048263_109927

http://www.oschina.net/translate/twemproxy-a-twitter-redis-proxy?p=1#rpl_4525

 

 

5、Redis設置內存大小

# maxmemory <bytes>

 

#達到最大內存限制時,使用何種刪除算法

# volatile-lru  使用LRU算法移除帶有過期標緻的key

# allkeys-lru -> 使用LRU算法移除任何key

# volatile-random -> 隨機移除一個帶有過期標緻的key

# allkeys-random ->  隨機移除一個key

# volatile-ttl -> 移除最近要過期的key

# noeviction -> 不刪除key,當有寫請求時,返回錯誤

#默認設置爲volatile-lru

# maxmemory-policy volatile-lru

 

查看Redis內存等使用情況:可以通過info查看

 

 

6、設置maxmemory 1048576 , maxmemory-policy volatile-lru ,當緩存的大小超過1048576 時,JedisDataException: OOM command not allowed when used memory >'maxmemory'.

 

解決方法:

原因是由於緩存的數據大於最大緩存的大小,此時需配置上lru策略,如allkeys-lru

經驗證,不會出現上述錯誤,最終配置如下:

maxmemory 1048576

maxmemory-policy allkeys-lru

 

 

7、如何讓redis只當緩存使用,而不持久化操作

(1)配置RDB的配置

save "",並註釋掉默認的save相關配置

(2)AOF相關配置

appendonly no

 

遺留問題:

1、Redis增加、刪除節點時的緩存權重問題

參考資料

twemproxy參考資料:

http://www.bubuko.com/infodetail-265209.html

http://blog.mkfree.com/posts/515bce9d975a30cc561dc360

http://sdwang.blog.51cto.com/8432181/1597901/

http://blog.chinaunix.net/uid-16728139-id-4385973.html

http://www.cnblogs.com/haoxinyue/p/redis.html

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=314622

 

keepalived參考資料:

http://www.tuicool.com/articles/Vz2qYj

http://www.iyunv.com/thread-39985-1-1.html

http://bbs.ywlm.net/thread-845-1-1.html

http://bbs.nanjimao.com/thread-855-1-1.html

http://www.micmiu.com/enterprise-app/server/keepalived-hot-standby/

http://bylijinnan.iteye.com/blog/2175191



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章