Redis持久化
rdb方式:
RDB方式的持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘
RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:
save 900 1
save 300 10
save 60 10000
save开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是"或"的关系,"save 900 1"表示15分钟内至少1个键被更改则进行快照
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存;根据数据量大小与结构和服务器性能不同,这个时间也不同;通常将记录一千万个字符串类型键,大小为1GB的快照文件载入到内存中需要花费20~30秒中
问题总结: 通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据;如果数据很重要以至于无法承受任何损失,则……
aof方式:
appendonly yes [将no改为yes,这样aof方式的持久化就开启]
redis主从复制:
为了高可用,引入redis的主从复制的概念:
第一步:复制一个redis
第二步:在redis.conf文件中的端口改为6380
第三步:打开slaveof注释并将主机的ip和端口配置 slaveof minimaster 6379
从机是只读的
Redis集群
1.集群通信是通过"ping-pong"机制进行通信
2.客户端不需要将所有的节点都连接上,只需要连接其中一个节点即可
3.集群中存储数据是存储到一个个的槽中,集群中槽的个数是固定的:16384;槽的编号是[0-16383];在集群中存储数据时,会根据key进行计算,计算出一个结果,然后将这个结果和16384取余,余数就是这个key将要存储的槽的编号
4.槽的编号之间不能断开
5.槽的计算会将数据保存的很平均,不会产生一个槽满一个槽空的情况
redis-cluster投票:容错
什么时候整个集群不可用(cluster_state:fail)??
1.如果集群任意master挂掉,且当前master没有slave,集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态
2.如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态
集群搭建:
由于集群的脚本是ruby语言编写的,所以需要准备ruby的环境
安装ruby:
yum install -y ruby
yum install -y rubygems
安装ruby和redis的接口程序
拷贝redis-3.0.0.gem至 /usr/local下
执行:
gem install /usr/local/redis-3.0.0.gem
集群环境最少要三台机器(master),每个主机都需要配置一个从机,即总共需要6台机器
6台机器的端口号如下:
7001 7002 7003 7004 7005 7006
在 /usr/local 下新建rediscluster
mkdir redisicluster
cp /usr/local/redis /usr/local/rediscluster
cd /usr/local/rediscluster
mv redis redis01
cp ./redis01 ./redis02 …….
分别修改端口:(redis.conf)
port: 7001 / 7002 / 7003 / 7004 / 7005 / 7006
cluster-enable => yes
cp /usr/local/redis-3.0.0.gem/src/redis-trib.rb /usr/local/rediscluster
cd /usr/local/rediscluster
vi start-all.sh [启动脚本]
#!/bin/bash
cd redis01/bin
./redis-server redis.conf
cd ../..
cd redis02/bin
./redis-server redis.conf
cd ../..
cd redis03/bin
./redis-server redis.conf
cd ../..
cd redis04/bin
./redis-server redis.conf
cd ../..
cd redis05/bin
./redis-server redis.conf
cd ../..
cd redis06/bin
./redis-server redis.conf
cd ../..
sh start-all.sh
[权限不够] chown 777 start-all.sh
启动成功:
执行命令:
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006