主从搭建
可以通过部署2台Redis服务器, 一台主,一台从。然后写的操作在主库,读的操作可以在从库。进行主从同步即可。
这样就可以,一台写,多台从,所有读的请求全部在从库那边操作。增强Redis的并发能力。
主从配置,比较简单。
直接去从服务器那边,修改配置文件redis.conf。
修改salveof 指向主服务器
如果主服务器有配置访问密码,则还需要配置masterauth 属性。
主服务器不用做什么修改。
主从都启动好后, 可以使用redis客户端来查看redis的主从情况。
./redis-cli
info
![](https://img.haomeiwen.com/i2054227/398b5c227f4b5aa2.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信息(不包含当前)。
下面是多个哨兵的信息,但是不包含自己当前操作的哨兵信息。
![](https://img.haomeiwen.com/i2054227/a67ce7d25030bfc1.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
网友评论