先看下架构图, 下面说明其存储原理: 首先 redis 每个节点上的数据都是不一样的, 只有主从节点的数据是一样, 这分别体现出其分布式及高可用性每个主节点负责的是不同范围的槽(slot), 根据指定算法来确定值所对应的槽进而进行存取操作
注意点:
redis 最低要求 3 个或以上的主节点(Master Node)
一个主节点可对应多个从节点(Slave Node), 主节点挂掉后, 自有的投票机制会选出其中一个从节点晋升为主节点
任何一个主节点挂掉都会使整个 redis 服务器宕机
槽 (slot) 直接对应的是主节点
Redis 集群搭建
redis 集群搭建有几种方法, 我使用的是官方推荐的 redis-cluster
第一步: 安装 ruby
其实整个流程用到的是一个叫 redis-trib.rb 工具, 因其由 ruby 语言编写所以需要相应环境的支持
下载安装:
因为 yum 库上的版本过低, 所以我是直接从官网上下载 tar 包解压安装的, 如果原来有安装旧版本的, 建议先卸载干净旧版本再进行新版本的安装, 亲测很多麻烦的错误~
我这里使用的是 2.4.3 稳定版
- wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.gz
- make && make install
- ruby v
- gem v
- gem install redis
ps:gem 是 ruby 的一个包管理器, 类似 yum,gem install redis 安装的是集群所需的组件
第二步: 节点配置
节点配置主要有以下几步:
在多个节点上安装 redis
节点配置文件 redis.conf 中打开集群属性, cluster-enable yes
修改端口号, port NodePort
若是不同的主机需要修改绑定的主机地址, bind host
可以使用 include 来共享相同的配置, include same.conf
第三步: 启动各节点 redis 服务器
第四步: 创建集群
现在使用 redis-trib.rb 工具对 redis 的节点进行集群管理, 创建集群 3 主 3 从, 这里示例是单机多节点:
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
参数 replicas 表示每个主节点下有多少个从节点, 至于哪个节点是主哪个节点是从就由 redis 来进行分配
ps: 有时宕机后需要重新创建或新增节点时会出现这样的错误:
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
提示中说明了两个原因, 一个是节点的配置信息已过期(指的是 redis.conf 中的 cluster-config-file, 一般是根目录下的 nodes-port.conf 文件), 另一个原因是本地数据库存在一些值造成了影响, 那么解决办法就有以下两种了:
删除 nodes-port.conf
删除 aofrdb 文件
需要注意的是在进行以上操作前要先把 redis 的进程关闭
最后一步: 测试
- 127.0.0.1:7000> set name cjh
- -> Redirected to slot [5798] located at 127.0.0.1:7001
- OK
- 127.0.0.1:7001> get name
- "cjh"
测试通过~
来源: https://www.cnblogs.com/cjh-notes/p/8452217.html