一:redis的主从复制
redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
修改配置文件redis.conf,只修改从数据库
slaveof ip port slaveof no one
可以把从数据库转为主数据库 通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
二:redis主从复制的注意事项
如果你使用主从复制,那么要确保你的master激活了持久化,或者确保它不会在当掉后自动重启。slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
在配置redis复制功能的时候如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码,这样从数据库在连接主数据库时就会自动使用auth命令认证了。相当于做了一个免密码登录。
三:redis的Sentinel
edis的sentinel系统用于管理多个redis服务器,该系统主要执行三个任务
1:监控
2:提醒
3:自动故障转移
配置sentinel
修改sentinel.conf文件 sentinel monitor mymaster 192.168.1.170 6379 2 启动sentinel redis-sentinel
sentinel.conf sentinel日志明细说明
主观下线和客观下线 通过订阅指定的频道信息,当服务器出现故障得时候通知管理员
客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器,你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。
比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
四:Sentinel的一些命令
INFO------sentinel的基本状态信息
SENTINEL------masters 列出所有被监视的主服务器,以及这些主服务器的当前状态
SENTINEL slaves <master name>------列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
SENTINEL get-master-addr-by-name <master name>------返回给定名字的主服务器的 IP 地址和端口号
SENTINEL reset <pattern>------重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
SENTINEL failover <master name>------当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新
五:redis集群简介
redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。redis集群提供了以下两个好处
1:将数据自动切分(split)到多个节点
2:当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。 一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。
集群中的主从复制
集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作。 注意:如果某一个主节点和他所有的从节点都下线的话,redis集群就会停止工作了。
redis集群不保证数据的强一致性,在特定的情况下,redis集群会丢失已经被执行过的写命令
使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因,有时候由于网络原因,如果网络断开时间太长,redis集群就会启用新的主节点,之前发给主节点的数据就会丢失。
六:redis集群安装配置
下载redis3.0.0
修改配置文件
redis.conf daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
要让集群正常运作至少需要三个主节点 创建集群命令 ./redis-trib.rb create --replicas 1 192.168.1.160:7000 192.168.1.160:7001 192.168.1.160:7002 192.168.1.160:7003 192.168.1.160:7004 192.168.1.160:7005
七:redis集群操作
使用redis-cli客户端来操作redis集群 使用命令 redis-cli -c -p [port]
查看集群中的所有节点信息 redis-cli -c -p 7000 cluster nodes [| grep master]
八:redis集群添加节点
根据添加节点类型的不同,有两种方法来添加新节点 主节点:
如果添加的是主节点,那么我们需要创建一个空节点,然后将某些哈希槽移动到这个空节点里面 从节点:
如果添加的是从节点,我们也需要创建一个空节点,然后把这个新节点设置成集群中某个主节点的复制品。
命令
添加节点到集群:redis-trib.rb add-node 192.168.1.160:7006 192.168.1.160:7000
(添加主节点)重新分片,重新分片操作基本上就是将某些节点上的哈希槽移动到另外一些节点上面.
使用命令./redis-trib.rb reshard 192.168.1.160:7000
执行 redis-trib 的第一步就是设定你打算移动的哈希槽的数量:
第二步是输入接收solts的节点ID
接着 redis-trib 会向你询问重新分片的源节点(source node),也就是需要从哪个节点中转移哈希槽(可以使用all)
最后输入 yes 并使用按下回车之后, redis-trib 就会正式开始执行重新分片操作
(添加从节点)把集群中的某个节点设置为从节点:
redis-cli -c -p 7007 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38
九:redis集群删除节点
如果是主节点,先把主节点中的哈希槽转移到其他节点中,然后删除这个节点。
redis-trib.rb reshard 192.168.1.160:7000
redis-trib.rb del-node 192.168.1.160:7000 7002e2b66b9d3b384981bcbe7d09954638ed82fb
如果是从节点,直接删除即可。
redis-trib.rb del-node 192.168.1.160:7000 7002e2b66b9d3b384981bcbe7d09954638ed82fb