这篇Redis 集群部署笔记参考的书籍资料是:
《Redis入门指南》第二版,作者:李子骅 第8章
《Redis开发与运维》 作者:付磊 第10章

以下是学习笔记,记录了Redis集群部署过程,使用了Redis Commands 命令,大家也可以用redis-trib.rb 这个集群管理工具,变tube来操作Redis集群部署。

操作环境准备了6台虚拟机,因为Redis 集群里至少需要3个master数据库才能正常运行。 所以这个架构是3主3从。

IP 端口 功能
192.168.100.4 6379 master
192.168.100.5 6380 master
192.168.100.6 6381 master
192.168.100.7 6382 slave
192.168.100.8 6383 slave
192.168.100.9 6384 slave

各结点对应关系

master slave
192.168.100.4 192.168.100.7
192.168.100.5 192.168.100.8
192.168.100.6 192.168.100.9

1.部署前的准备工作

(1)确保每个redis 结点里没有数据。
(2)每台机器的防火墙,进行配置,或者关掉。(我在虚拟机里关掉了防火墙)
(3)每台redis 配置文件里,bind 127.0.0.1 这一行注释掉
(4)每个Redis结点的port 设置成不一样的。(多台机器里,这个看个人习惯)

2.正式部署集群

在每台Redis结点的配置文件redis.conf 中修改如下配置内容:

port 6379
daemonize yes    //开启守护进程
logfile "/var/log/server/redis.log"    //日志
requirepass lafenfen            //设置密码
masterauth lafenfen            //如果requirepass设置了,masterauth也必须要保持一样,否则无法同步。cluster-enabled yes    //开启集群模式
cluster-config-file nodes-6379.conf    //每台机器的集群配置文件,不需要人工修改,程序自动记录,这块名字可以根据端口号进行设置。
cluster-node-timeout 15000  //单位是毫秒,如果在15秒还没有响应,结点会被认为出了故障。

配置完成后,分别启动Redis服务

./redis-server ../config/redis.conf 可以看到cluster字样ps aux|grep redis |grep -v 'grep'root      3008  0.0  0.6 156552  3300 ?        Ssl  06:12   0:04 ./redis-server *:6379 [cluster]

各台主机的Redis服务启动后,现在开始操作结点

3添加结点到集群

登陆192.168.100.4这台机器,连接redis

./redis-cli
auth lafenfen127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:1

使用CLUSTER MEET 命令,将其余五台服务器,添加到一个集群圈里。

127.0.0.1:6379> cluster meet 192.168.100.5 6380
OK
127.0.0.1:6379> cluster meet 192.168.100.6 6381
OK
127.0.0.1:6379> cluster meet 192.168.100.7 6382
OK
127.0.0.1:6379> cluster meet 192.168.100.8 6383
OK
127.0.0.1:6379> cluster meet 192.168.100.9 6384然后输入命令 cluser nodes 查看当前结点关系

6个节点都是master

image.png

一会在修改,现在开始准备分配插槽。

4.分配插槽

Redis集群把所有的数据映射到16384个槽中。每个key会映射为一个固
定的槽,只有当节点分配了槽,才能响应和这些槽关联的键命令。通过
cluster addslots命令为节点分配槽。

命令:CLUSTER ADDSLOTS slot [slot ...]

在未分配插槽前,cluster info 显示集群信息,下图红线处代表插槽分配数量为0

image.png

现在给100.4 100.5 100.6 这三台Redis结点分配插槽。登陆100.4服务器


先给100.4自己分配,IP地址直接用127.0.0.1 就行
./redis-cli -h 127.0.0.1 -p 6379 -a lafenfen cluster addslots {0..5461}//其余两台注意,要加上IP地址,和指定端口号
./redis-cli -h 192.168.100.5 -a lafenfen -p 6380 cluster addslots {5462..10922}
./redis-cli -h 192.168.100.6 -a lafenfen -p 6381 cluster addslots {10923..16383}执行命令时,会有下面的提示,可以忽略。
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

注意:上面的{0..5461} 表示范围时{}里是两个点(..),这块不要写错。

连接redis服务器,查看插槽分配情况

