redis3.0伪集群安装步骤

Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障。但是数据冗余太大,内存浪费。所以,Redis 在 3.0 版本以后就推出了集群模式。

由于集群至少需要6个节点(3主3从模式),我们可以采用端口号来区分,模拟6台服务。

上传redis安装包到/usr/local/src目录   

解压安装包 

cd /usr/local/src
tar -zxvf redis-3.2.12.tar.gz

编译redis

make

创建集群目录

#mkdir /usr/local/redis-cluster

创建6个节点存放目录

#cd /usr/local/redis-cluster
#mkdir -p 6001/data 6002/data 6003/data 6004/data 6005/data 6006/data

创建脚本存放目录bin

#mkdir bin

复制刚才在解压编译的redis安装包的src目录下的

mkreleasehdr.sh   redis-benchmark redis-check-aof redis-check-dump

redis-cli redis-server redis-trib.rb 这6个脚本文件到bin目录

#cd /usr/local/src/redis-3.2.12/src
#\cp mkreleasehdr.sh redis-benchmark redis-check-aof  redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

复制配置文件redis.conf到第一个节点6001目录

#cp redis.conf /usr/local/redis-cluster/6001

编辑redis.conf配置文件

#cd /usr/local/redis-cluster/6001
#vi redis.conf

修改项目如下

port 6001(每个节点的端口号)

daemonize yes

bind 192.168.100.131(绑定当前机器 IP)

dir /usr/local/redis-cluster/6001/data/(数据文件存放位置)

pidfile /var/run/redis_6001.pid(pid 6001和port要对应)

cluster-enabled yes(启动集群模式)

cluster-config-file nodes6001.conf(6001和port要对应)

cluster-node-timeout 15000

appendonly yes

集群搭建配置重点就是取消下图中的这三个配置的注释

 

再复制出五个新 Redis 实例分别到6002,6003,6004,6005,6006

#\cp -rf /usr/local/redis-cluster/6001/* /usr/local/redis-cluster/6002
#\cp -rf /usr/local/redis-cluster/6001/* /usr/local/redis-cluster/6003
#\cp -rf /usr/local/redis-cluster/6001/* /usr/local/redis-cluster/6004
#\cp -rf /usr/local/redis-cluster/6001/* /usr/local/redis-cluster/6005
#\cp -rf /usr/local/redis-cluster/6001/* /usr/local/redis-cluster/6006

依次修改6002,6003,6004,6005,6006五个节点的redis.conf配置文件中的关于端口号的相关配置

6002节点redis.conf配置文件修改,使用vi编辑器命令修改替换端口 命令模式下输入 %s/6001/6002

port 6002

dir /usr/local/redis-cluster/6002/data/

pidfile /var/run/redis_6002.pid

cluster-config-file nodes6002.conf

6003节点redis.conf配置文件修改,使用vi编辑器命令修改替换端口 命令模式下输入 %s/6001/6003

port 6003

dir /usr/local/redis-cluster/6003/data/

pidfile /var/run/redis_6003.pid

cluster-config-file nodes6003.conf

6004节点redis.conf配置文件修改,使用vi编辑器命令修改替换端口 命令模式下输入 %s/6001/6004

port 6004

dir /usr/local/redis-cluster/6004/data/

pidfile /var/run/redis_6004.pid

cluster-config-file nodes6004.conf

6005节点redis.conf配置文件修改,使用vi编辑器命令修改替换端口 命令模式下输入 %s/6001/6005

port 6005

dir /usr/local/redis-cluster/6005/data/

pidfile /var/run/redis_6005.pid

cluster-config-file nodes6005.conf

6006节点redis.conf配置文件修改,使用vi编辑器命令修改替换端口 命令模式下输入 %s/6001/6006

port 6006

dir /usr/local/redis-cluster/6006/data/

pidfile /var/run/redis_6006.pid

cluster-config-file nodes6006.conf

其实我们也就是替换了上面的那四行配置而已。工具能干的人就懒惰一点没有什么不好,呵呵。

到这里,我们已经把最基本的环境搞定了,接下来就是启动了。

/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6001/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6002/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6003/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6004/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6005/redis.conf
/usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6006/redis.conf

查看启动进程

808b2507d5175d3e6eab652084aba350691.jpg

安装集群所需软件

yum -y install ruby
yum -y install rubygems

下载这个文件

链接:https://pan.baidu.com/s/1SBYTJ22FUTVOtsbiSmZNIg  密码:u3ji

进行安装,使用 gem install redis安装基本是无望了,卡死,更改了很多源无效,所以只好下载手动安装了

把下载好的文件上传到/usr/local/src目录

进入上传好的插件目录进行安装

#cd /usr/local/src
#gem install -l redis-3.2.1.gem

调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16384 个 solt(0--16383) ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配

/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.100.131:6001 192.168.100.131:6002 192.168.100.131:6003 192.168.100.131:6004 192.168.100.131:6005 192.168.100.131:6006

63cd23587914bf09a5b457075933acec95d.jpg

输入yes 

46a04f335182c386a9073c902bdde548e5d.jpg

M: e6a21c9f8bd16c9a082c9d93824faf00541f37ec 为主节点Id

S: 8fd465aa4d066d3771209d1a34ce4acfaba82da7 192.168.100.131:6004  replicates e6a21c9f8bd16c9a082c9d93824faf00541f37ec

从节点id 也就是说6004节点是6001的从节点

上图则代表集群搭建成功啦!!!

接下来我们链接6001节点

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.100.131 -p 6001

我们在6001节点set name  123456 发现自动重定向到6002节点了

af6951cf045c9046c6998e7cc69d037577d.jpg

这是由于redis集群内部会按照crc16算法把集群按16384个卡槽均分存储,而name通过crc16算法计算给分配到6002节点上了,那么就会自动重定向到6002节点存储。所以我们看到我们明明在6001节点set的数据为啥客户端会定向到6002节点的原因。

现在我们再回到6001节点客户端查询刚才存储的name的值

00ac304e4dec0493858393f830b1505f4c9.jpg

会定向到6002节点,redis分片集群就是通过crc16算法计算卡槽来重定向从哪里读取数据和存储数据,内部自动实现了重定向。

以上就是redis-cluster集群的搭建和测试步骤。

总结:

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的

所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。

那么redis是怎么做到的呢?首先,在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

转载于:https://my.oschina.net/shxjinchao/blog/1923715

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值