A4-1-Linux下 Redis 集群使用(一)

A4-1-Linux下 Redis 集群使用(一)

主要是针对于上篇文章启动集群后的操作

参考:https://www.cnblogs.com/bcde/p/11163362.html

启动、关闭、重启等操作

参考:https://blog.csdn.net/justry_deng/article/details/89205155

一、启动集群

命令:

 

cd /usr/local/redis-cluster/

./redis-cli --cluster create 10.0.0.12:20001 10.0.0.13:30002 10.0.0.12:20003 10.0.0.13:30004 10.0.0.12:20005 10.0.0.13:30006 --cluster-replicas 1

create,表示创建一个新的集群。选项 --replicas 1 表示为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是实例的地址列表, 指定使用这些地址所指示的实例来创建新集群。

“All 16384 slots covered.”表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。从打印出来的信息也可以看出10.0.0.12:20001、10.0.0.12:20003、10.0.0.13:30002是主节点,其它三个是从节点。

二、客户端连接集群

命令:

 

./redis-cli -c -h 10.0.0.12 -p 20001

任意一个客户端都可以连接集群。即可使用整个集群信息。故而一个集群只能为一个项目提供缓存数据库。

三、关闭集群

命令:

 

pkill redis-server

或逐个关闭

./redis-cli -c -h 10.0.0.12 -p 20001 shutdown

检查:./redis-cli --cluster check 10.0.0.12:20003

从节点自动升级为主节点

四、重启集群

重启:
(保留原有集群的)重启:
不需要再执行(形如下这样的)集群生成指令

 

/redis-cli -a <password> --cluster create 10.0.0.12:20001 10.0.0.13:30002 10.0.0.12:20003 10.0.0.13:30004 10.0.0.12:20005 10.0.0.13:30006 --cluster-replicas 1

集群生成指令。

  • 第一步:先关闭各个Redis节点。
  • 第二步:再启动各个Redis节点即可。 

(删除原有集群的)重启:
需要执行(形如下这样的)集群生成指令。

 

/redis-cli -a <password> --cluster create 10.0.0.12:20001 10.0.0.13:30002 10.0.0.12:20003 10.0.0.13:30004 10.0.0.12:20005 10.0.0.13:30006 --cluster-replicas 1

  • 第一步:先关闭各个Redis节点。
  • 第二步:删除各个Redis安装目录下的节点配置文件nodes.conf、数据文件dump.rdb。 

详细见:https://blog.csdn.net/justry_deng/article/details/89205155

五、集群使用测试

简单测试:set、get

如果不使用集群连接“-c”,则会MOVED错误

get取值

可以看到,客户端连接加-c选项的时候,存储和提取key的时候不断在各节点之间跳转,这个称为客户端重定向。之所以发生客户端重定向,是因为Redis Cluster中的每个Master节点都会负责一部分的槽(slot),存取的时候都会进行键值空间计算定位key映射在哪个槽(slot)上,如果映射的槽(slot)正好是当前Master节点负责则直接存取,否则就跳转到其他Master节点负的槽(slot)中存取,这个过程对客户端是透明的。继续看下文的集群分区原理。

六、集群分区原理

参考:https://www.cnblogs.com/rjzheng/p/11430592.html

参考:https://www.cnblogs.com/bcde/p/11163362.html

槽(slot)的基本概念
从上面集群的简单操作中,我们已经知道redis存取key的时候,都要定位相应的槽(slot)。
Redis 集群键分布算法使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 它们的编号为0、1、2、3……16382、16383,这个槽是一个逻辑意义上的槽,实际上并不存在。redis中的每个key都属于这 16384 个哈希槽的其中一个,存取key时都要进行key->slot的映射计算。
下面我们来看看启动集群时候打印的信息:

从上面信息可以看出,创建集群的时候,哈希槽被分配到了三个主节点上,从节点是没有哈希槽的。10.0.0.12:20001负责编号为0-5460 共5461个 slots,10.0.0.12:20003负责编号为 5461-10922共5462 个 slots,10.0.0.13:30002负责编号为10923-16383 共5461个 slots。

键-槽映射算法
和memcached一样,redis也采用一定的算法进行键-槽(key->slot)之间的映射。memcached采用一致性哈希(consistency hashing)算法进行键-节点(key-node)之间的映射,而redis集群使用集群公式来计算键 key 属于哪个槽:

HASH_SLOT(key)= CRC16(key) % 16384

其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。key经过公式计算后得到所对应的哈希槽,而哈希槽被某个主节点管理,从而确定key在哪个主节点上存取,这也是redis将数据均匀分布到各个节点上的基础。

七、集群分区好处

无论是memcached的一致性哈希算法,还是redis的集群分区,最主要的目的都是在移除、添加一个时对存在的存数据的定位影响尽可能的降到最小。redis将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点

 比如说:

  • 如果用户将新节点 D 添加到集群中, 那么集群只需要将节点 A 、B 、 C 中的某些槽移动到节点 D 就可以了。
  • 与此类似, 如果用户要从集群中移除节点 A , 那么集群只需要将节点 A 中的所有哈希槽移动到节点 B 和节点 C , 然后再移除空白(不包含任何哈希槽)的节点 A 就可以了。

因为将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞, 所以无论是添加新节点还是移除已存在节点, 又或者改变某个节点包含的哈希槽数量, 都不会造成集群下线,从而保证集群的可用性。下面我们就来学习下集群中节点的增加和删除。

Linux使用`redis-cli`搭建Redis集群通常不是直接操作的,因为`redis-cli`主要是用于交互式地测试和管理单个Redis实例。实际上,Redis集群的部署应该通过Redis服务器自身的`redis.conf`文件以及一些高级特性,例如`redis-cluster`模块,来进行配置和管理。 以下是基本步骤: 1. **安装Redis**:确保在所有节点上安装了Redis,并选择包含`redis-cluster`模块的版本。 2. **编辑配置文件**:在每台服务器的`redis.conf`文件中,启用`cluster-enabled`和`cluster-config-file`配置,设置`cluster-config-file`指向一个共享文件,用于记录节点信息。 ```bash cluster-enabled yes cluster-config-file nodes.conf ``` 3. **启动Redis服务器**:添加`--cluster`标志启动服务器,此时Redis会自动进入集群模式。 ``` redis-server --cluster --cluster-config-file nodes.conf ``` 4. **配置`nodes.conf`**:手动编写或由`redis-cli`生成`nodes.conf`,列出集群的节点信息,包括节点IP地址、端口、槽位分配等。 5. **初始化集群**:在所有节点上分别运行`redis-cli`的`CLUSTER ADDSLOTS`命令,按照配置的槽位分配给各个节点。 6. **验证集群**:使用`redis-cli`的`CLUSTER SLOTS`命令确认槽位已被正确分配。 请注意,这只是一个简化的指南,实际部署时可能涉及更多细节,比如网络连接的稳定性、故障转移机制、负载均衡等。对于复杂场景,推荐使用专门的运维工具,如Redis的官方集群监控工具`redis-cli monitor`,或者第三方可视化管理工具如Redis Commander。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值