【IT168 评论】一.为什么使用redis?
redis是一种典型的no-sql,工作在内存中,这就意味着它的读写效率是非常高的。所以大数据量的访问导致db的压力增大,所以为了业务的稳定,需要在db层上使用多级的redis提供缓冲区
二.为什么使用redis-cluster?
redis是一个内存数据库,这就意味着单个redis数据库的容量不能超过服务器的内存。所以对于大数据量的应用,就需要将数据分散到多台机器上,redis3.0版本以上开始支持cluster 。
三.redis-cluster实现原理?
redis-cluster采用的是hash slot(hash槽)[0-16383]slot,把多个redis实例整合到一起,形成一个集群。redis-cluster是一个无中心的结构,每个节点都保存其它节点的状态和它负责的槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
四.redis的投票和容错
1.投票:
当一个节点发现某个节点ping-pong不通,就会向其它节点广播该节点可能发生的错误,所有节点对该节点进行检测,超过半数,则认为该节点挂掉
2.容错
容错采用主备策略,master挂掉,slave立即接替工作
3.什么时候整个集群不可用?
a.集群中任意master挂掉,且没有slave。集群进入fail状态b.集群超过半数以上的master挂掉,无论是否有slave都进入fail状态
五.redis-cluster的搭建
集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。搭建一个伪分布式的集群,使用6个redis实例来模拟。
1.安装ruby环境
yum install ruby//ruby运行环境yum install rubygems//ruby包管理器将redis-3.0.0.gem上传到服务器(redis-trib.rb运行需要依赖的包)
gem installe redis-3.0.0.gem(安装该依赖包)
2.搭建集群
(1)拷贝bin
mkdir redis-cluster cd redis
cp -r bin ../redis-cluster/redis01 //拷贝
(2)配置文件修改
cd ../redis-cluster/redis01/rm -f dump.rdb (删除快照文件)
vim redis.conf
修改:
port 7001cluster-enabled yes
(3)创建六个节点
cp -r redis01/ redis02(一直改到6)vim redis02/redis.conf(分别改端口号)
(4)拷贝集群脚本到集群目录下
cd redis-3.0.0/src
cp *.rb /usr/local/redis-cluster/
(5)运行6个redis实例
vim startall.shcd redis01
./redis-server redis.confcd ..cd redis02
./redis-server redis.confcd ..cd redis03
./redis-server redis.confcd ..cd redis04
./redis-server redis.confcd ..cd redis05
./redis-server redis.confcd ..cd redis06
./redis-server redis.confcd ..
./startall.sh
(6)创建集群
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
六.测试集群
redis01/redis-cli -h 47.94.148.93 -p 7002 -c