Redis搭建主从集群

时间:2022-12-27 13:53:24

搭建集群

建集群的第一件事情我们需要一些运行在 集群模式的Redis实例。这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。

下面是一个最少选项的集群的配置文件:

port 7000

# 打开集群模式
cluster-enabled yes

# 设定节点配置文件名
cluster-config-file nodes.conf

# 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换。
cluster-node-timeout 5000

# 开启 AOF
appendonly yes

文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf,节点配置文件无须人为修改,它由 Redis 集群在启动时创建,并在有需要时自动进行更新。

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

准备好 6 个正在运行中的 Redis 实例,接下来需要使用这些实例来创建集群。

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

./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

或者还可以使用

./redis-cli --cluster create --cluster-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

选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

redis cluster 如何分配这六个节点?

  • 一个集群至少要有三个主节点。
  • 选项 --cluster-replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
  • 分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。


 

准备实例和配置

 由于设备限制原因,在当前用例中配置的是一主两从,生产环境配置参考上述配置实现3主3从。集群结构如图:

Redis搭建主从集群

首先在同一台虚拟机开启3个实例,必须先准备三份不同的配置文件。如图:

 Redis搭建主从集群


 

开启主从关系

现在三个实例还没有任何关系,要配置主从可以使用 replicaof 或者 slaveof(5.0以前)命令。

开启主从模式有临时和永久两种模式。


临时

  • 使用 redis-cli 客户端连接到 redis 服务,执行 replicaof 命令。

永久

  • 修改配置文件,在redis.conf中添加一行配置:replicaof <masterip> <masterport>

为了方便学习,使用了临时的方式。

通过 redis-cli 命令连接 6379 节点,并打开实时日志。

[root@localhost utils]# redis-cli -p 6379
127.0.0.1:6379>

再次通过 redis-cli 命令连接 6380,执行下面命令:

[root@localhost utils]# redis-cli -p 6380
127.0.0.1:6380> replicaof 127.0.0.1 6379
OK
127.0.0.1:6380> 

说明主从配置成功。

通过执行以下命令查看状态

127.0.0.1:6380> info replication

Redis搭建主从集群

 再次打开 6379 节点输出的日志,可以看到以下信息:

Redis搭建主从集群

 从日志中可以看出 6380 节点已经配置成功。

上边使用的是启动后配置主从关系,接下来启动 6381 节点时就指定主从关系

redis-server /etc/redis/6381.conf --replicaof 127.0.0.1 6379

再次打开 6379 节点输出的日志,可以看到以下信息: 

Redis搭建主从集群

 到此,主从就配置完成了。

再次进入到 6379 节点为中查询状态,如图:
Redis搭建主从集群

测试

执行下列操作以测试:

使用 redis-cli 分别连接 6379、6380、6381,执行 set k1 test 命令,只有 6379 才可以执行成功,其余两个节点为在做添加的时候出现:(error) READONLY You can't write against a read only replica。

Redis 集群优缺点

优点

  • 实现扩容
  • 分摊压力
  • 无中心配置相对简单

缺点

  • 多键操作是不被支持的
  • 多键的Redis事务是不被支持的。lua脚本不被支持
  • 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

以上操作虽然完成了主从集群搭建,实现了数据横向扩展,但还存在一个非常严重的问题。

主节点挂了会怎么样?


集群下常用命令

# 查看状态
info replication

# 查看当前集群信息
cluster info

# 查看集群里有多少个节点
cluster nodes