博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建Redis原生集群
阅读量:6885 次
发布时间:2019-06-27

本文共 4656 字,大约阅读时间需要 15 分钟。

一、Linux下集群搭建

系统环境:deepin/Ubuntu

redis版本:redis-3.0.1

节点:使用master-slave,搭建分布式,主节点和从节点各自至少需要3个节点,总共6个节点。

注:本文主要标注的是一台机器下搭建的伪分布式,通过端口进行模拟的redis集群。

1. 去官方网站下载redis-3.0.1.tar.gz或者通过一下的命令进行操作

wget http://download.redis.io/releases/redis-3.0.1.tar.gztar xvzf redis-3.0.1.tar.gzcd redis-3.0.1/make -j#apt-get install tclmake test###将redis安装到/usr/local/redis上#cd src && make PREFIX=/usr/local/redis install复制代码

2. 在/usr/local/目录下新建文件夹redis-cluster,并在redis-cluster目录下创建7001~7006文件夹.

cd /usr/localmkdir redis-clustercd redis-clustermkdir 7001 7002 7003 7004 7005 7006cp /usr/local/redis/ /usr/local/redis-cluster/7001 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7001/bincp /usr/local/redis/ /usr/local/redis-cluster/7002 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7002/bincp /usr/local/redis/ /usr/local/redis-cluster/7003 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7003/bincp /usr/local/redis/ /usr/local/redis-cluster/7004 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7004/bincp /usr/local/redis/ /usr/local/redis-cluster/7005 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7005/bincp /usr/local/redis/ /usr/local/redis-cluster/7006 -rcp /usr/local/redis-3.0.1/redis.conf  /usr/local/redis-cluster/7006/bin复制代码

3. 将7001~7006目录下的bin/redis.conf配置文件打开,并修改其中的字段,以7001/bin/redis.config为例。下面是一个最少选项的集群的配置文件 : 注意如果使用的是单机测试,最好把cluster-config-file nodes.conf设置为对应的 端口 nodes-xxx.conf,还有就是 pid 设置为当前 目录下 pidfile ./redis.pid。

port 7001cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes复制代码

4.然后在安装的根目录下写启动脚本和关闭服务脚本,以及链接cluster-node的ruby脚本。

4.1 安装ruby脚本支持

    因为官方原生的cluster是使用ruby脚本语言编写的,该执行文件在下载文件的src目录下的redis-trib.rb,通过扩展名即可知道他是ruby文件。

sudo apt-get install rubysudo apt-get install ruby gem复制代码

4.2 编写启动脚本

cd /usr/local/redis-clustersudo vim redis-cluster-start.sh##redis-cluster-start.sh中按i进入插入模式cd /usr/local/redis-cluster/7001/bin./redis-server redis.confcd /usr/local/redis-cluster/7002/bin./redis-server redis.confcd /usr/local/redis-cluster/7003/bin./redis-server redis.confcd /usr/local/redis-cluster/7004/bin./redis-server redis.confcd /usr/local/redis-cluster/7005/bin./redis-server redis.confcd /usr/local/redis-cluster/7006/bin./redis-server redis.conf##按esc进入命令模式:wq##给redis-cluster-start.sh赋予执行权限chmod u+x redis-cluster-start.sh复制代码

4.3 编写终止服务脚本

cd /usr/local/redis-clustersudo vim redis-cluster-stop.sh##redis-cluster-start.sh中按i进入插入模式cd /usr/local/redis-cluster/7001/bin./redis-cli -p 7001 shutdowncd /usr/local/redis-cluster/7002/bin./redis-cli -p 7002 shutdowncd /usr/local/redis-cluster/7003/bin./redis-cli -p 7003 shutdowncd /usr/local/redis-cluster/7004/bin./redis-cli -p 7004 shutdowncd /usr/local/redis-cluster/7005/bin./redis-cli -p 7005 shutdowncd /usr/local/redis-cluster/7006/bin./redis-cli -p 7006 shutdown##按esc进入命令模式:wq##给redis-cluster-start.sh赋予执行权限chmod u+x redis-cluster-stop.sh复制代码

