在测试环境搭建三个主节点,三个从节点的redis集群。三台服务器,操作系统:centos7,redis版本:3.2.0。
每台机器上有两个节点,一个主节点,一个从节点,所以每台机器上需要redis占用两个端口启动,分别是6379、6380。
安装步骤:
- 第一步:登录其中一台机器(我登录的是cdh1),进入到安装目录(我的安装目录是 /appdata/tools,请修改为自己的安装目录)。
cd /appdata/tools/
- 第二步:使用下面的命令,下载redis压缩包,出现图1.2,下载成功。
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
- 第三步:使用如下命令,解压缩。
tar -zxvf redis-3.2.0.tar.gz
- 第四步:建立软链接。
ln -s redis-3.2.0 redis
- 第五步:进入到redis目录,编译,如图1.3。
cd redis
make
- 第六步:在redis目录下,新建目录,用来存放分布式redis的配置、节点信息、日志信息等文件。6379文件夹用来存放在本台机器上使用6379端口启动redis的相关文件,6380存放6380端口启动redis的相关文件。
mkdir cluster-conf
cd cluster-conf/
mkdir 6379
mkdir 6380
- 第七步:把配置文件copy到6379、6380文件夹下,并修改相关配置。
cp ../redis.conf 6379/
cp ../redis.conf 6380/
cd 6379
vim redis.conf
cd ../6380
vim redis.conf
6379文件夹下修改以下配置:
# 把127.0.0.1改为本机ip,否则不能远程访问,切记不可只注释,否则加入节点时,或出现地址无效的error
bind 192.168.1.11
# 端口号,默认6379,不用改变
port 6379
# 指定记录日志的文件
logfile "/appdata/tools/redis/cluster-conf/6379/redis.log"
# 该目录要事先创建好,相关数据会保存在这个目录
dir /appdata/tools/redis/cluster-conf/6379/
# 是否开启集群,默认被注释,应该打开注释
cluster-enabled yes
# 集群配置文件的名称,每个节点都会有一个此文件,这个文件会由reids自动生成
cluster-config-file nodes.conf
# 节点互连超时的阈值,毫秒
cluster-node-timeout 5000
# 默认redis使用的时rdb方式持久化,这种方式在许多应用中已经足够使用,
# 但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
# 根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
# redis会把每次写入的数据在接收后都写入appendonly.aof文件,
# 每次启动时redis都会先把这个文件的数据读入内存中,先忽略rdb文件
appendonly yes
6380文件夹下修改以下配置:
# 把127.0.0.1改为本机ip,否则不能远程访问,切记不可只注释,否则加入节点时,或出现地址无效的error
bind 192.168.1.11
# 端口号,默认6379,改为6380
port 6380
# 指定记录日志的文件
logfile "/appdata/tools/redis/cluster-conf/6380/redis.log"
# 该目录要事先创建好,相关数据会保存在这个目录
dir /appdata/tools/redis/cluster-conf/6380/
# 是否开启集群,默认被注释,应该打开注释
cluster-enabled yes
# 集群配置文件的名称,每个节点都会有一个此文件,这个文件会由reids自动生成
cluster-config-file nodes.conf
# 节点互连超时的阈值,毫秒
cluster-node-timeout 5000
# 默认redis使用的时rdb方式持久化,这种方式在许多应用中已经足够使用,
# 但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
# 根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
# redis会把每次写入的数据在接收后都写入appendonly.aof文件,
# 每次启动时redis都会先把这个文件的数据读入内存中,先忽略rdb文件
appendonly yes
- 第八步:把redis复制到另两台机器,如果没有配置免密登陆,需要输入密码。
cd /appdata/tools/
scp -r redis-3.2.0 root@cdh2:/appdata/tools/
scp -r redis-3.2.0 root@cdh3:/appdata/tools/
- 第九步:在另两台机器建立软链接,并修改配置文件中bind的ip地址。
# 建立软链接
cd /appdata/tools/
ln -s redis-3.2.0/ redis
# cdh2上两个配置文件都修改
bind 192.168.1.12
# cdh3上两个配置文件都修改
bind 192.168.1.13
- 第十步:启动三台机器上的六个redis,执行查看启动成功命令,出现如图1.9所示,启动成功。
# 在每台机器上执行
nohup /appdata/tools/redis-3.2.0/src/redis-server /appdata/tools/redis-3.2.0/cluster-conf/6379/redis.conf &
nohup /appdata/tools/redis-3.2.0/src/redis-server /appdata/tools/redis-3.2.0/cluster-conf/6380/redis.conf &
# 查看是否启动成功
ps -ef | grep redis
- 第十一步:安装gem,出现图1.10,安装成功。
yum install gem
- 第十二步:gem安装redis集群管理器,先把redis-3.2.2.gem(点击下载文件)上传到redis目录中,然后本地安装,出现如图1.12,安装成功。
# 本地安装
gem install -l redis-3.2.2.gem
# 检验安装成功
gem list
- 第十三步:把节点加入集群,出现如图1.14,加入成功。
src/redis-trib.rb create --replicas 1 192.168.1.11:6379 192.168.1.11:6380 192.168.1.12:6379 192.168.1.12:6380 192.168.1.13:6379 192.168.1.13:6380
遇到的问题:
- 在执行下面命令时,输入 yes ,遇到如下图2.1问题。
./src/redis-trib.rb create --replicas 1 192.168.1.11:6379 192.168.1.11:6380 192.168.1.12:6379 192.168.1.12:6380 192.168.1.13:6379 192.168.1.13:6380
原因:搭建集群前时,以前redis的旧数据和配置信息没有清理干净,或者是第一次把节点加入集群出错,第二次加入集群时,部分slot已经分配。
解决:执行命令
src/redis-cli -c -h cdh1 -p 6379
进入到集群的每个节点,执行命令 flushall 和 cluster reset,然后重新加入节点。