十、Redis 有了主从复制, 为什么还需要搭建集群?以及如何搭建Redis集群详细图解

前言

对于一个初学者来说,心里一直有一个疑惑,主从复制不就是集群嘛(一主多从),干嘛还要搭建集群。主从复制和集群又是什么关系呢?接下来就让我来带大家一起了解一下!

主从复制

Redis 有了主从复制, 为什么还需要搭建集群?以及如何搭建Redis集群详细图解
主从复制 的模式一般是 一主多从,也就意味着 的速度大约在 10W次 / S , 而 的速度是根据从机数量来决定的, 也就是 10W次 * 从机数量 / S (有的小伙伴会想, 如果服务器配置好一些, 会不会读写快一些,这里我想说的是, 读写熟读和CPU 无关, 只和内存有关, 具体的可以看我的另外一篇文章:整理了一些关于 Redis的高频面试题【建议收藏】) 。 这种读写速度对于一般中小型的公司是完全够用的。但是在这里请大家思考一个问题, 我们都知道主从复制, 只有主(Master) 服务器才具备 的功能, 服务器是只有的功能的。 想象一下, 像 BAT 这种大公司, 10W / 秒 速度够用吗?答案肯定是不够用的,那么我们就想, 能不能有多台 主(Master) 服务器呢,也就是 多主多从 ,就这样 Redis 集群出现了。Redis 集群很好的解决了 不够的问题。

一主多从 还存在另外一个问题。使用 一主多从 多数会使用哨兵模式, 当 master 服务器 “宕机”之后,Sentinel 会有一个主观下线的问题。(sentinel down-after-milliseconds 参数就是指定多少毫秒之后 主节点没有应答哨兵sentinel , 此时哨兵主观上认为主节点下线 默认30秒)也就意味着,在主节点宕机之后到选举产生新的节点之前, Redis至少存在30 秒的不可用状态, 虽然可以将数值调小,但是在某些应用场景这是无法容忍的。 而 Redis 集群就很好的解决了这种问题。

Redis集群

Redis 有了主从复制, 为什么还需要搭建集群?以及如何搭建Redis集群详细图解

搭建Redis集群

准备搭建一个 三主三从 的Redis集群。 注:Redis 集群是 Redis 3.0 版本以后才有的功能, 3.0 以前的版本是没有的

环境准备

1、创建配置文件

首先在每台服务器的 /usr/local/ 路径下创建 redis-cluster 文件夹, 然后在 redis-cluster 文件夹在创建 master , slave 文件夹,并且把 /opt/redis-6.2.5/redis.conf 配置文件在每台服务器的 master ,slave 文件夹中复制一份。

[root@TR ~]# cd /usr/local/
[root@TR local]# mkdir redis-cluster
[root@TR local]# cd redis-cluster
[root@TR redis-cluster]# mkdir master
[root@TR redis-cluster]# mkdir slave
[root@TR redis-cluster]# ll
total 0
drwxr-xr-x 2 root root 6 Oct 16 20:36 master
drwxr-xr-x 2 root root 6 Oct 16 20:37 slave

# 复制配置文件
[root@TR ~]# cd /opt/redis-6.2.5
[root@TR redis-6.2.5]# cp redis.conf /usr/local/redis-cluster/master/
[root@TR redis-6.2.5]# cp redis.conf /usr/local/redis-cluster/slave/
 

