使用Docker搭建Redis集群的脚本
###仅用于学习使用,脚本内使用的是docker,但是都在一台机器上,所以说严格意义上讲不算集群(原谅我没有服务器。。。),但是很容易的也是因为docker,有多台服务器时,只需要将相应的节点镜像迁移至其他服务即可(这也正是docker带来的方便之处)。话不多说,直接上脚本
执行命令:bash create-redis.sh 192.X.X.X
#!/bin/bash
set -x
IPHOST=$1
mkdir redis-cluster
cd redis-cluster
sudo docker pull redis
sudo docker pull ruby
touch redis-cluster.tmpl
echo 'port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip #_IPHOST_#
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes' >> redis-cluster.tmpl
sed -i 's@#_IPHOST_#@'${IPHOST}'@g' redis-cluster.tmpl
sudo docker network create redis-net
#check container
ids=`sudo docker ps -a | grep redis- | awk -F ' ' '{print $1}'`
for id in ${ids};
do
sudo docker rm -f ${id};
done
for port in `seq 7000 7005`;
do
mkdir -p ./${port}/conf;
PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf ;
mkdir -p ./${port}/data;
done
for port in `seq 7000 7005`;
do
sudo docker run -d -ti \
-p ${port}:${port} -p 1${port}:1${port} \
-v ~/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v ~/redis-cluster/${port}/data:/data \
--restart always \
--name redis-${port} \
--net redis-net \
--sysctl net.core.somaxconn=1024 \
redis redis-server /usr/local/etc/redis/redis.conf;
done
echo yes | sudo docker run -i --rm --net redis-net ruby sh -c '\
gem install redis && wget http://download.redis.io/redis-stable/src/redis-trib.rb && ruby redis-trib.rb create --replicas 1 \
'"$( \
for port in `seq 7000 7005`; \
do \
echo \
-n "$(sudo docker inspect \
--format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
done)"