转载:https://www.cnblogs.com/lianggp/articles/8136222.html
前言
redis集群对于很多人来说非常熟悉,在前些日子,我也有一位大兄弟也发布过一篇关于在阿里云(centOS7)上搭建redis 集群的文章,虽然集群搭建的文章在网上很多,我比较喜欢这篇文章的地方是他在搭建过程中,指出一些我们会遇到而别人没有指出的问题。
在这里,我同样带给大家一遍关于阿里云(centOS7)redis集群搭建的文章,但是这次搭建有所不同的是,它是在docker上搭建的redis集群。
准备工具
一、安装docker(来自官网)
1、安装所需的软件包
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2、使用以下命令来设置稳定的存储库。
$ sudo yum-config-manager \
–add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker ce(docker社区版)
$ sudo yum install docker-ce
4、启动docker
$ sudo systemctl start docker
二、在docker库获取redis镜像(截至2017-12-28,最新版为4.0.6)
$ docker pull redis
三、在docker库获取ruby镜像
$ docker pull ruby
至此,docker上redis cluster所有工具准备完毕,我们在命令行上输入docker images,就可以查看到已经安装的镜像(注:mysql和nginx是无关本教程的)
搭建
一、创建redis容器
1、创建redis配置文件(redis-cluster.tmpl)
我在路径/home下创建一个文件夹redis-cluster,在路径/home/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。(注:路径可自定义,我用的是/home/redis-cluster)
复制代码
port
PORTprotected−modenocluster−enabledyescluster−config−filenodes.confcluster−node−timeout5000cluster−announce−ip39.10X.XX.XX//自己服务器IPcluster−announce−port
P
O
R
T
p
r
o
t
e
c
t
e
d
−
m
o
d
e
n
o
c
l
u
s
t
e
r
−
e
n
a
b
l
e
d
y
e
s
c
l
u
s
t
e
r
−
c
o
n
f
i
g
−
f
i
l
e
n
o
d
e
s
.
c
o
n
f
c
l
u
s
t
e
r
−
n
o
d
e
−
t
i
m
e
o
u
t
5000
c
l
u
s
t
e
r
−
a
n
n
o
u
n
c
e
−
i
p
39.10
X
.
X
X
.
X
X
/
/
自
己
服
务
器
I
P
c
l
u
s
t
e
r
−
a
n
n
o
u
n
c
e
−
p
o
r
t
{PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
复制代码
通过命令,可查看
$ cat /home/redis-cluster/redis-cluster.tmpl
2、创建自定义network
$ docker network create redis-net
3、在/home/redis-cluster下生成conf和data目标,并生成配置信息
$ for port in seq 7000 7005
; do \
mkdir -p ./{port}/conf \
&& PORT=
{port}/conf \ && PORT=
{port} envsubst < ./redis-cluster.tmpl > ./{port}/conf/redis.conf \
&& mkdir -p ./
{port}/conf/redis.conf \ && mkdir -p ./
{port}/data; \
done
共生成6个文件夹,从7000到7005,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件
4、创建6个redis容器
复制代码
$ for port in seq 7000 7005
; do \
docker run -d -ti -p
port:
p
o
r
t
:
{port} -p 1
port:1
p
o
r
t
:
1
{port} \
-v /home/redis-cluster/
port/conf/redis.conf:/usr/local/etc/redis/redis.conf −v/home/redis−cluster/
p
o
r
t
/
c
o
n
f
/
r
e
d
i
s
.
c
o
n
f
:
/
u
s
r
/
l
o
c
a
l
/
e
t
c
/
r
e
d
i
s
/
r
e
d
i
s
.
c
o
n
f
−
v
/
h
o
m
e
/
r
e
d
i
s
−
c
l
u
s
t
e
r
/
{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
复制代码
至此,通过命令docker ps可查看刚刚生成的6个容器信息
二、集群
通过启动ruby来实现集群
复制代码
$ echo yes | 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 “
(dockerinspect−−format′(index.NetworkSettings.Networks"redis−net").IPAddress′"redis−
(
d
o
c
k
e
r
i
n
s
p
e
c
t
−
−
f
o
r
m
a
t
′
(
i
n
d
e
x
.
N
e
t
w
o
r
k
S
e
t
t
i
n
g
s
.
N
e
t
w
o
r
k
s
"
r
e
d
i
s
−
n
e
t
"
)
.
I
P
A
d
d
r
e
s
s
′
"
r
e
d
i
s
−
{port}”)”:${port} ’ ’ ; \
done)”
复制代码
输入命令后,可以得到下面的信息说明集群成功了
注意点
1、注意redis配置信息的路径
2、以上的代码都是centOS命令行上输入的
3、阿里云上要添加安全组,除了7000-7005端口,还要开放17000-17005端口