實驗環境html
OS:CentOS 6.5 x64node
軟件版本:c++
nutcracker-0.4.0git
keepalived-1.2.13github
redis-2.8.18web
主機:redis
twemproxy VIP(keepalived): 192.168.8.100vim
twemproxy_01+keepalive-master: 192.168.8.80,192.168.7.70後端
twemproxy_02+keepalive-backup: 192.168.8.81,192.168.7.71bash
redis_01: 192.168.7.100
redis_02: 192.168.7.200
[root@redis_01 ~]# yum -y install gcc gcc-c++ make tcl-devel
[root@redis_01 ~]# tar -xvf redis-2.8.18.tar.gz -C /usr/local/src/
[root@redis_01 ~]# cd /usr/local/src/redis-2.8.18/
[root@redis_01 redis-2.8.18]# make && make install
[root@redis_01 redis-2.8.18]# cd utils/
[root@redis_01 utils]# ls
build-static-symbols.tcl
generate-command-help.rb
hyperloglog
install_server.sh
[root@redis_01 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port
Config file
Log file
Data dir
Executable
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
默認的話,一路回車便可。init腳本會自動生成
[root@redis_01 utils]# mv /etc/init.d/redis_6379 /etc/init.d/redis
[root@redis_01 utils]# /etc/init.d/redis status
Redis is running (4796)
[root@redis_01 utils]# /etc/init.d/redis restart
Stopping ...
Redis stopped
Starting Redis server...
[root@redis_01 utils]# chkconfig --add redis
[root@redis_01 utils]# chkconfig redis on
[root@redis_01 utils]# chkconfig --list redis
redis_6379
[root@redis_01 utils]# netstat -tunlp|grep redis
tcp
能夠看到,redis己成功運行並監聽在6379端口上。
對於redis_02,做爲redis_01的Slave須要在redis配置文件中指定Master主機
slaveof 192.168.8.81 6379
補充:
能夠置客戶端訪問密碼
Master配置文件中加入
requirepass test123
Slave配置文件中加入
requirepass test123
masterauth test123
Twitter開源的c版本proxy,用來代理後端的redis和memcached
[root@twemproxy_01 ~]#wget https://github.com/twitter/twemproxy/archive/master.zip -O twemproxy-master.zip
[root@twemproxy_01 ~]#yum -y install gcc gcc-c++ autoconf automake libtool
[root@twemproxy_01 ~]# rpm -e autoconf --nodeps
twemproxy要求autoconf>=2.64,而CentOS6.5 x64默認自帶的爲2.63,因此必需更新。
[root@twemproxy_01 ~]# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
[root@twemproxy_01 ~]# tar -xvf autoconf-2.69.tar.xz -C /usr/local/src/
[root@twemproxy_01 ~]# cd /usr/local/src/autoconf-2.69/
root@jun-live:autoconf-2.69#./configure && make && make install
[root@twemproxy_01 ~]# ln -s /usr/local/bin/autoconf /usr/bin/
[root@twemproxy_01 ~]# ln -s /usr/local/bin/autoreconf /usr/bin/
[root@twemproxy_01 ~]# autoconf --version
autoconf (GNU Autoconf) 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
,
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David J. MacKenzie and Akim Demaille.
[root@twemproxy_01 ~]# cd /usr/local/src/
[root@twemproxy_01 src]# unzip /root/twemproxy-master.zip
[root@twemproxy_01 ~]# cd /usr/local/src/twemproxy-master
[root@twemproxy_01 twemproxy-master]# autoreconf -fvi
[root@twemproxy_01 twemproxy-master]# ./configure --enable-debug=log && make && make install
[root@twemproxy_01 twemproxy-master]# cd /usr/local/src/twemproxy-master/scripts
[root@twemproxy_01 scripts]# cp nutcracker.init /etc/init.d/nutcracker
[root@twemproxy_01 scripts]# chmod 755 /etc/init.d/nutcracker[root@twemproxy_01 ~]# chkconfig --add nutcracker
[root@twemproxy_01 ~]# chkconfig nutcracker on
[root@twemproxy_01 ~]# chkconfig --list nutcracker
nutcracker
[root@twemproxy_01 twemproxy-master]# cp conf/nutcracker.yml /etc/nutcracker
[root@twemproxy_01 ~]# cd /etc/nutcracker/
[root@twemproxy_01 nutcracker]# vim nutcracker.yml
alpha:
能夠將配置文件copy到twemproxy_02上便可
說明:由於client最終經過VIP來訪問,因此這裏nutcracker監聽全部接口
指定日誌文件位置,方便排錯
[root@twemproxy_01 scripts]# vim /etc/init.d/nutcracker
OPTIONS="-d -c /etc/nutcracker/nutcracker.yml -o /var/log/twemproxy/nutcracker.log"
[root@twemproxy_01 ~]# /etc/init.d/nutcracker restart
Stopping nutcracker: [
Starting nutcracker: [
[root@twemproxy_01 ~]# netstat -tunlp|grep nutcracker
tcp
tcp
若是大批量部署,能夠編譯rpm包
[root@twemproxy_01 ~]# yum -y install rpm-build
[root@twemproxy_01 ~]# unzip twemproxy-master.zip
[root@twemproxy_01 ~]# cp twemproxy-master/scripts/nutcracker.spec .
[root@twemproxy_01 ~]# mv twemproxy-master nutcracker-0.4.0
[root@twemproxy_01 SOURCES]# tar -zcvf nutcracker-0.4.0.tar.gz nutcracker-0.4.0/
[root@twemproxy_01 ~]# ls
nutcracker-0.4.0
必要時能夠修改nutcracker.spec以解決依賴關係等
Version: 0.4.0
BuildRequires: autoconf
[root@twemproxy_01 ~]# rpmbuild -ba nutcracker.spec
error: File /root/rpmbuild/SOURCES/nutcracker-0.4.0.tar.gz: No such file or directory
[root@twemproxy_01 ~]# cp nutcracker-0.4.0.tar.gz rpmbuild/SOURCES/
[root@twemproxy_01 ~]# rpmbuild -ba nutcracker.spec
[root@twemproxy_01 ~]# rpm -ivh rpmbuild/RPMS/x86_64/nutcracker-0.4.0-1.x86_64.rpm
Preparing...
########################################### [100%]
[root@twemproxy_01 ~]#yum –y install kernel-devel gcc openssl-devel popt-devel libnl-devel net-snmp-devel
[root@twemproxy_01 ~]#tar -xvf keepalived-1.2.13.tar.gz -C /usr/local/src
[root@twemproxy_01 ~]#cd /usr/local/src/keepalived-1.2.13
[root@twemproxy_01 ~]#./configure \
--prefix=/usr \
--sysconf=/etc \
--with-kernel-dir=/usr/src/kernels/$(uname -r) \
--enable-snmp \
--enable-sha1
標紅的部分必定要有,不然不能編譯成功
[root@twemproxy_01 ~]#make && make install
[root@twemproxy_01 ~]#cp /usr/local/src/keepalived-1.2.13/keepalived/etc/init.d/keepalived.init /etc/rc.d/rc3.d/S99keepalived
[root@twemproxy_01 ~]# cp /usr/local/src/keepalived-1.2.13/keepalived/etc/init.d/keepalived.init /etc/rc.d/rc5.d/S99keepalived
[root@twemproxy_01 ~]#chkconfig keepalived on
[root@twemproxy_01 ~]# chkconfig --list keepalived
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@twemproxy_01 keepalived]# pwd
/etc/keepalived
[root@twemproxy_01 keepalived]# mkdir scripts
[root@twemproxy_01 keepalived]# vim scripts/twemproxy_check.sh
[root@twemproxy_01 keepalived]# chmod +x scripts/twemproxy_check.sh
############################################
#!/bin/bash
#To install check twemproxy status automatically
#Made by liujun,2014/12/31
############################################
#Define system environment PATH
export PATH=$PATH
flag=$(pidof nutcracker)
if [ "$flag" == "" ];then
fi
[root@twemproxy_01 keepalived]# vim keepalived.conf
! Configuration File for keepalived
vrrp_script twemproxy_check {
}
vrrp_instance VI_1 {
}
[root@twemproxy_01 keepalived]# /etc/init.d/keepalived restart
Stopping keepalived:
Starting keepalived:
搞定,己經能夠經過VIP192.168.8.100來訪問後端的redis了,如今的VIP在twemproxy_01上面
[root@twemproxy_01 keepalived]# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
再配置twemproxy_02,直接將keepalived.conf和twemproxy_check.sh腳本copy到twemproxy_02對應的目錄,修改keepalived.conf中的如下兩行,使twemproxy_02做爲twemproxy_01的BACKUP
state BACKUP
priority 50
一.測試nutcracker是否生效
twemproxy_01
root@jun-live:~#redis-cli
192.168.8.80:22121> help
redis-cli 2.8.18
Type: "help @" to get a list of commands in
192.168.8.80:22121> quit
twemproxy_02
root@jun-live:~#redis-cli
192.168.8.81:22121> help
redis-cli 2.8.18
Type: "help @" to get a list of commands in
192.168.8.81:22121> quit
[root@twemproxy_01 ~]# /etc/init.d/nutcracker stop
Stopping nutcracker: [
[root@twemproxy_01 ~]# /etc/init.d/nutcracker status
nutcracker (pid 5448) is running...
發現,健康檢查腳本會每隔2秒鐘檢查一次,若是nutcracker沒有進程號則經過管控腳本啓動,再等3秒鐘,若是仍是沒有啓動,則中止keepalived讓BACKUP來接管。說明keepalive在持續監控nutcracker的健康狀態
[root@twemproxy_01 ~]# /etc/init.d/keepalived stop
Stopping keepalived: [
[root@twemproxy_01 ~]# tail -f /var/log/messages
Dec 31 09:25:59 twemproxy_01 Keepalived[1144]: Stopping Keepalived v1.2.13 (12/20,2014)
Dec 31 09:25:59 twemproxy_01 Keepalived_vrrp[1146]: VRRP_Instance(VI_1) sending 0 priority
Dec 31 09:25:59 twemproxy_01 Keepalived_vrrp[1146]: VRRP_Instance(VI_1) removing protocol VIPs.
能夠看到,VIP從MASTER節點上被移除,而飄到了BACKUP節點
[root@twemproxy_02 ~]# tail -f /var/log/messages
Dec 31 09:25:59 twemproxy_02 Keepalived_vrrp[1153]: VRRP_Instance(VI_1) Transition to MASTER STATE
Dec 31 09:26:00 twemproxy_02 Keepalived_vrrp[1153]: VRRP_Instance(VI_1) Entering MASTER STATE
Dec 31 09:26:00 twemproxy_02 Keepalived_vrrp[1153]: VRRP_Instance(VI_1) setting protocol VIPs.
Dec 31 09:26:00 twemproxy_02 Keepalived_healthcheckers[1152]: Netlink reflector reports IP 192.168.8.100 added
Dec 31 09:26:00 twemproxy_02 Keepalived_vrrp[1153]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Dec 31 09:26:05 twemproxy_02 Keepalived_vrrp[1153]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
[root@twemproxy_02 ~]# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
2: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
3: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
[root@twemproxy_01 ~]# /etc/init.d/keepalived start
Starting keepalived: [
Dec 31 09:39:15 twemproxy_01 Keepalived[6048]: Starting Keepalived v1.2.13 (12/20,2014)
Dec 31 09:39:15 twemproxy_01 Keepalived[6049]: Starting Healthcheck child process, pid=6050
Dec 31 09:39:15 twemproxy_01 Keepalived[6049]: Starting VRRP child process, pid=6052
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Netlink reflector reports IP 192.168.8.80 added
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Netlink reflector reports IP 192.168.7.70 added
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Netlink reflector reports IP 192.168.8.80 added
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Netlink reflector reports IP 192.168.7.70 added
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Registering Kernel netlink reflector
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Registering Kernel netlink command channel
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Registering gratuitous ARP shared channel
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Netlink reflector reports IP 192.168.8.80 added
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Netlink reflector reports IP 192.168.7.70 added
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Netlink reflector reports IP 192.168.8.80 added
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Netlink reflector reports IP 192.168.7.70 added
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Registering Kernel netlink reflector
Dec 31 09:39:15 twemproxy_01 Keepalived_healthcheckers[6050]: Registering Kernel netlink command channel
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Configuration is using : 63284 Bytes
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: Using LinkWatch kernel netlink reflector...
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Script(twemproxy_check) succeeded
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) Transition to MASTER STATE
Dec 31 09:39:15 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Dec 31 09:39:16 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) Entering MASTER STATE
Dec 31 09:39:16 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) setting protocol VIPs.
Dec 31 09:39:16 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Dec 31 09:39:20 twemproxy_01 Keepalived_healthcheckers[6050]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 31 09:39:20 twemproxy_01 Keepalived_healthcheckers[6050]: Configuration is using : 5568 Bytes
Dec 31 09:39:20 twemproxy_01 Keepalived_healthcheckers[6050]: Using LinkWatch kernel netlink reflector...
Dec 31 09:39:20 twemproxy_01 Keepalived_healthcheckers[6050]: Netlink reflector reports IP 192.168.8.100 added
Dec 31 09:39:21 twemproxy_01 Keepalived_vrrp[6052]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
由於優先級比BACKUP高,因此VIP又飄了回來。
ok,實驗結束。