美文网首页
Redis启用主从模式做读写分离

Redis启用主从模式做读写分离

作者: Franck_ | 来源:发表于2020-11-21 08:40 被阅读0次

主从搭建

可以通过部署2台Redis服务器, 一台主,一台从。然后写的操作在主库,读的操作可以在从库。进行主从同步即可。

这样就可以,一台写,多台从,所有读的请求全部在从库那边操作。增强Redis的并发能力。

主从配置,比较简单。

直接去从服务器那边,修改配置文件redis.conf。

修改salveof 指向主服务器

如果主服务器有配置访问密码,则还需要配置masterauth 属性。

主服务器不用做什么修改。

主从都启动好后, 可以使用redis客户端来查看redis的主从情况。

./redis-cli 
info

image.png

哨兵搭建

进行读写分离的话, 还需要使用哨兵来管理Redis的集群。 让哨兵来判断读写是从哪台服务器。

对哨兵配置文件进行配置,参考配置解释如下

# 哨兵sentinel实例运行的端口,默认26379  
port 26379
# 哨兵sentinel的工作目录
dir ./

# 哨兵sentinel监控的redis主节点的 
## ip:主机ip地址
## port:哨兵端口号
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了  
# sentinel monitor <master-name> <ip> <redis-port> <quorum>  
sentinel monitor mymaster 127.0.0.1 6379 2

# 当在Redis实例中开启了requirepass <foobared>,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass <master-name> <password>  
sentinel auth-pass mymaster 123456  

# 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,默认30秒  
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000  

# 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1  

# 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。  
## 3. 当想要取消一个正在进行的failover时所需要的时间。
## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了
# sentinel failover-timeout <master-name> <milliseconds>  
sentinel failover-timeout mymaster 180000

# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
# 对于脚本的运行结果有以下规则:  
## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。
## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。  
## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
# sentinel notification-script <master-name> <script-path>  
sentinel notification-script mymaster /var/redis/notify.sh

# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh


以下是比较常用的配置信息,使用这些配置可以启动起来, 再根据实际的情况,去增加配置。

protected-mode no
bind 0.0.0.0
port 16380
daemonize yes
sentinel monitor master 127.0.0.1 16379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1

3台哨兵,使用同样的配置就可以了,哨兵们就会自动互相发现哨兵和slave了。 基本上就是配置了master的信息。 哨兵可以同时监控多个master,那是另外的Redis集群的架构了。

配置完成后,启动各个哨兵后, 可以使用redis的客户端链接哨兵来查看各个结点和哨兵的信息。

./redis-cli -p 端口号  #启动客户端
sentinel sentinels master   名称="master"的master结点下的所有哨兵信息(不包含当前)。

sentinel master master  master节点的信息

sentinel slaves master 名称="master"的master结点下的所有slave信息(不包含当前)。

下面是多个哨兵的信息,但是不包含自己当前操作的哨兵信息。


image.png

在Java项目里面进行读写分离和故障转移。

在项目配置里面,配置连接去哨兵集群即可。

spring.redis.sentinel.master=master
spring.redis.sentinel.nodes=192.168.43.210:16380,192.168.43.211:16380,192.168.43.212:16380


相关文章

网友评论

      本文标题:Redis启用主从模式做读写分离

      本文链接:https://www.haomeiwen.com/subject/hxsabktx.html