Redis快速入门(六)

Redis主从复制

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主,
特点:
读写分离,性能扩展,缓解访问压力。
容灾快速恢复,从服务器挂掉了,可以转换到另外的从服务器。
在这里插入图片描述
一主多从,只能有一台主服务器,老大只能有一个,
问从服务器挂了可以切换,主机挂了呢?
可以配置一个集群,一台主机多个从机,一个主机挂掉换另一个主机。
在这里插入图片描述

怎么玩?怎么配置?
1.创建一个/myredis文件夹

mkdir /myredis

2.复制redis.conf配置文件到文件夹中

cp /etc/redis.conf /myredis/redis.conf

3.配置一主两从,配置三个配置文件
redis6379.conf
redis6380.conf
redis6381.conf

4.在三个配置文件中写入内容

//创建相应文件
vi redis6379.conf
//加入以下内容
//引入公共部分
include /myredis/redis.conf
//配置pid的位置
pidfile /var/run/redis_6379.pid
//端口号
port 6379
//rdb文件名称
dbfilename dump6379.rdb

:wq!

编写另外两个直接用复制算了,里面的内容记得改哟!!!

5.启动三台redis服务器

redis -server redis6379.conf
redis -server redis6380.conf
redis -server redis6381.conf

查看当前的主从情况
info replication 打印主从复制的相关信息

使用不同的终端连接三个服务器
连接上端口号为6379的服务器
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381

info replication
显示 role 是master

7.配置从库不配主库
在从服务器上
主机的ip和端口号
slaveof
可以使用
slaveof 127.0.0.1 6379

然后 从机的角色就变成slave了
主机能写,从机只能读。

主从中三个典型问题

切入点问题?slave01,slave02是从头开始复制还是从切入点开始复制?之前的是否会复制?
从机是否可以写?set可否?
主机shutdown后情况如何?上机是上位还是原地待命?

1.从服务器shutdown之后,重启后变成了master,需要重新加入,加入后,会全部复制主服务器的内容.
2.主机shutdown之后, 从服务器会知道,但还是从服务器,主服务器重新启动后,而且还知道从服务器,

主从复制的原理

在这里插入图片描述

Slave 启动成功连接到 master 后会发送一个 sync 命令;

Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master 将传送整个数据文件到 slave,以完成一次完全同步。

全量复制:slave 服务器在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master 继续将新的所有收集到的修改命令依次传给 slave,完成同步。

但是只要是重新连接 master,一次完全同步(全量复制) 将被自动执行。

在这里插入图片描述

薪火相传

上一个slave可以是下一个slave的master。slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效地减轻master的写压力,去中心化降低风险,
用slaveof
中途变更转向:会清除之前的数据,重新拷贝最新的,风险是一旦某个slave宕机,后面的slave都没法备份了主机挂了,从机还是从机无法写数据了。

反客为主

当一个master宕机后,后面的slave可以立即升为master,后面的slave不做任何修改,用slaveof no one 将从机变成主机。需要手动完成。也可以使用哨兵模式自动完成,

哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障根据投票数自动将从库变为主库,

相关配置
cd /muredis/
vi sentinel.conf
写道sentinel.conf文件中
sentinel monitor mymaster 127.0.0.1 6379 1
其中mymaster为监控对象的服务器名称,1为至少有多少个哨兵同意迁移的数量。

启动哨兵,

redis-sentinel sentinel.conf 

当主机挂掉,从机选举中产生新的主机
哪个从机会被选举为主机呢?根据优先级别:slave-priority,原主机重启后会变成从机。

复制延时

由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时

候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。

在这里插入图片描述

redis 集群

问题?
容量不够,redis 如何进行扩容?

并发写操作, redis 如何分摊?

另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。

之前通过代理主机来解决,但是 redis3.0 中提供了解决方案。就是无中心化集群配置。

什么是集群
redis集群实现了redis的水平扩容,即启动N个redis节点。将整个数据库分布存储在这个N个节点中,每个节点存储总数的N分之一,Redis集群通过分区(partition)来提供一定程度的可用性(availablilty):即使集群中有一部分节点失效或者无法通讯,集群也可以继续处理命令请求,

删除持久化数据
将rdb,aof文件都删除掉。

搭建redis集群
在redis6379.conf中配置

include /myredis/redis.conf
pidfile "/var/run/redis_6379.conf"
port 6379
dbfilename "dump6379.rdb"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 150000

给其他的服务器复制一份,并且把里面的端口号改一下

在下面输入这个,把6379替换成6380
$s/6379/6380

启动所有的redis服务器,将所有节点合成一个集群
组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都正常生成,

切换到这个目录下
cd /opt/redis-6.2.1/src

redis-cli--cluster create --cluster-replicas 1 192.168.11.101:6079 所有的服务器ip地址和端口号,

--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组,

连接集群
redis-cli -c -p 6379

redis cluster 如何分配六个节点?

一个集群至少有三个主节点
选项 --cluster-replicas 1 表示我们希望为集群中的每一个主节点创建一个从节点。分配原则尽量保证每个主数据库运行在不同的ip地址,每个从库和主库不在一个ip地址上。

什么是slots,
一个redis集群包含16384个插槽(hash slot)数据库中每个键都属于这16384个插槽的其中一个
集群使用公式CRC16(key)%1634来计算key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。集群中的每个节点负责处理一部分插槽,
在这里插入图片描述
在这里插入图片描述
不在一个solt下的键值,是不能使用mget,mset等多键操作,
可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个solt中去

mst k1{user} v1 k2{user} v2

在集群中录入值,在redis-cli每次录入,查询键值,redis都会计算出该key应该送往哪个插槽,如果不是该客户端对应服务器的插槽,redis就会报错,并告知应该往的redis实例地址和端口,
redis-cli客户端提供了-c参数实现自动重定向,
如redis-cli -c -p 6379 登入后,再录入,查询键值对可以自动重定向,

查询集群中的值
CLUSTER GETKEYSINSLOT 返回count个slot槽中的键,

故障恢复
如果主节点下线?从节点能否自动生为主节点?注意:十五秒超时,主节点恢复后,主从关系如何?主节点回来变成从机
如果所有某一段插槽的主节点都宕掉,redis服务是否还能继续?如果某个插槽的主从都挂掉了,而cluster-require-full-coverage为no,那么,该插槽数据全都不能用,也无法存储,
redis.conf中的参数cluster-require-full-coverage

集群的jedis开发

在这里插入图片描述
redis集群优势:实现扩容,分摊压力,无中心配置相对简单,
redis集群不足:多键操作是不被支持的,多见的redis事物是不被支持的,lua脚本不被支持,由于集群方案较晚,不普及,迁移难度大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值