Redis集群
当单台redis服务器的内存存储空间有限的情况下,可以使用redis集群扩展存储空间
一、redis-cluster架构图
架构细节
1、 使用PING-PONG机制,检测节点的健康状态
2、所有的redis节点彼此互联
3、 每个节点中保存的数据不一样,为了保证集群的高可用,数据的完整性,需要给每个节点配置从机
4、节点是否fail通过投票机制判断:集群中超过半数的节点检测失效时才fail。因此集群中至少有三个节点。
5、客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
6、redis-cluster把 [0-16383] 个 slot(槽)上均匀的分配到集群中的物理节点上,cluster 负责维护 节点 — 槽 — 值
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
例如:下图是一个典型的三台主机的分配方式
二、redis集群的搭建
redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。
redis集群至少需要6台服务器。
解决方案:可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
1、使用ruby脚本搭建集群。需要ruby的运行环境
安装ruby:
yum install ruby
安装ruby包管理器:
yum install rubygems
2、安装ruby脚本运行使用的包
在线安装:
gem install redis -v 3.0.7
离线安装:
现将redis-3.0.7.gem拷贝到服务器上
gem install redis-3.0.7.gem
3、找到一会要执行的ruby脚本文件
[root@helen-linux64-03 ~]# cd redis-3.0.7/src
[root@helen-linux64-03 src]# ll *.rb
-rwxrwxr-x. 1 root root 60527 Jan 25 2016 redis-trib.rb
4、创建六个redis实例
在 /usr/local 下创建 redis-cluster文件夹
在这个文件夹下复制6个redis实例
如下,是已经创建完6个实例的情况:
5、修改配置文件
修改每个实例的配置文件:
cluster-enabled yes前的注释去掉
修改端口号分别为 7001 - 7006
6、启动每个实例
为了方便启动,可以写一个批处理文件 cluster-start.sh 放在 redis-cluster 文件夹下面
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 .. |
同时也可以写一个批处理批量关闭:cluster-stop.sh
cd redis01 bin/redis-cli -p 7001 shutdown cd .. cd redis02 bin/redis-cli -p 7002 shutdown cd .. cd redis03 bin/redis-cli -p 7003 shutdown cd .. cd redis04 bin/redis-cli -p 7004 shutdown cd .. cd redis05 bin/redis-cli -p 7005 shutdown cd .. cd redis06 bin/redis-cli -p 7006 shutdown cd .. |
执行批量启动服务的脚本
[root@helen-linux64-03 redis-cluster]# ./cluster-start.sh |
执行批量停止服务的脚本
[root@helen-linux64-03 redis-cluster]# ./cluster-stop.sh |
要给这两个文件添加执行权限
[root@helen-linux64-03 redis-cluster]# chmod u+x cluster-start.sh [root@helen-linux64-03 redis-cluster]# chmod u+x cluster-stop.sh |
启动后查看服务是否成功启动
ps aux | grep redis |
7、运行ruby脚本
进入前面第3步ruby脚本所在的目录,或将ruby脚本拷贝至redis-cluster中,执行下面的命令
其中的 1 意思是 1 台主机配置 1 台从服务器:
./redis-trib.rb create —replicas 1 192.168.100.10:7001 192.168.100.10:7002 192.168.100.10:7003 192.168.100.10:7004 192.168.100.10:7005 192.168.100.10:7006 |
看到下面的界面后,输入“ yes”,脚本会自动创建集群中的节点,并自动分配主从服务器
看到下面的界面,则说明集群创建成功:
三、使用cli连接集群
一定要写 -c 参数,表示连接集群
集群会自动计算当前key所在的 槽(slot),并且 redirect 到相应的节点并存储。
使用客户端工具可以查看下面的 key a 的值被存储在了 192.168.100.53:7003 上
还没有评论,来说两句吧...