進入服務器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