Redis(2)
将数据从掉电易失的内存存放到能够永久存储的设备上
redis持久化 两种 :
RDB (redis DB)镜像文件,dump.rdb
AOF(append only file)日志文件,默认关闭
如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG GET DIR
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
两个集群中的概念
镜像:数据容量不变
切片:横向扩展
方案一
主从复制
在从服务器上写入
redis > SLAVEOF 192.168.56.201 6379
意思是,该从服务器是192.168.56.201 端口号为6379的服务器的slave
redis > SLAVEOF NO ONE
这条命令写入后,独立成为master,兽人永不为奴!
优点: 读效率提升,但是写的效率还是和以前一样,从服务器无法写,只能读
缺点:如果主服务器宕机,从服务器不能自动切换
方案二
主从复制+ 哨兵
1-n个哨兵负责观察1-n个主服务器
哨兵配置如下:
(1)配置哨兵的配置文件
在sentinel.conf中写(也可以自己创建一个文件,启动时绑定这个配置文件就可以了)
sentinel monitor mymaster 127.0.0.1 6379 2
Sentinel monitor
监视mymaster的主服务器,服务器ip和端口,将这个主服务器判断为下线失效至少需要2个Sentinel同意,多数Sentinel同意才会执行故障转移
(2)启动哨兵
redis-server /path/to/sentinel.conf --sentinel
经过测试,哨兵不是那么给力,如果向漫威的哨兵那么给力就好了
依旧没有解决写的问题
方案三
redis集群(redis3.0以上支持)
本次使用单机几个程序来模拟集群
(1)Redis集群的每个节点都有两种角色可选:主节点master node、从节点slave node。其中主节点用于存储数据,而从节点则是某个主节点的复制品
(2)故障转移
(3)redis分片
集群将整个数据库分为16384个槽位slot,所有key都数据这些slot中的一个,key的槽位计算公式为slot_number****=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数
(4)重定向
由于Redis集群无中心节点,请求会发给任意主节点
主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误
客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求
(5)redis集群的安装
0,准备的包
redis-3.0.0.tar.gz , redis-3.0.0.gem
gcc ,tcl, ruby,rubygems
1 解压安装redis到/opt/cluster
2 安装环境
yum -y install gcc tcl ruby rubygems
3 安装redis集群管理工具
gem install redis-3.3.0.gem
4 设置redis的配置文件
1 daemonize yes
2 port 7001
3 cluster-enabled yes注释放开
4 bind 网卡 127.0.0.1
如果有多个网卡会传递信息,会很麻烦
5 bin目录重命名为redis1
并拷贝六份分别是:redis2/redis3/redis4/redis5/redis6
6 修改2,3,4,5,6中的端口号分别是7002/7003/7004/7005/7006
7 启动六个redis实例
./redis-server redis.conf(6次)
8 管理集群
./redis-trib.rb create --replicas 1 192.168.202.101:7001 192.168.202.101:7002 192.168.202.101:7003 192.168.202.101:7004 192.168.202.101:7005 192.168.202.101:7006
ps: 1为每个master启动一个从节点
9 以集群方式连接集群
redis-cli -p 7001 -h 192.168.202.101 -c