redis集群搭建

1. 简介

3.0版本开始redis就提供了官方的cluster解决方案,该方案可以将redis中的数据自动分片,分布于不同的redis节点上(Master Role)。Cluster中至少需要有3个Master,每个Master至少要有1个Slave,这样才能保证Cluster的数据安全性。

Release_Note.png

Cluster中的每个redis节点必须打开两个TCP端口,一个用来为客户端提供服务,例如“6379”,另一个用于集群总线,即使用二进制协议的节点到节点的通信信道。命令端口和集群总线端口的偏移是固定的,始终为10000。即如果命令端口是6379,那么对应的集群总线端口就是16379。Cluster中的两两节点之间的两个端口必须是互通的。

Redis Cluster使用哈希槽的技术将数据散列与不同的redis节点。Redis Cluster有16384个散列槽,通过CRC16算法计算,然后对16384取模,即可得到数据存在于哪个redis节点。

2. redis安装

redis集群所需的命令行工具安装比较简单,和单机版并没有什么不同。

$ wget http://download.redis.io/releases/redis-4.0.12.tar.gz
$ tar xf redis-4.0.12.tar.gz
$ cd redis-4.0.12
$ make

按照上面的步骤make之后,我们可以在src的目录下找到很多redis开头的二进制文件,这些就是我们需要的。我们可以将这几个文件拷贝到我们自定义的路径下,或者系统的PATH路径下都行。


src.png

有一个比较重要的文件就是redis-trib.rb,这是一个ruby编写的脚本,主要用来创建集群,所以我们要确保系统中有ruby命令。

$ sudo apt-get install ruby -y
$ sudo gem install redis

3. redis配置文件

配置部分除了常规的单机redis的配置外,我们需要看下集群的配置部分。

  • cluster-enabled <yes/no>
    是否启用redis集群功能。

  • cluster-config-file <filename>
    集群配置文件,该配置文件由集群自行维护,我们无需修改。

  • cluster-node-timeout <milliseconds>
    集群中节点不可用的最大时长。如果主节点的不可访问时长超过这个限制,就会进行故障转移。

  • cluster-slave-validity-factor <factor>
    如果设置为0,则从服务器将始终尝试对主服务器进行故障转移,而不管主服务器和从服务器之间的连接断开的时间长短。如果值是正数,最大断开时间计算的节点超时值乘以这个系数,如果主链接断开连接超过前面计算的时间,那么slave不会进行故障转移。例如,如果节点超时设置为5秒,而有效性系数设置为10,则断开与主服务器连接超过50秒的从服务器将不会尝试对其主服务器进行故障转移。请注意,如果没有能够进行故障转移的从服务器,任何不同于0的值都可能导致Redis集群在主服务器故障后不可用。在这种情况下,只有当原来的主机重新加入集群,集群才可以重新使用。建议值为0。

  • cluster-migration-barrier <count>
    主服务器所对应的最小的从服务器的个数。最小值为1。

  • cluster-require-full-coverage <yes/no>
    如果这个值被设置为yes(默认情况下是这样),那么当某个键空间没有被任何节点覆盖时,集群将停止接受写操作。如果选项设置为no,那么即使只能处理关于键子集的请求,集群仍然会提供查询。建议设置为yes。

4. 创建集群

单机版最小集群需要6个redis节点。

主要配置如下:

daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

接下来我们创建配置相关的目录。我们在自定义目录中创建6个目录来存放每个redis节点的配置文件。将上面的配置文件放到这6个目录中,修改每个目录下的配置文件的端口号,和目录名对应皆可以,然后我们启动每个节点。

$ sudo mkdir -p /opt/redis-cluster/{7000,7001,7002,7003,7004,7005}
$ sudo redis-server /opt/redis-cluster/7000/redis.conf #其余的使用相同方式启动
$ 

节点运行起来之后,我们开始创建集群。redis5使用redis-cli命令创建,redis4、3使用redis-trib.rb来创建。。

  • redis5
$ redis-cli --cluster create 127.0.0.1:7000 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 --cluster-relicas 1
  • redis4/3
$ redis-trib.rb create --replicas 1 127.0.0.1:7000 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
Cluster_Create.png

--cluster-replicas 1 和--replicas 1都是相同的意思,就是每个主节点有一个从节点。

5. 验证

上面的操作已经将集群创建好了,接下来我们验证一下集群搭建是否存在问题。

$ redis-cli -c -p 7000
redis 127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
redis 127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
redis 127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
redis 127.0.0.1:7000> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"

如果和上面显示结果一样,那么我们的集群搭建的是没有问题的。

参考文档
  1. https://redis.io/topics/cluster-tutorial
  2. http://download.redis.io/releases/
  3. https://redis.io/documentation
  4. https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEASENOTES
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容