分布式系统中,涉及到一个非常关键的问题:单点问题
某个服务器程序,只有一个节点(只搞一个物理服务器,来部署这个服务器程序)。这就可能会遇到一些问题:
引入分布式系统,主要也就是为了解决上述的单点问题
在分布式系统中,往往希望有多个服务器来部署 redis
服务器,从而构成一个 redis
集群。此时就可以让这个集群给整个分布式系统重其他的服务,提供更稳定/更高效的数据存储功能
在分布式系统重,希望使用多个服务器来部署 redis
,存在以下几种 redis
部署方式:
主从模式:
在若干个 redis
节点中,有的是“主节点”,有的是“从节点”。假设有三个物理服务器(称为三个节点),分别部署了一个 redis-server
进程
此时就可以把其中的一个节点,作为“主节点”,另外两个节点作为“从节点”。
redis
主从模式中,从节点上的数据不允许被修改,只能读取数据
之前只是单个 redis
服务器节点,此时这个机器挂了,整个 redis
就挂了
redis
的机器不太可能“同时挂了”但是整个机房,是否可能被一锅端了?(也是可能存在的)
我们可以弄多个主节点吗?
更准确的说,主从模式,主要是针对“读操作”进行并发量&可用性的提高。而写操作的话,无论是可用性还是并发,都是非常依赖主节点,主节点又不能搞多个。实际业务场景中,读操作往往就是比写操作更加频繁
主从结构,是分布式系统中比较经典的一种结构。不仅仅
redis
支持,MySQL
也支持
配置 redis
主从结构,首先需要启动多个 redis 服务器。正常来说,每个 redis
服务器程序,应该在一个单独的主机上(才是分布式)
没有多个服务器,我们可以在一个服务器上,运行多个 redis-server
进程
redis-server
的端口是不同的6379
,此时就不能让新启动的 redis-server
再继续使用 6379
了如何去指定 redis-server
的端口呢?
-port
选项此处我们准备搞一个主节点,两个从节点
slave1
是从节点 1,配置文件设置的 6380
slave2
是从节点 2,配置文件设置的 6381
redis
是主节点,端口为 6379
从节点的配置文件都是复制的主节点的,只是把端口号改了。还需要把守护模式设为 yes
(daemonize yes
)要想配置成主从结构,就需要使用 slaveof
slaveof {masterHost} {masterPort}
随 Redis
启动生效redis-server
启动命令时加入 --slaveof {masterHost} {masterPort}
生效Redis
命令:slaveof {masterHost} {masterPort}
生效
一般是使用配置文件更多,修改配置文件是一直持久生效的,重启后也能用直接加上相关信息:
Redis
服务器的配置文件改完之后,要重启服务器主从结构配置好之后,我们看一下网络状态
使用:
info replication
offset
offset
就相当于是从节点和主节点之间,同步数据的进度lag
connected slaves
直接使用 slaveof no one
这个命令,来断开现有的主从复制关系
但是重启服务器之后,还是会回到之前一主两从的结构,因为配置文件里面是这样设置的
对于数据比较重要的节点,主节点会通过设置 requirepass
参数进⾏密码验证,这时所有的客⼾端访问必须使⽤ auth
命令实⾏校验。
从节点与主节点的复制连接是通过⼀个特殊标识的客⼾端来完成,因此需要配置从节点的 masterauth
参数与主节点密码保持⼀致,这样从节点才可以正确地连接到主节点并发起复制流程。
默认情况下,从节点使⽤ slave-read-only=yes
配置为只读模式。
由于复制只能从主节点到从节点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以建议线上不要修改从节点的只读模式。
主节点和从节点之间通过网络(TCP
)来传输。TCP
内部支持了 nagle
算法(默认开启)
TCP
的传输延迟,节省了网络带宽TCP
的传输延迟,增加了网络带宽TCP
的捎带应答是一样的,针对小的 TCP
数据报,进行合并,从而减少包的个数(等待合并的时候就会耗时)repl-disable-tcp-nodelay
参数就可以用于在主从通信过程中,关闭 TCP
的 nagle
算法,从而减少传输延迟,不过会增加网络带宽
fps
、moba
…)都要关闭 nagle
算法扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有