Redis搭建集群详细教程

Redis集群:

redis集群可以分为两个层面:软件层面和硬件层面。

软件层面:一台电脑,但是该台电脑上启动了多个redis服务。

硬件层面:多台实体电脑,每台电脑都启动了一个或多个redis服务。

下面以一台电脑为例,六台服务器,即配置三主三从:

首先在Ubuntu中的Desktop创建文件夹conf,然后在该目录下新建文件名为7000.conf的文件,并将以下内容复制到7000.conf,保存。注意:ip地址需要修改你你自己虚拟机中的IP地址

port 7000
bind 192.168.3.222
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes

然后将7000.conf文件复制五份,分别命名为7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,再分别将其中的7000改为对应的文件名的数字,如7001.conf中修改完之后应该为:

 终端中输入ps -aux |grep redis 查看开启的redis服务端口,使用kill -9 端口号关闭所有的redis服务。

使用命令cd Desktop/conf 进入到创建的conf目录下

 然后分别输入 redis-server 7000.conf,redis-server 7001.conf,redis-server 7002.conf,redis-server 7003.conf,redis-server 7004.conf,redis-server 7005.conf,将6个redis服务全部开起来

由于redis的安装包中包含了redis-trib.rb,⽤于创建集群,因此将下面命令复制,这样可以在任何⽬录下调⽤此命令,先cd /usr/local/bin进入bin目录,ls查看是否有redis-trib.rb,若没有则使用下面命令复制:

sudo cp /usr/local/redis/src/redis-trib.rb /usr/local/bin/

注意:cp后面跟的是你的redis中的redis-trib.rb所在的路径,如果不知道可以使用如下命令查看

locate -redis-trib.rb

接着开始安装ruby环境,因为redis-trib.rb是⽤ruby开发的,在提示信息处输⼊y,然后回⻋继续安装 

 

为了防止接下来执行创建集群命令时,出现问题,先使用下面命令查看gem 源是什么地址,因为xx防火墙的原因导致安装的ruby不是最新版。

gem source -l 

 需使用命令更换gem 源,但是却报错了,

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

 搜索之后发现,原来.org结尾的域名已经发生了更换,

因此需将china后的.org改为.com:

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

然后通过gem 安装 redis相关依赖

sudo gem install redis

 此时再重新安装ruby

sudo apt-get install ruby

 绕了一大圈,终于最重要的时刻来了,执行创建集群的命令(注:ip地址为你的虚拟机的IP地址):

redis-trib.rb create --replicas 1 192.168.3.222:7000 192.168.3.222:7001 192.168.3.222:7002 192.168.3.222:7003 192.168.3.222:7004 192.168.3.222:7005

输入yes回车:

 集群搭建成功。

数据测试:

连接7000,加参数-c表示连接到集群

redis-cli -h 192.168.3.222 -p 7000 -c

然后写数据:

set name xiaohua

⾃动跳到了7001服务器,并写⼊数据成功,可以读取成功

在7001可以获取数据,如果写入数据又重定向到7000(负载均衡)  

 为什么会出现这种情况呢,在哪个服务器上写数据:CRC16

  • redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
  • Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的 时候看到set 和 get 的时候,直接跳转到了7000端⼝的节点
  • Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
  • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值