Redis主从复制

简介:

主机数据更新后根据配置和策略,自动同步到备机的 master/slaver机制 ,Master以写为主,Slaver以读为主。

从机建立时,会把主机的数据同步过来。Redis主从复制时异步的,主服务器不会等待从服务器确认数据已收到后再继续处理其他命令。 Redis2.8 引入了部分重同步(PSYNC)命令。在网络中断等情况下,从服务器重新连接主服务器时,Redis会尝试使用PSYNC来避免全量同步,只传输缺失的数据部分,从而提高效率。只有当PSYNC失败时,才会进行全量同步。

实现读写分离,性能扩展。 容灾的快速恢复。 一主多从。

一主两从示例:

在一台主机中启动两个redis-server,要创建一个新的redis.conf,并创建三个redis.conf包含以下内容

include /path/[original_redis_conf].conf
pidfile /var/run/[pid_name].pid
port [port_name]
dbfilename [file_name].rdb

然后再在指定目录的终端下启动三台redis

redis-server [subRedisConf].conf

通过端口号连接到对应的redis-server

redis-cli -p [port]

查看当前客户端连的服务端的状态

info replication
#Replication
role:master // 当前角色[主机/从机]
connected_slaves: 2333 //当前从机数量
slave0: ...
slave1: ... //从机信息

将6380和6381设置为6379的从机,需要在对应的客户端执行以下命令

slaveof [ip] [port]

在主机上执行写操作时,从机 得到数据 从机只能执行读操作,不能写入新数据。

// 6379主机
set a1 v1
// 6380从机
get key * -->
return:    a1
set a2 v2
return: (error) READONLY You can't write against a read only replica.

一主两从

从机停止后,主机不会停止 从机启动后,默认role是master,需要重新建立主从关系。

主机停止后,从机不会停止。 主机再次启动后,主从关系不用重新建立。

复制原理:

1、从机连接主服务器之后,从服务器向主服务发送数据同步消息

2、主服务器接到从服务器发送过来的同步消息,将主服务器数据进行持久化rdb文件,把rdb文件发送到从服务器,从服务器读取rdb中的数据

3、每次主机进行写操作,都会把数据更新同步到从机。

多层从机:

部署多层从机后,方便管理。

缺点是一个点从机关机后,后续从机都无法拿到新的数据。

同时成为主机和从机

从机继承主机:

// 将从机变成主机
slaveof no one

在主机下线后,

哨兵模式(sentinel):

实现自动将从机变成主机。

配置一个哨兵sentinel.conf,包含以下内容

// mymaster 是给监控对象起的名称 num为至少有多少个哨兵同意迁移的数量
// 当主机
sentinel monitor mymaster [ip] [port] [num]

哨兵启动方式

redis-sentinel /path/to/sentinel.conf

哨兵启动后,会显示部署哨兵的主机信息,还有所有的从机信息,随后跟随的是哨兵记录的日志信息。

优先级:

1、当主机下线后,从机选举产生新的主机,根据redis.conf中配置的replica-Prioriry从机优先级决定,值越小优先级越高。

2、选择偏移量最大的(获取原主机数据最全的)

3、选择runid最小的从机(redis实例启动后随机生成)

在新的主机被退选出来时,旧的主机会变为从机。

复制延迟:

所有的写操作都是在Master上操作,然后再同步更新到slave从机上。系统繁忙时会有延迟问题。(从机机器数量的增加会增加复制的延迟。

Jedis 添加哨兵方式:

sentinelSet.add("ip:port")
jedisSentinelPool=new JedisSentinelPool("mymaster",sentinelSet,jedisPoolConfig);

补充内容:

上一篇
下一篇