前言

随着业务并发量的不断扩张,redis内存数据库也会有处理不过来的情况,故redis也考虑集群来缓解并发的压力。

原理

Redis 集群原理图




redis 1亿 redis 1亿数据 多大_bc


1. Redis集群中总共了16384个Slot 用于存放redis的键值对。这个Slot会平均分配给每一组集群(图中3组就分配成5461,5461,5462)。

2. 键值对的键值 经过crc16哈希处理后再除以16384 取余数,然后放入对应编号的Slot中。

3. 应用程序连接任何一个主节点都能获取到键值对信息,并且如果写入操作,会自动告知应用你重连对应的节点去写入信息。

搭建

1. 环境准备linux, 安装ruby。

yum install ruby rubygems -y

设置:ali镜像

gem sources -a http://mirrors.aliyun.com/rubygems/    -- 加入ali源gem sources --remove https://rubygems.org/            -- 删除国外源


redis 1亿 redis 1亿数据 多大_redis_02


查看源为ali源。

gem install redis -v 3.3.3    -- 安装ruby驱动

创建redis实例的目录

mkdir -p /home/redis/master-replica/700{0..5}/datamkdir -p /home/redis/master-replica/700{0..5}/log

设置6个实例的配置文件

cat > /home/redis/master-replica/7000/redis.conf < /home/redis/master-replica/7001/redis.conf < /home/redis/master-replica/7002/redis.conf < /home/redis/master-replica/7003/redis.conf < /home/redis/master-replica/7004/redis.conf < /home/redis/master-replica/7005/redis.conf <

启动六个实例

redis-server /home/redis/master-replica/7000/redis.confredis-server /home/redis/master-replica/7001/redis.confredis-server /home/redis/master-replica/7002/redis.confredis-server /home/redis/master-replica/7003/redis.confredis-server /home/redis/master-replica/7004/redis.confredis-server /home/redis/master-replica/7005/redis.conf

查看六个实例是否启动

ps -ef | grep redis

最后构建集群

redis-trib.rb create --replicas 1 127.0.0.1:7000 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

-- replicas 1 表示几个从库。 第一个节点会自动成为管理节点

查看集群情况

redis-cli -p 7000 cluster nodes | grep master    -- 查看主节点redis-cli -p 7000 cluster nodes | grep slave       -- 查看从节点


redis 1亿 redis 1亿数据 多大_1亿数据 redis 内存_03


管理

增加集群节点

新增两个实例(看上面实例新建方式),并且启动。

redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000    -- 添加7006节点到7000集群中。

重新分配Slot

redis-trib.rb reshard 127.0.0.1:7000

重新查询Slot分配情况:


redis 1亿 redis 1亿数据 多大_rubygems_04


重节点加入集群

redis-trib.rb add-node --slave --master-id bcf4285a50d51929c21340bc25a05b9e77db4f74 127.0.0.1:7007 127.0.0.1:7000

bcf4285a50d51929c21340bc25a05b9e77db4f74 是该从节点对应的主节点node_id。 查看从节点情况:


redis 1亿 redis 1亿数据 多大_redis 1亿_05


删除集群节点

第一步重新分配Slot节点(平均分配给剩余节点)

redis-trib.rb reshard 127.0.0.1:7000

按照平均分成3份分配回去


redis 1亿 redis 1亿数据 多大_redis_06


done 表结束。 重复三次以上操作。

删除集群节点

redis-trib.rb del-node 127.0.0.1:7006 bcf4285a50d51929c21340bc25a05b9e77db4f74redis-trib.rb del-node 127.0.0.1:7007 19b771f682865b62c25818092fe82b4488dc26c5

ok 删除集群节点完成。 被删除的节点不能直接再加回去。

特别注意点:redis集群如果(redis.conf)设置上密码:

requirepass 123456masterauth 123456

则需要修改如下配置才能构建集群:

vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb


redis 1亿 redis 1亿数据 多大_bc_07


总结

Redis 集群操作简单,可靠,故障恢复也是非常智能,推荐。