redis3.0集群安装脚本及其测试高可用

#!/bin/bash

#created by liuyi(刀戈) on 2015-11-16
#安装包存放目录
software=/work/soft/redis/software
#redis的安装二进制目录 /work/soft/redis/bin/redis-*
redis=/work/soft/redis
#redis 配置目录
conf=/work/soft/redis/conf
#redis 日志目录
logs=/work/soft/redis/logs
redisData=/work/soft/redis/data
redisSrc=$software/redis-stable/src
#######dir tree##########
#--redis
#	--bin
#	--conf	
#		--redis-common.conf
#		--xxxx.conf

#检查目录
if [ ! -e $software ]; then
        mkdir -p $software
fi
if [ ! -d $redis ];then
	mkdir -p $redis
fi
if [ ! -d $conf ];then
	mkdir -p $conf
fi
if [ ! -d $logs ];then
	mkdir $logs
fi
if [ ! -d $redisData ];then
	mkdir $redisData
fi
yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm  
yum -y install jemalloc gcc gcc-c++ wget

#==================================install rybu===========================
if [ ! -f "/usr/bin/ruby" ];then
	yum -y install ruby
fi 

if [ ! -d "/usr/local/share/gems/gems/redis-3.2.1" ];then
	gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
	gem install redis
fi

#===================================install redis ============================
function redis(){
cd $software
if [ ! -f "redis-stable.tar.gz" ];then
wget http://download.redis.io/releases/redis-stable.tar.gz
fi

if [ ! -f "redis-stable.tar.gz" ];then
echo "download redis faild .."
fi
tar xf redis-stable.tar.gz
cd redis-stable
make PREFIX=$redis  install
echo " install redis success!! redis install to $redis"
}

if [ ! -f "$redis/bin/redis-server" ];then
	redis
fi
#+===================================== redis commog file====================================
function common_file(){
	echo -e daemonize yes > $conf/redis-common.conf
	echo -e "cluster-enabled yes" >> $conf/redis-common.conf
 	echo -e cluster-node-timeout 15000 >> $conf/redis-common.conf
 	echo -e cluster-migration-barrier 1 >> $conf/redis-common.conf
 	echo -e tcp-keepalive 0 >> $conf/redis-common.conf
 	echo -e loglevel notice >> $conf/redis-common.conf
 	echo -e dir $redisData >> $conf/redis-common.conf
 	echo -e slave-serve-stale-data yes >> $conf/redis-common.conf
 	echo -e slave-read-only yes >> $conf/redis-common.conf
 	echo -e repl-disable-tcp-nodelay yes >> $conf/redis-common.conf
 	echo -e slave-priority 100 >> $conf/redis-common.conf
 	echo -e appendonly yes >> $conf/redis-common.conf
 	echo -e appendfsync everysec >> $conf/redis-common.conf
 	echo -e no-appendfsync-on-rewrite yes >> $conf/redis-common.conf
 	echo -e auto-aof-rewrite-min-size 64mb >> $conf/redis-common.conf
 	echo -e lua-time-limit 5000 >> $conf/redis-common.conf
 	echo -e slowlog-log-slower-than 10000 >> $conf/redis-common.conf
 	echo -e slowlog-max-len 128 >> $conf/redis-common.conf
 	echo -e hash-max-ziplist-entries 512 >> $conf/redis-common.conf
 	echo -e hash-max-ziplist-value 64 >> $conf/redis-common.conf
 	echo -e list-max-ziplist-entries 512 >> $conf/redis-common.conf
 	echo -e list-max-ziplist-value 64 >> $conf/redis-common.conf
 	echo -e set-max-intset-entries 512 >> $conf/redis-common.conf
 	echo -e zset-max-ziplist-entries 128 >> $conf/redis-common.conf
 	echo -e zset-max-ziplist-value 64 >> $conf/redis-common.conf
 	echo -e activerehashing yes >> $conf/redis-common.conf
 	echo -e client-output-buffer-limit normal 0 0 0 >> $conf/redis-common.conf
 	echo -e client-output-buffer-limit slave 256mb 64mb 60 >> $conf/redis-common.conf
 	echo -e client-output-buffer-limit pubsub 32mb 8mb 60 >> $conf/redis-common.conf
 	echo -e aof-rewrite-incremental-fsync yes >> $conf/redis-common.conf

}
if [ ! -f "$conf/redis-common.conf" ];then
	common_file
fi
#+===================================== redis node file====================================
function node_file(){
	for no in $(seq -w 7001 7006)
	do
		echo -e include $conf/redis-common.conf > "$conf/$no.conf"
		echo -e port $no >> "$conf/$no.conf"
		echo -e logfile $logs/$no.log >> "$conf/$no.conf"
		echo -e maxmemory 400m >> "$conf/$no.conf"
		echo -e maxmemory-policy allkeys-lru >> "$conf/$no.conf"
		echo -e appendfilename appendonly-$no.aof  >> "$conf/$no.conf"
		echo -e dbfilename dump-$no.rdb  >> "$conf/$no.conf"
		echo -e cluster-config-file node-$no.conf >> "$conf/$no.conf"
		echo -e auto-aof-rewrite-percentage 80-100 >> "$conf/$no.conf"
	done

}
if [ ! -f "$conf/7001.conf" ];then
node_file
fi

function started(){
	for no in $(seq -w 7001 7006) 
	do
	echo " $redis/bin/redis-server $conf/$no.conf"
	$redis/bin/redis-server $conf/$no.conf
	done
}

function stoped(){
	for pid in $(ps -ef | grep redis | grep 700*| awk '{print $2}')
	do
	kill $pid
	done
}

function init(){
	echo "init redis cluster "
	$redisSrc/redis-trib.rb  create --replicas 1 192.168.150.129:7006 192.168.150.1297001 192.168.150.129:7002 192.168.150.129:7003 192.168.150.129:7004 192.168.150.129:7005
	
}

function usafe(){
	echo -e "Usafe $0 palse in :"
	echo -e "[started] started redis cluster"
	echo -e "[stoped] stop all redis cluster"
	echo -e "[rcf] reset $redis/redis-common.conf"
	echo -e "[nodefile] reset all node conf"
	echo -e "[init] init redis cluser"
}

case $1 in
	started) started;;
	stoped) stoped;;
	rcf) common_file;;
	nodefile) node_file;;
	init) init;;
	*) usafe;;
esac
#setup 1 xxx.sh started 这里会安装相关依赖和redis 安装完成之后执行启动命令 启动集群的每一个节点
#setup 2 xxx.sh init 使用ruby的脚本初始化集群
高可用测试代码
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
for (int i = 1; i <= 6; i++) {
    jedisClusterNodes.add(new HostAndPort("192.168.150.129", 7000 + i));
}
JedisCluster jc = new JedisCluster(jedisClusterNodes);
int i = 1;
for (; ; ) {
    try {
        i++;
        long start = System.currentTimeMillis();
        jc.set("k:", "v" + i);
        System.out.print("set " + i + "th value in " + (System.currentTimeMillis() - start) + " ms");
        start = System.currentTimeMillis();
        jc.get("k:" + i);
        System.out.println(", get " + i + "th value in " + (System.currentTimeMillis() - start) + " ms");
        Thread.sleep(10);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
运行中关掉redis 2台 正常运行 关掉3台不可用 重启redis后正常运行


你可能感兴趣的:(redis集群)