Redis之cluster集群

现状问题:

①redis提供的服务OPS可以达到10万/秒,当前业务的OPS已经达到了10万/秒

②内存单机容量达到256G,当前业务需求内存容量1T

解决方案:使用集群的方式可以快速的解决上述问题

集群架构:集群就是通过网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

集群的作用: 

①分散单台服务器的访问压力,实现负载均衡

②分散单台服务器的存储压力,实现可扩展性

③降低单台服务器宕机带来的业务灾难

cluster集群的数据存储设计:

①通过CRC16获取key的hash值,将获取到的值%16384,获取key应该保存的位置

②将所有的存储空间计划分割成16384份也就是slot(槽),每台主机保存一部分,每分代表的是一个存储空间,不是一个key的保存空间

③将key按照计算出的结果放到对应的存储空间

提高扩展性:假如新增了一个服务器则将各个服务器中一部分槽分配给新增服务器中,对应的下线一个服务器则将该服务器中的槽归还给原主

集群内部通讯设计:

①各个数据库相互通信,保存各个槽中的编号数据

②一次命中则直接返回

③一次未命中,保存具体的地址

cluster集群的搭建:

一、手动搭建

①配置服务器(3主3从)

3主分别为:6379 6380 6381  3从分别为:6382 6383 6384

配置文件:

通过命令创建其余配置文件:

sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf

通过命令将6个服务器启动起来:

redis-server /root/redis-4.0.0/conf/redis-6379.conf

通过ps -ef | grep reids 可以看出启动的服务后面都加上了cluster

 查看槽可以发现没有,这是因为还没有分配

 data里面已经生成了对应的文件

 

 查看一下配置文件的信息

查看一下cluster集群的信息 

redis-cli -p 6379 cluster info

 

 cluster集群处于fail状态和只有自己在集群里面,槽也没有分配

通过cluster meet ip port添加一个节点,将6个服务全部添加进cluster集群中

redis-cli -p 6379 cluster meet ip port

 第一个16进制长串就是服务的runid

 主从配置:

使用cluster replicate <master-id>命令:进入一个从节点,切换其主节点

redis-cli -p 6382 cluster replicate <master-runid>

6379master打印的日志,已经数据同步了

 6382slave打印的日志

 分配slots:

redis集群中有16383个槽,目前要分配到6379、6380、6381三个master中

即6379:0~5461          6380:5462-10922           6381:10923-16383

redis-cli -p 6379 cluster addslots $(seq 0 5461) //添加
redis-cli -p 6380 cluster addslots $(seq 5462 10922)
redis-cli -p 6381 cluster addslots $(seq 10923 163838)
redis-cli -p port cluster delslots $(seq xxx xxx)//删除

 可以通过以下命令查看槽的分配:

 存储或获取数据的命令:

redis-cli -c -p 6379 

 

  

 说明:关闭之后下次启动还是以集群的形式启动,信息已经保存到dump文件中了

二、redis官方推荐的redis-trib.rb搭建集群(推荐使用这种方式搭建集群)

1.搭建ruby环境

①卸载ruby,之前没有安装过的可忽略

yum remove ruby

 ②下载、编译与安装

安装zlib-devel与openssl-devel
yum install zlib-devel
yum install openssl-devel
下载:
 wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
解压:
tar -zxvf ruby-2.5.0.tar.gz
进入目录:
cd ruby-2.5.0
创建安装目录:
mkdir -p /usr/local/ruby
配置并制定安装位置:
./configure --prefix=/usr/local/ruby
编译与安装
make  && make install
进入目录:cd /usr/local/ruby
让ruby添加到用户的访问变量中:cp bin/ruby /usr/local/bin
让gem添加到用户的访问变量中 : cp /usr/local/ruby/bin/gem /usr/local/bin
输入ruby -v,看到如下信息说明成功:

 

③安装ruby的redis客户端 

下载:wget https://rubygems.org/downloads/redis-4.0.0.gem
安装:gem install -l redis-4.0.0.gem,看到如下,成功

 

④校验安装

gem list -- check redis gem

看到如下信息,说明成功 

⑤cd /root/redis-4.0.0/src 执行 ./redis-trib.rb命令,执行成功会出现如下信息:

2. 搭建clustre集群

①首先配置配置文件,分别配置3主6379、6380、6381,3从6382,6383,6384

sed 's/6379/6380/g' redis-6379.conf > redis-6380.conf

 ②依次启动节点

redis-server /root/redis-4.0.0/conf/redis-6380.conf

③创建cluster集群

./redis-trib.rb create --replicas 1 ip:port ip:port ...
// --replicas 1就是根据你的节点数自动划分主节点和从节点,1就是对应着一个master对应一个slave,如果节点数不匹配会报错

可以看出使用trib命令,会自动划分主从节点,自动分配槽

 

 

Cluster配置:

·添加节点:

cluster-enabled yes|no

·cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容

cluster-config-file <filename>

·节点服务响应超时时间,用于判断该节点是否下线或切换为从节点

cluster-node-timeout <milliseconds>

·master连接slave的最小数量

cluster-migration-barrier  <count>

Cluster节点操作命令:

·查看集群节点信息

cluster nodes

·进入一个从节点redis,切换其主节点

cluster replicate <master-id> //运行id

·新增一个节点

cluster meet ip:port

·忽略一个没有槽的节点 

cluster forget <id>

·手动故障转移

cluster failover

redis-trib命令:

·添加新节点

redis-trib.rb add-node

·删除节点

redis-trib.rb del-node

·重新分片

redis-trib.rb reshard

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值