目录一 准备redis镜像、容器1.1 下载redis6.0.81.2 准备6台服务器配置文件1.3 创建6台redis容器二 创建主从集群关系2.1 进入任意一台redis容器2.3 查看集群状态三 主从容错切换迁移案例3.1 数据读写存储3.2 容错切换迁移四 主从扩容4.1 新建6387、6388两个节点 新建后启动 查看是否8节点4.2 进入6387容器实例内部4.3 将新增的6387节点(空槽号)作为master节点加入原集群4.5 检查集群情况第1次4.6 重新分派槽号4.7 检查集群情况第2次4.8 为主节点6387分配从节点63884.9 第三次查看集群情况五 主从缩容案例5.1 检查集群情况并获得6388的节点ID5.2 将6388删除(从集群中将4号从节点6388删除)5.3 将6387的槽号清空,重新分配,本例将清出来的槽号都给63815.4 检查集群情况第二次5.5 将6387删除5.6 检查集群情况第三次
一 准备redis镜像、容器
1.1 下载redis6.0.8
docker pull redis:6.0.8
1.2 准备6台服务器配置文件
# redis出场配置放在文章最后
mkdir -p /usr/local/repository/redis/redis-node-1
# 配置参考文章最后
vim /usr/local/repository/redis/redis-node-1/redis.conf
cd /usr/local/repository/redis
# 依次复制其他5份
cp -r redis-node-1/ ./redis-node-2
1.3 创建6台redis容器
docker run -d –name redis-node-1 –net host –privileged=true -v /usr/local/repository/redis/redis-node-1/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-1/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6381
docker run -d –name redis-node-2 –net host –privileged=true -v /usr/local/repository/redis/redis-node-2/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-2/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6382
docker run -d –name redis-node-3 –net host –privileged=true -v /usr/local/repository/redis/redis-node-3/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-3/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6383
docker run -d –name redis-node-4 –net host –privileged=true -v /usr/local/repository/redis/redis-node-4/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-4/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6384
docker run -d –name redis-node-5 –net host –privileged=true -v /usr/local/repository/redis/redis-node-5/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-5/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6385
docker run -d –name redis-node-6 –net host –privileged=true -v /usr/local/repository/redis/redis-node-6/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-6/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6386
二 创建主从集群关系
2.1 进入任意一台redis容器
docker exec -it redis-node-1 /bin/bash
2.2 构建主从关系
redis-cli –cluster create 192.168.202.200:6381 192.168.202.200:6382 192.168.202.200:6383 192.168.202.200:6384 192.168.202.200:6385 192.168.202.200:6386 –cluster-replicas 1
# –cluster-replicas 1 表示为每个master创建一个slave节点
2.3 查看集群状态
# 进入任意redis容器,这里以6381为例
redis-cli -p 6381
cluster info
cluster nodes
三 主从容错切换迁移案例
3.1 数据读写存储
3.1.1 进入6381新增两组key
# 重新进入6381,-c可以防止路由失效((error) MOVED 12706 192.168.202.200:6383),往其他服务器hash槽存数据时报错。
redis-cli -p 6381 -c
set k1 v1
set k2 v2
3.1.2 切换到集群上的其他服务器,获取值
3.1.3 查看集群信息
3.2 容错切换迁移
3.2.1 主6381和从机切换
# 停止6381,机器,查看集群状态
docker stop redis-node-1
# 进入6382容器,查看集群状态
docker exec -it redis-node-2 bash
# 进入容器后先进入redis
redis-cli -p 6382 -c
# 查看集群信息
cluster nodes
上图可以看出,当6381宕机后,6384由从机变为了主机。
3.2.2 重启6381
重启之后发现,6381还是从机,6384是主机。人走茶凉。要变回来只要把6384停了再启动即可。
# 先启动6381,再重启6384,即可将6381变为主机器。这里不做测试。
docker stop redis-node-4
docker start redis-node-4
3.2.3 查看集群状态
redis-cli –cluster check 自己IP:6381
四 主从扩容
4.1 新建6387、6388两个节点 新建后启动 查看是否8节点
# 到宿主机上,准备配置文件
cd /usr/local/repository/redis
# 参考上面6台机器,生成配置文件
# 启动6387及6388两个容器
docker run -d –name redis-node-7 –net host –privileged=true -v /usr/local/repository/redis/redis-node-7/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-7/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6387
docker run -d –name redis-node-8 –net host –privileged=true -v /usr/local/repository/redis/redis-node-8/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-8/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6388
# 查看容器是否创建成功
docker ps
4.2 进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
4.3 将新增的6387节点(空槽号)作为master节点加入原集群
# 将新增的6387作为master节点加入集群
redis-cli –cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
4.5 检查集群情况第1次
redis-cli –cluster check 真实ip地址:6381
# 执行结果可以看出暂时没有槽号
4.6 重新分派槽号
# 重新分派槽号
# 命令:redis-cli –cluster reshard IP地址:端口号
redis-cli –cluster reshard 192.168.202.200:6381
# 4096 下面的是接收hash槽的redis容器ID,这里是6387对应的id
# source node :从哪些原来的主机上分配资源下来,all表示全部master
4.7 检查集群情况第2次
redis-cli –cluster check 真实ip地址:6381
# 槽号分派说明
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
4.8 为主节点6387分配从节点6388
命令:redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID
redis-cli –cluster add-node 192.168.202.200:6388 192.168.202.200:6387 –cluster-slave –cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451——-这个是6387的编号,按照自己实际情况
4.9 第三次查看集群情况
redis-cli –cluster check 192.168.202.200:6382
五 主从缩容案例
5.1 检查集群情况并获得6388的节点ID
redis-cli –cluster check 192.168.202.200:6382
5.2 将6388删除(从集群中将4号从节点6388删除)
# 命令:redis-cli –cluster del-node ip:从机端口 从机6388节点ID
redis-cli –cluster del-node 192.168.202.200:6388 6388节点redis容器ID
5.3 将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
redis-cli –cluster reshard 192.168.202.200:6381
5.4 检查集群情况第二次
# 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了
# 如果想平均分配的话可以多次分配,每次分配指定hash槽数
redis-cli –cluster check 192.168.202.200:6381
5.5 将6387删除
# 命令:redis-cli –cluster del-node ip:端口 6387节点ID
redis-cli –cluster del-node 192.168.202.200:6387 ce1263dbe9e034e99fea8359f0177dde57ea6367
5.6 检查集群情况第三次
# 又变回了三主三从,6384hash槽是8192
redis-cli –cluster check 192.168.202.200:6381
附: redis出厂配置文件
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf
# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k =
暂无评论内容