简介:
主机数据更新后根据配置和策略,自动同步到备机的 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);