# 前两项代表插槽开始和结束的点
127.0.0.1:6379> cluster slots
1) 1) (integer) 02) (integer) 54613) 1) "192.168.100.4"2) (integer) 63793) "cf685d370fb79383fa30832c4035d73b51d33d7a"2) 1) (integer) 54622) (integer) 109223) 1) "192.168.100.5"2) (integer) 63803) "1a73ba8c6367e4c592b49c60d7aef29ccf0687bb"3) 1) (integer) 109232) (integer) 163833) 1) "192.168.100.6"2) (integer) 63813) "177749c1c7988f5cf8edd32cc153f32ce596b445"

5.设置slave数据库

通过命令修改结点的身份,让它从master变为slave

CLUSTER REPLICATE <master node_id>

在我的规划里 3主3从的对应结点关系如下

master slave
192.168.100.4 192.168.100.7
192.168.100.5 192.168.100.8
192.168.100.6 192.168.100.9

现在100.4 的集群运行id 为 b5a9577be8bf4aadcdaaa41aef41c8e311fa8b15
我要配置100.7 让它变成100.4 的slave结点

登陆100.7服务器上的redis
./redis-cli
cluster replicate  b5a9577be8bf4aadcdaaa41aef41c8e311fa8b15
OK

这样就设置成功。其余100.8,100.9也依样修改操作。

最后各结点的对应关系如下:

cluster nodes
dd42566f143bdf4731fbaa22fb1160634b310a7a 192.168.100.5:6380@16380 master - 0 1623805285501 0 connected 5462-10922
646e942d30a4ad0b17eb805839b2462edcde57e3 192.168.100.8:6383@16383 slave dd42566f143bdf4731fbaa22fb1160634b310a7a 0 1623805288520 4 connected
76c42fc6a375283d5e13c264ed197070edafa2ba 192.168.100.7:6382@16382 slave b5a9577be8bf4aadcdaaa41aef41c8e311fa8b15 0 1623805287514 3 connected
b5a9577be8bf4aadcdaaa41aef41c8e311fa8b15 192.168.100.4:6379@16379 myself,master - 0 0 1 connected 0-5461
7cb96ccf3ae2acc59804e7e5be42d15bde5eea38 192.168.100.6:6381@16381 master - 0 1623805288017 2 connected 10923-16383
9a6cabdead853aa1da579d5984ef78ded0c4894e 192.168.100.9:6384@16384 slave 7cb96ccf3ae2acc59804e7e5be42d15bde5eea38 0 1623805289529 5 connected
127.0.0.1:6379>

6、使用集群

在192.168.100.4 的Redis服务器上,执行set命令
127.0.0.1:6379> set a b
(error) MOVED 15495 192.168.100.6:6381
127.0.0.1:6379>
提示a 这个变量写入,应该到100.6的机器上操作
在100.6服务器上执行命令127.0.0.1:6381> set a b
OK同时登陆它的从数据库100.9,可以看到数据在这里做了备份。
127.0.0.1:6384> keys *
1) "a"
127.0.0.1:6384> get a
(error) MOVED 15495 192.168.100.6:6381
127.0.0.1:6384> 

Redis集群部署操作的过程完成。

关于Redis集群的详细使用,我将记录在另一篇文档里。

下面是Redis集群配置项和操作命令

集群配置项

(1) cluster-enabled yes     开启集群运行模式(2) cluster-config-file nodes-6379.conf    集群配置文件
这里记录的内容和执行 cluster nodes 命令看到的是一样的。
这个文件程序自动添加和更新,不需要人工处理。dd42566f143bdf4731fbaa22fb1160634b310a7a 192.168.100.5:6380@16380 master - 0 1623805285501 0 connected 5462-10922第1列:结点的运行ID,它是集群中的唯一标识。
第2列:IP和端口号
第3列:角色 master 或者slave
最后一列:是分配的插槽起始和结束范围。(3)cluster-node-timeout 15000单位:毫秒集群中的各结点,会对其它结点进行ping操作,当超出 cluster-node-timeout  选项的时间,还没有反应,就疑似这个结点出了故障。(4)cluster-replica-validity-factor 10(5)cluster-migration-barrier 1(6)cluster-require-full-coverage yes
说明:
当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群下线,状态不可用。
可以设置为no,将忽略这个影响。这块有相关技术人员做了试验,可以看下链接:
https://www.qedev.com/bigdata/866.html(7)cluster-replica-no-failover no

集群操作命令整理