5 启动服务并建立cluster-connection

./redis-cluster-start.sh~/redis-3.0.1/src# redis-trib.rb create --replicas 1  127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006M: 1984c27297c6ef50bbfcbd35c11b93cc40ba17e4 127.0.0.1:7001   slots:0-5460 (5461 slots) masterM: 481e256be4c724f5a2c64a761e52b4be61ca45b4 127.0.0.1:7002   slots:5461-10922 (5462 slots) masterM: b5b652fa02d9999861e66c843b01fd2700c02adf 127.0.0.1:7003   slots:10923-16383 (5461 slots) masterS: 821ec823dc0c2d4f65319e84fe74157fb1014155 127.0.0.1:7004   replicates 1984c27297c6ef50bbfcbd35c11b93cc40ba17e4S: b3b8541b9520d707180d56a2fb3cf3ee6895ed10 127.0.0.1:7005   replicates 481e256be4c724f5a2c64a761e52b4be61ca45b4S: d2b437ca8b9007dcdb63ac16210f6540860361e3 127.0.0.1:7006   replicates b5b652fa02d9999861e66c843b01fd2700c02adfCan I set the above configuration? (type 'yes' to accept):[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.复制代码

6 检查和使用

原生cluster的好处就是client只需要连接上一个节点就能够使用cluster了,至于原理下篇再讲。

随意连接到某个节点.

cd /usr/local/redis-cluster/7001/bin./redis-cli -p 7006 -c##如果出现一下的内容则为配置完全127.0.0.1:7006>127.0.0.1:7006>set key1 value1OK127.0.0.1:7006>get key1->Redirected to slot [2922] located at 127.0.0.1:7001"value1"复制代码

二、Redis原生集群Redis-Cluster原理

Redis-Cluster架构图

架构简析:

  1. redis中的节点采用PING-PONG机制,是的彼此互联,内部使用二进制协议优化传输速度和带框。
  2. 节点的fail是通过急群众超过半数的节点检测失效时才失效,通过投票机制。
  3. 客户端与redis节点直连,不需要中间代理层,客户端只需要连接任何一个可用节点即可
  4. Redis-Cluster把所有的节点映射到[0-16383]区间个数为16384的slot(哈希槽)上,由Cluster负责维护node<->slot<->value.

原理简介:

    redis集群内置16384个哈希槽,当需要在Redis集群内置中放置一个key-value时,redis先对key使用CRC16算法算出一个结果a,然后对a求16384的余数,这样每个key都会落在[0,16383]的哈希槽中,redis会根据节点数量大致均等的将哈希槽应映射到不同的节点上。

更多内容参考官网

转载地址:http://yenbl.baihongyu.com/

你可能感兴趣的文章
区块链生态圈应用落地须了解区块链共识技术开发
查看>>
ES6学习文档(更新至第7节)
查看>>
再次理解伪类选择器:nth-child(){……}
查看>>
MongoDB 在windows服务器安装部署与远程访问配置
查看>>
iOS实现类似苹果手机原生的锁屏界面(数字密码)
查看>>
[vue] 表单输入格式化,中文输入法异常
查看>>
Observer观察者模式与OCP开放-封闭原则
查看>>
如何搭建高级工程师知识框架?推荐两种方式
查看>>
BAT的医疗春秋大梦
查看>>
Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
查看>>
利用H5的css3制作动画
查看>>
Android View 事件分发源码分析
查看>>
vue 2.0 - props
查看>>
RustCon Asia 实录 | Rust 在国内某视频网站的应用
查看>>
Vue遇上Analytics
查看>>
mysql
查看>>
修改max_allowed_packet(允许执行的sql最大长度)
查看>>
node js 处理时间分析
查看>>
判断数据库、表和字段是否存在
查看>>
新手安装postgreSQL后无法连接服务器
查看>>