2、修改配置文件

  1. 守护进程运行 daemonize yes
  2. 将6个配置文件中的端口一次修改成 port 6379 、port 6380 、port 6381、 port 6382 、port 6383、port 6384
  3. 修改 bind 绑定的地址, 改成对应服务器的 ip 即可(注:这里的 ip 不是云服务器的Ip , 需要填写 eth0网卡的ip
  4. 修改数据目录 dir , 改成 redis.conf配置文件的位置即可, 例如:dir /usr/local/redis-cluster/master
  5. 启动集群 cluster-enabled yes
  6. 修改 cluster-config-file nodes-6379.conf (这里的 nodes-63XX.conf最好和port 对应上)
  7. cluster-node-timeout 5000
  8. appendonly yes

3、启动6个Redis实例

# 106.14.157.48 服务器
redis-server /usr/local/redis-cluster/master/redis.conf
redis-server /usr/local/redis-cluster/slave/redis.conf

# 49.232.112.117 服务器
redis-server /usr/local/redis-cluster/master/redis.conf
redis-server /usr/local/redis-cluster/slave/redis.conf

# 101.34.253.57 服务器
redis-server /usr/local/redis-cluster/master/redis.conf
redis-server /usr/local/redis-cluster/slave/redis.conf


# 查询redis 运行情况 , 这里只有两个redis 实例,是因为这是查询一台服务器的原因
[root@TR ~]# ps -ef | grep redis
root      109791       1  0 18:24 ?        00:00:00 redis-server 10.0.4.7:6383 [cluster]
root      109805       1  0 18:24 ?        00:00:00 redis-server 10.0.4.7:6384 [cluster]
root      109945  104144  0 18:25 pts/0    00:00:00 grep --color=auto redis
[root@TR ~]# 

4、启动集群

启动集群的时候,如果遇到 Waiting for the cluster to join 的字样, 请看我的另外一篇文章:搭建Redis集群遇到的问题:Waiting for the cluster to join~~~

# 1. 执行启动集群的命令
# 命令最后一个参数 ‘1’ 的意思是 “一主一从”的配置。是通过计算得来的, 计算方式为: slave 总数量  /  master 总数量
[root@TR src]# redis-cli --cluster create 106.14.157.48:6379 49.232.112.117:6381 101.34.253.57:6383 106.14.157.48:6380 49.232.112.117:6382 101.34.253.57:6384 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 49.232.112.117:6382 to 106.14.157.48:6379
Adding replica 101.34.253.57:6384 to 49.232.112.117:6381
Adding replica 106.14.157.48:6380 to 101.34.253.57:6383
M: 2d9ab9c1c95c13478758ae6ec45434fdb620688c 106.14.157.48:6379
   slots:[0-5460] (5461 slots) master
M: edd1856f57ffbb50ee5ce690964b5e780118608e 49.232.112.117:6381
   slots:[5461-10922] (5462 slots) master
M: 5998783763f617cc7ff40dd2d55ad0cbce72ea66 101.34.253.57:6383
   slots:[10923-16383] (5461 slots) master
S: f0fdd2cd69c1e37ff510cf990ae381005609fc81 106.14.157.48:6380
   replicates 5998783763f617cc7ff40dd2d55ad0cbce72ea66
S: b2893c8a996c726264096a49b84df367509b9ceb 49.232.112.117:6382
   replicates 2d9ab9c1c95c13478758ae6ec45434fdb620688c
S: 560ef0cd7c6799a12a75c930cb0063cc2d613cb4 101.34.253.57:6384
   replicates edd1856f57ffbb50ee5ce690964b5e780118608e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 106.14.157.48:6379)
M: 2d9ab9c1c95c13478758ae6ec45434fdb620688c 106.14.157.48:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: edd1856f57ffbb50ee5ce690964b5e780118608e 49.232.112.117:6381
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f0fdd2cd69c1e37ff510cf990ae381005609fc81 106.14.157.48:6380
   slots: (0 slots) slave
   replicates 5998783763f617cc7ff40dd2d55ad0cbce72ea66
S: b2893c8a996c726264096a49b84df367509b9ceb 49.232.112.117:6382
   slots: (0 slots) slave
   replicates 2d9ab9c1c95c13478758ae6ec45434fdb620688c
M: 5998783763f617cc7ff40dd2d55ad0cbce72ea66 101.34.253.57:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 560ef0cd7c6799a12a75c930cb0063cc2d613cb4 101.34.253.57:6384
   slots: (0 slots) slave
   replicates edd1856f57ffbb50ee5ce690964b5e780118608e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@TR src]# 

到这里集群就搭建完成了。现在简单的来测试一下。

# 连接集群
# 参数解释:
#	-c: cluster集群的意思
#	-h: host 主机的意思
#	-p: port 端口的意思
[root@TR redis-6.2.5]# redis-cli -c -h 106.14.157.48 -p 6379
106.14.157.48:6379> set name "zhangsan"
-> Redirected to slot [5798] located at 49.232.112.117:6381
OK
49.232.112.117:6381> get name
"zhangsan"

测试二: 将 6379的master主机“宕机”后, 发现 6379 的slave 服务器的角色编程了master
Redis 有了主从复制, 为什么还需要搭建集群?以及如何搭建Redis集群详细图解

集群其余常用命令

# 查询集群的状态
cluster info 

# 查看集群节点列表
cluster nodes
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Redis主从复制是指通过将数据从一个Redis实例(主节点)复制到另一个实例(从节点)来实现数据的备份和负载均衡的过程。主节点接收写入请求并将其同步到从节点,而从节点只能接收读取请求。主从复制模式可以提高Redis的可用性和性能,因为它可以实现读写分离和故障转移。 要搭建主从复制集群需要进行以下步骤: 1. 在主节点和从节点上安装Redis,并确保它们都可以正常运行。 2. 在主节点的redis.conf配置文件中添加“slaveof”指令,指定从节点的IP地址和端口号。例如,如果从节点的IP地址为192.168.0.2,端口号为6379,则指令为“slaveof 192.168.0.2 6379”。 3. 在从节点的redis.conf配置文件中添加“masterauth”指令,指定主节点的密码(如果有)。例如,如果主节点的密码为“password”,则指令为“masterauth password”。 4. 重启主节点和从节点,以使配置生效。可以使用redis-cli命令行工具验证主从复制是否正常工作,例如,在主节点上键入“set foo bar”,然后在从节点上键入“get foo”,应该会返回“bar”。 5. 可以通过添加更多的从节点来扩展主从复制集群。只需要将每个从节点的“slaveof”指令指向主节点的IP地址和端口号即可。 需要注意的是,主从复制模式并不提供高可用性,因为当主节点发生故障时,必须手动将一个从节点升级为新的主节点。因此,为了实现高可用性,可以考虑使用Redis Sentinel或Redis Cluster等其他技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值