Redis集群的搭建

Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个slot(槽),每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器,现在计划是在一台机器上模拟一个集群,当然,这和生产环境的集群搭建没本质区别。

1、启动Redis多个实例

      在Redis安装目录下创建目录clusterconf,并编写redis6380.conf、redis6381.conf、redis6382.conf、redis6390.conf、redis6391.conf、redis6392.conf  6个配置文件,这6个配置文件用来启动6个实例,后面将使用这6个实例组成集群

     以redis6380.conf为例,配置文件需要修改如下几项(其他的conf文件,除了端口,其他的一致)

port 6380(每个节点的端口号)
bind 192.168.230.129(绑定当前机器 IP,需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群)
pidfile /var/run/redis_6380.pid (pidfile文件对应6380)
cluster-enabled yes (启动集群模式,把注释#去掉)
cluster-config-file  /usr/local/redis/clusterconf/data/nodes-6380.conf (集群的配置文件,6380和port要对应)
cluster-node-timeout 15000 (请求超时,默认15秒,可自行设置)

appendonly yes

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

 

分别启动6个实例:

 

2.创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,将它复制到 /usr/local/redis/bin 目录中,可以直接在命令行中使用了

 但是这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

在/usr/local下新建文件夹ruby(mkdir ruby),执行以下命令
① wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
② tar -zxvf ruby-2.3.1.tar.gz
③ cd ruby-2.3.1
④ ./configure -prefix=/usr/local/ruby
⑤ make && make install    //过程会有点慢
⑥ gem install redis --version 3.3.0  //若没有gem需要安装yum install gem -y
   #由于源的原因,可能下载失败,就手动下载下来安装 ,download地址:http://rubygems.org/gems/redis 
   #gem install -l /data/soft/redis-3.3.0.gem 

执行创建集群命令:

../redis-trib.rb create --replicas 1 192.168.230.129:6380 192.168.230.129:6381 192.168.230.129:6382 192.168.230.129:6390 192.168.230.129:6391 192.168.230.129:6392

 --replicas 1  表示主从复制比例为 1:1,即一个主节点对应一个从节点,前面的三个为主,后面的三个为从,形式就是ip:port

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

3.验证一下

   登录集群客户端,通过集群命令看一下状态和节点信息等

../redis-cli -c -h 192.168.230.129 -p 6380    加参数 -C 表示已集群的方式连接,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略

 执行命令 -> set name zhangsan ->执行结果如下:

 

 然后在另外一个master 6382端口,查看 key 为 name 的内容 -> get name ->执行结果如下:

 

 Redis 集群是采用哈希槽 (hash slot)的方式来分配数据的的。

 Redis cluster 默认分配了16384个slot,当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,
 具体算法就是:CRC16(key)%16384。所以我们在测试的时候看到set和get的时候,直接跳转到了6381端口的节点。

 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

原文地址:https://www.cnblogs.com/maybesuch/p/10270742.html