redis集群的搭建

2019-06-30 03:58:12 921 思小齐 思小齐

一.为什么使用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 会根据节点数量大致均等的将哈希槽映射到不同的节点
clipboard.png

四.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 7001
    cluster-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.sh

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..


./startall.sh

(6)创建集群

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006

六.测试集群

redis01/redis-cli -h xx.xx.xx.xx -p 7002 -c

(写博客的时候千万不要贴上自己的服务器地址。刚刚贴上就被攻击了)