redis的主从复制+读写分离

 ⽬标:
读写分离,扩展主节点的读能⼒,分担主节点读压⼒容灾恢复,⼀旦主节点宕机,从节点作为主节点的备份可以随时顶上来

 一主二从环境的搭建:

通常主从都是搭建在不同的服务器上,这里由于资源的限制,在一台服务器上,安装三个redis,作为主从服务器,来模拟一主二从的环境。需要注意的是,搭建在不同服务器上的时候,需要各个服务器间网络互通。 

首先要配置各自的redis.conf文件:

启动一主二从服务:第一个参数是启动项,第二个是指定配置文件 

主从复制+哨兵监控

 哨兵可以监控主节点是否宕机,如果宕机,就自动的将从节点提升为主节点。

原理 :Redis提供了哨兵的命令,是⼀个独⽴的进程。哨兵通过发送命令给多个节点,等待Redis服务器响应,从⽽监控运⾏的多个Redis实例的运⾏情况当哨兵监测到master宕机,会⾃动将slave切换成master,通过通知其他的从服务器,修改配置⽂件切换主机。

Sentinel三⼤⼯作任务:

监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
提醒(Notification):当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应⽤程序发送通知
⾃动故障迁移(Automatic failover):当⼀个主服务器不能正常⼯作时, Sentinel 会开始⼀次⾃动故障迁移操作, 它会将失效主服务器的其中⼀个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使⽤新主服务器代替失效服务器。

多哨兵模式:为了防止哨兵进程出现问题,会设置多个哨兵,并且多个哨兵之间互相监控。

哨兵主要与redis的主服务器进行交互,整个流程为:

1、每秒ping,超过时间不响应,就认为主观下线,满足多个哨兵都不响应,就认为是客观下线,然后投票选择新的主节点。

配置三个哨兵,

同样是通过设置redis.conf 来配置哨兵:

#不限制ip
bind 0.0.0.0
# 让sentinel服务后台运⾏
daemonize yes
# 配置监听的主服务器,mymaster代表服务器的名称,⾃定义,172.18.172.109 代表监控的主服务器,6379代表端
⼝,
#2代表只有两个或两个以上的哨兵认为主服务器不可⽤的时
候,才会进⾏failover操作。
在⽬录下创建3个⽂件sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
sentinel monitor mymaster 172.18.172.109 6379 2
# sentinel auth-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass mymaster 123456
#超过5秒master还没有连接上,则认为master已经停⽌
sentinel down-after-milliseconds mymaster 5000
#如果该时间内没完成failover操作,则认为本次 failover失败
sentinel failover-timeout mymaster 30000

配置哨兵:

port 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-1.pid"
logfile "/var/log/redis/sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 8.129.113.233 6379   // 主机ip需要修改  mymaster 是这个哨兵的名称
2
sentinel down-after-milliseconds mymaster
5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
./redis-server /usr/local/redis/conf/sentinel-1.conf --sentinel   //启动哨兵

优点:主从可以⾃动切换,可⽤性更⾼
缺点:主从切换会丢失短暂数据,主节点的写能⼒和存储能⼒受限

springboot+springcloud+redis

redis:
    host: 47.100.54.149
    port: 6379
    password: 

  # 配置哨兵
  sentinel:
    master: mymaster # 配置的哨兵的名称
    nodes: 47.100.54.149:26379,47.100.54.149:26380,47.100.54.149:26381  # 三个哨兵的ip和端口号

应用程序  --> 哨兵---> 主服务器

                      从服务器--> 主服务器

当主服务器宕机后,哨兵指向从服务器,并重新投票选择吧从服务器。

Cluster集群介绍

      Sentinel解决了主从架构故障⾃动迁移的问题,但是Master主节点的写能⼒和存储能⼒依旧受限使⽤Redis的集群cluster就是为了解决单机Redis容量有限的问题,将数据按⼀定的规则分配到多台机器

官⽅要求:⾄少6个节点才可以保证⾼可⽤,即3主3从;扩展性强、更好做到⾼可⽤各个节点会互相通信,采⽤gossip协议交换节点元数据信息数据分散存储到各个节点上。

                             

写数据的时候,从三个主服务器中选择一个将数据写入。

主节点的写能⼒和存储能⼒受限
单台机器⽆法满⾜需求,因此把数据分散存储到多个机器
类似案例:mysql分库分表。

            

redis cluster 利用来进行数据的存储与读取:

               

集群分布需要创建对应数量的redis.conf文件,并进行配置

#是否开启集群
cluster-enabled yes
# ⽣成的node⽂件,记录集群节点信息,默认为
nodes.conf,防⽌冲突,改为nodes-6381.conf
cluster-config-file nodes-6381.conf
#节点连接超时时间
cluster-node-timeout 20000
#集群节点的ip,当前节点的ip
cluster-announce-ip 172.18.172.109
#集群节点映射端⼝
cluster-announce-port 6381
#集群节点总线端⼝,节点之间互相通信,常规端⼝+1万
cluster-announce-bus-port 16381

按上面配置布置一定的集群数量后,就可与开始开启集群cluster部署了:

# 开启方式
./redis-cli -a 123456 --cluster create //后面为对应的ip和端口号
172.18.172.109:6381 172.18.172.109:6382
172.18.172.109:6383 172.18.172.109:6384
172.18.172.109:6385 172.18.172.109:6386
-- cluster-replicas 1  // 这个 1 表示一主一从

 springboot中配置集群部署:

 # 集群配置, 与lettuce桶层级
    cluster:
    #命名的最多转发次数
    max-redirects: 3
    node: 8.129.113.233:6381,8.129.113.233:6382,8.129.113.233:6383,8.129.113.233:6384,8.129.113.233:6385,8.129.113.233:6386

⾼可⽤架构总结:
主从模式:读写分离,备份,⼀个Master可以有多个Slaves
哨兵sentinel:监控,⾃动转移,哨兵发现主服务器挂了后,就会从slave中重新选举⼀个主服务器
集群: 为了解决单机Redis容量有限的问题,将数据按⼀定的规则分配到多台机器,内存/QPS不受限于单机,提⾼并发量。

新版Redis6特性讲解:

 ⽀持多线程
redis6多线程只是⽤来处理⽹络数据的读写和协议解析上,底层数据操作还是单线程
执⾏命令仍然是单线程,之所以这么设计是不想因为多线程⽽变得复杂,需要去控制 key、lua、事务,LPUSH/LPOP 等等的并发问题默认不开启
io-threads-do-reads yes
io-threads 线程数

开启多线程后,是否会存在线程并发安全问题?不会有安全问题,Redis 的多线程部分只是⽤来处理⽹络数据的读写和协议解析,执⾏命令仍然是单线程顺序执⾏。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zero _s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值