redis 集群,分布式

其他方案:
 
 
 
主从复制,读写分离
从库作为读库,主库作为写库(默认),实现自动同步,实现冗余备份,读写分离
redis-server --port 6380 --slaveof 127.0.0.1 6379
或者运行时使用命令:slaveof ip  port
停止作为从库  slaveof no one
查看主从信息:info replication
登录从库查看:redis-server —port port        redis-cli -p port
从数据登录有密码的主库:从库配置文件设置masterauth  
 
过程:
从数据库启动时,发送SYNC给主库,主库收到命令会保存快照,在保存快照期间的命令缓存,完成后,主库把欢唱和快照发给从库(从网络直接发送,不经过硬盘,需要手动开启),从库载入快照和缓冲,执行。这种复制初始化完成后,主库每当收到写命令就把命令同步给从库。
 
断线重连后,主库把短线期间命令发给从库。
 
Redis使用TCP协议,可以使用telnet工具连接。需要密码时,还要发送AUTH命令进行验证
 
主库执行命令与将命令传给从库是异步进行的。可以使用命令限制至少同步给指定数量的从数据库时,主数据库才可以写
min-slaves-to-write 3
min-slaves-max-lag 10  数据库最长失去连接的时间,由此判断正在连接的数量
 
从数据库也可又有从数据库,形成图结构。
 
手动解决主数据库崩溃:
1.从数据库使用slaves no one 将从数据库升级成主数据库
2.设置崩溃数据库使其成为新的从数据库,自动同步
3.避免盲目重启主库,应先设置新主库
 
哨兵
作为独立进程,监控主从数据库是否正常运行
主库故障时,转移主库角色
 
启动哨兵:
1.建立配置文件,sentinel.conf, 内容:
sentinel monitor mymaster 127.0.0.1 6379 1  最后的参数表示需要几个哨兵节点同意
2.启动进程:
$ redis-sentinel /path/to/sentinel.conf
配置哨兵配置主库,哨兵会自动发现从库
 
哨兵默认端口 26379
使用redis-cli连接
 
哨兵每隔几秒产生一些info命令和ping命令,确保数据库正常和判断有无新的哨兵和数据库加入进来。
 
config set 键 值
 
集群:
拥有和单机一样的性能,支持单机命令,多建命令只有位于同一个节点才可以。
1.cluster-enabled 配置属性打开yes   至少三个主数据库,集群会将当前节点记录的集群状态持久化的存储在指定文件中,默认为当前目录的nodes.conf文件
 
 
故障恢复
每个节点定期向其他节点发送ping命令来判断是否下线。
所有节点投票决定某一节点是否下线。
选择新主库采用raft算法。
 
键与插槽的对应关系:
Redis将键名使用CRC16算法计算出散列值,然后取16384的余数(这一过程类似于hashmap取bucket位置的操作),这样使得每个键都可以分配到16384个插槽中。
 
 
 
 
原文地址:https://www.cnblogs.com/wanglao/p/11162892.html