集群
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <master_node_id> :将当前从节点设置为 node_id 指定的master节点的slave节点。只能针对slave节点操作。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
键
cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键 。

Redis集群Cluster部署相关推荐

  1. redis 集群环境部署

    集群环境 • 在 6 台主机上做如下配置,并运行 redis 服务 yum -y install gcc gcc-c++ tar -zxvf redis-4.0.8.tar.gz cd redis-4 ...

  2. Redis集群模式部署

    以下以Linux(CentOS)系统为例 1.1 下载和编译 $ wget http://download.redis.io/releases/redis-4.0.7.tar.gz $ tar xzf ...

  3. 分布式Redis集群--Cluster架构

    Cluster架构 Redis哨兵与Cluster集群模式对比 1. 哨兵模式 Redis3.0之前一般是通过哨兵工具来监测master节点的状态,若master节点宕机,则哨兵集群会进行主从切换,从 ...

  4. docker部署redis集群_Docker部署Redis集群----第九节(docker-redis哨兵集群“轮询分流”篇实例一)...

    到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流. 1.准备工作: 在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php ...

  5. docker部署redis集群_Docker部署Redis集群----第六节(docker-redis-sentinel集群的机制)...

    通过前面的三个篇章的认知学习与实践,相信大家搭建自己的docker redis主从应该是没有任何问题了.普通的主从复制到此就结束了,下面我们要来分析讲解,普通主从复制的升级版"哨兵集群&qu ...

  6. Redis集群cluster环境(快速搭建过程10分钟)

    安装环境CentOS Linux release 7.5.1804 (Core) 如果服务器没有连接网络,请按步骤自行百度其离线方式 话不多说,开整!!! 一.安装redis #下载至/home/in ...

  7. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群

    一.问题分析 本质上来说在 k8s 上部署一个 redis 集群和部署一个普通应用没有什么太大的区别,但需要注意下面几个问题: Redis 是一个有状态应用:这是部署 redis 集群时我们最需要注意 ...

  8. 在K8s上部署Redis 集群

    一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...

  9. Redis集群部署的三种方式

    Redis集群的部署方式: 1.主从复制:2.Sentinel哨兵机制:3.cluster集群. 第一种集群方式,部署简单,分为一主一从,或一主N从.数据分布是在所有节点通过replication复制 ...

最新文章

  1. Linux C 实现生产者消费者问题
  2. 三种方法删除有序表中s和t直接的元素(包含s和t)
  3. VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)
  4. Train Wreck 模拟-建树-优先队列
  5. Date和TimeZone的关系
  6. 即将放弃python的app_即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具
  7. linux 从命令行自动识别文件并将其打开的命令
  8. windows中VS卸载opencv配置,重新安装其他版本
  9. 2019年4月第四周_2012年4月最佳怪胎文章
  10. Linux C 函数练习
  11. CDialogBuilder 类
  12. 智能注塑工艺与模流分析技术研讨会暨上海大学Moldex3D实训基地开幕式圆满结束
  13. Android11/Android Q分屏功能实现
  14. Gaussian Mixture Model:混合高斯模型介绍
  15. R语言获取丁香园疫情数据动态网站
  16. 制作局部区域放大效果(每天一个PS小项目)
  17. 智能车大赛信标组_【学院新闻】第四届福建省智能汽车竞赛圆满落幕
  18. ​特斯拉、Space X、Boring,一切都是为了“火星人”马斯克的回家梦?
  19. 我对于UI设计这个领域的理解
  20. 在计算机软件中 BIOS的中文意思是,电脑bios是什么意思

热门文章

  1. ChatGPT 如何应用于决策?Rationale 带你狂飙!
  2. gta5线上服务器未响应,GTA5基本故障排除方法:安装、崩溃、未响应、画面表现差...
  3. 【Linux教程】Ubuntu Linux 更换源教程
  4. 中国互联网经济10年巨献:是春秋也是战国
  5. JAVA学习16_Java的ISO、UTC、UNIX时间类型转换
  6. 单声道数据转双声道_WAV格式播放时,如何双声道转为单声道。
  7. 2020HW漏洞总结(二)
  8. 在公众号中点击指定小程序并没有成功的跳转
  9. 北美通往6G的愿景和时间表
  10. 为什么String作为形参不会改变本身的值?