Linux系统搭建redis-cluster集群案例
- (一)redis下载及安装
- 【1】前言介绍
- 【2】redis下载以及安装
- (1)首先要进入Linux系统的根目录
- (2)安装redis所需的环境
- (3)下载redis源码包
- (4)解压redis到根目录下
- (5)安装redis
- (6)拷贝配置文件 并修改
- (7)启动并操作
- (二)集群搭建-三主三从
- 【1】复制配置文件
- (1)在redis-cluster目录下创建多个文件7002-7008
- (2)开始复制配置好的7001文件夹下的文件
- (3)修改配置文件的端口
- 【2】创建启动脚本进行启动
- (1)创建启动文件
- (2)启动文件start.sh的内容
- (3)给启动文件授权
- (4)启动
- (5)查看启动后的线程
- 【3】创建Redis集群(创建时Redis里不要有数据)
- (1)创建redis集群
- (2)槽位分配的原理
- 【4】客户端连接集群并使用
- (1)以redis集群方式进行连接
- (2)查看集群状态
- (3)查看集群中的节点
- (4)添加数据并查看
- (三)集群扩容
- 【1】数据迁移
- 【2】添加7077节点作为新节点,并且启动
- 【3】7007申请加入集群
- 【4】给7007节点分配hash槽,这样主节点才能存储数据
- 【5】添加7008从结点,将7008作为7007的从结点
- (四)集群缩容
- 【1】删除已经占有hash槽的结点会失败
(一)redis下载及安装
【1】前言介绍
本文是在一台服务器上搭建多个redis的伪集群方式来进行讲解,后续要换成多台步骤类似。
Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持
Redis5.0可以直接使用Redis-cli进行集群的创建和管理。本文用的是redis版本5.0.5
【2】redis下载以及安装
(1)首先要进入Linux系统的根目录
cd /
(2)安装redis所需的环境
yum install -y gcc-c++
yum install -y wget
(3)下载redis源码包
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
(4)解压redis到根目录下
tar -zxf redis-5.0.5.tar.gz
(5)安装redis
安装之前,先创建好/redis/redis-cluster/7001的文件
进入src目录
make install PREFIX=/redis/redis-cluster/7001
(6)拷贝配置文件 并修改
cp /redis-5.0.5/redis.conf /redis/redis-cluster/7001/bin
修改配置文件
(7)启动并操作
进入到redis的bin目录中进行启动
./redis-server redis.conf
客户端连接进行操作
./redis-cli -h 192.168.0.102 -p 7001
测试安装并启动成功
(二)集群搭建-三主三从
【1】复制配置文件
(1)在redis-cluster目录下创建多个文件7002-7008
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
mkdir 7007
mkdir 7008
(2)开始复制配置好的7001文件夹下的文件
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7002
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7003
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7004
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7005
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7006
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7007
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7008
(3)修改配置文件的端口
复制完成后,对每个目录下的配置文件进行修改,修改对应端口就可以了
【2】创建启动脚本进行启动
(1)创建启动文件
回到redis-cluster目录下创建启动文件
创建启动文件
touch start.sh
编辑启动文件
vim start.sh
(2)启动文件start.sh的内容
cd 7001/bin
./redis-server redis.conf
cd ..
cd ..
cd 7002/bin
./redis-server redis.conf
cd ..
cd ..
cd 7003/bin
./redis-server redis.conf
cd ..
cd ..
cd 7004/bin
./redis-server redis.conf
cd ..
cd ..
cd 7005/bin
./redis-server redis.conf
cd ..
cd ..
cd 7006/bin
./redis-server redis.conf
cd ..
cd ..
(3)给启动文件授权
#授权
chmod u+x start.sh
(4)启动
启动前可以检查一下redis的线程是不是有已经启动的了,使用kill命令全部关闭。
./start.sh
(5)查看启动后的线程
#查看启动的线程情况
ps -ef|grep redis
【3】创建Redis集群(创建时Redis里不要有数据)
(1)创建redis集群
进入到一个redis,bin目录下执行命令。cluster-replicas后面的1表示一个主机有几个从机,因为现在只有一个因此是1,工作中是2。
./redis-cli --cluster create 192.168.0.102:7001 192.168.0.102:7002 192.168.0.102:7003 192.168.0.102:7004 192.168.0.102:7005 192.168.0.102:7006 --cluster-replicas 1
(2)槽位分配的原理
【4】客户端连接集群并使用
(1)以redis集群方式进行连接
注意:-c 表示是以redis集群方式进行连接
./redis-cli -h 192.168.0.102 -p 7001 -c
(2)查看集群状态
cluster info
(3)查看集群中的节点
cluster nodes
(4)添加数据并查看
从7001添加数据看看(如何选择和分配槽位slot的原理看一下)
从7002查询数据
(三)集群扩容
【1】数据迁移
(1)新节点加入
(2)节点下线
(3)负载不均衡需要调整slot分布
【2】添加7077节点作为新节点,并且启动
进入7007/bin/目录,并且启动redis
./redis-server redis.conf
【3】7007申请加入集群
添加节点 7007 去meet7001申请加入集群
./redis-cli --cluster add-node 192.168.0.102:7007 192.168.0.102:7001
连接7007的redis,查看是否已经加入集群
#连接集群
./redis-cli -h 192.168.0.102 -p 7007 -c
#查看集群信息
cluster info
#查看是否加入集群
cluster nodes
在集群的节点中能看到7007,但是现在已经连接,还没有分配hash槽
【4】给7007节点分配hash槽,这样主节点才能存储数据
./redis-cli --cluster reshard 192.168.0.102:7007
(1)输入要分配槽数量
(2)输入接收槽的节点id
这里根据自己机器上的7007的id进行填写
(3)输入节点id后再输入all就完事了
(4)输入yes开始移动槽到目标结点id
(5)查询节点
#连接集群
./redis-cli -h 192.168.0.102 -p 7007 -c
#查看集群信息
cluster info
#查看是否加入集群
cluster nodes
【5】添加7008从结点,将7008作为7007的从结点
(1)首先启动7008
#进入7008/bin/目录
#启动
./redis-server redis.conf
(2)添加7008从结点,将7008作为7007的从结点
./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave -cluster-master-id 主节点id
./redis-cli --cluster add-node 192.168.0.102:7008 192.168.0.102:7007 --cluster-slave --cluster-master-id 2d17e4ccce0e5bf54ab893782d81d21214662ce1
(3)7008节点登入集群,查看节点信息
#连接集群
./redis-cli -h 192.168.0.102 -p 7008 -c
#查看集群信息
cluster info
#查看是否加入集群
cluster nodes
(四)集群缩容
【1】删除已经占有hash槽的结点会失败
(1)缩容命令
./redis-cli --cluster del-node 192.168.0.102:7008 5cc3b1ef0bf018435e65f93939d81acba6fbd603
删除已经占有hash槽的结点会失败,必须先分出去否则报错如下:
[ERR] Node 127.0.0.1:7008 is not empty! Reshard data away and try again.
(2)hash槽重新分配
进入7008/bin/目录,开始hash槽重新分配—参考上面hash槽分配步骤
./redis-cli --cluster reshard 192.168.0.102:7008