介绍redis集群 搭建伪集群

一、集群方式

1.主从模式

  每个master节点可以有多个slave节点,但是一个slave节点只能有一个对应的master节点。master节点可以读和写,slave只能读。当一个slave节点挂了之后,重新启动后,数据会从master节点上同步过来。
  在主从模式下,一般有一个主节点可以写,而主、从节点都可以读,所以我们通常让主节点负责写,从节点负责读。
  但是当唯一的master挂了之后,虽说并不影响读服务,但没有了写服务。需要将master重启后,redis才重新提供写服务。

2.Sentinel模式

  Sentinel模式是建立在主从模式上的,为了避免单个master挂了之后,redis不再提供写服务。
  从节点备份了主节点的所有数据,所以当master挂了之后,Sentinel会在slave中选择一个作为新的master节点,并修改它们的配置文件,包括master和slave的配置文件。客户端不是直接连接redis,而是连接Sentinel的ip和port,由Sentinel来提供具体的redis服务。
  把之前挂了的master重新启动后,它将不再是master,而是slave,这个slave也会接收master同步的数据。

3.Cluster模式

  Cluster模式是建立在Sentinel模式上的,当数据太多时,我们需要动态扩容,前面两种方法就不行了。这时需要对数据进行分片,根据某种规则把redis数据分配到多台机器上。
  该模式就支持动态扩容,可以在线增加或删除节点,而且客户端可以连接任何一个主节点进行读写,不过此时的从节点仅仅只是备份的作用。至于为何能做到动态扩容,主要是因为Redis集群没有使用一致性hash,而是使用的哈希槽。Redis集群会有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,而集群的每个节点负责一部分hash槽。
  那么这样就很容易添加或者删除节点, 比如如果我想新添加个新节点, 我只需要从已有的节点中的部分槽到过来;如果我想移除某个节点,就只需要将该节点的槽移到其它节点上,然后将没有任何槽的A节点从集群中移除即可。由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。
  需要注意的是,该模式下不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为。(本段内容转载于下面的参考文章)

二、搭建集群

  这里直接搭建Cluster模式的集群,因为绝大部分公司都是使用这种。

1.下载——编译

wget http://download.redis.io/releases/redis-6.0.3.tar.gz
tar -zxvf redis-6.0.3.tar.gz
sudo mv redis-6.0.3/ /usr/local/redis
cd /usr/local/redis
sudo make
sudo make test

make test 失败的话,去百度安装tcl后,再make test
如果安装不成功的话,自行百度吧(我认为安装redis还是很简单的)

2.建立目录

sudo mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
sudo mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
sudo mkdir bin

目录结构:


redis-cluster目录.jpg

3.拷贝必要的运行脚本

cd /usr/local/redis/src
sudo cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis-cluster/bin

拷贝后的bin目录:


redis-cluster运行脚本.jpg

4.复制redis实例

sudo cp /usr/local/redis/* /usr/local/redis-cluster/9001
sudo cp /usr/local/redis/* /usr/local/redis-cluster/9002
sudo cp /usr/local/redis/* /usr/local/redis-cluster/9003
sudo cp /usr/local/redis/* /usr/local/redis-cluster/9004
sudo cp /usr/local/redis/* /usr/local/redis-cluster/9005
sudo cp /usr/local/redis/* /usr/local/redis-cluster/9006
复制bin文件.jpg

5.修改redis配置

以9001为例,其余五个类似

cd /usr/local/redis-cluster/9001
sudo vim redis.conf
  • bind 192.168.0.172(绑定当前电脑的 IP,这是我虚拟机的,绑定成自己虚拟机的ip)
  • port 9001(其余五个分别是9002 9003 ......)
  • daemonize yes(后台启动redis)
  • pidfile /var/run/redis_9001.pid(9001对应前面的port)
  • dir /usr/local/redis-cluster/9001/data/(数据文件存放位置)
  • appendonly yes
  • cluster-enabled yes(启动集群模式)
  • cluster-config-file nodes-9001.conf(9001对应前面的port)
  • cluster-node-timeout 15000(超时时间)
    别忘了改其余5个

6.启动redis节点

cd /usr/local/redis-cluster/bin
sudo ./redis-server /usr/local/redis-cluster/9001/redis.conf
sudo ./redis-server /usr/local/redis-cluster/9002/redis.conf
sudo ./redis-server /usr/local/redis-cluster/9003/redis.conf
sudo ./redis-server /usr/local/redis-cluster/9004/redis.conf
sudo ./redis-server /usr/local/redis-cluster/9005/redis.conf
sudo ./redis-server /usr/local/redis-cluster/9006/redis.conf

看下是否成功开启了
ps -ef | grep redis

启动节点.jpg

7.搭建集群

sudo ./redis-cli --cluster create 192.168.0.172:9001 192.168.0.172:9002 192.168.0.172:9003 192.168.0.172:9004 192.168.0.172:9005 192.168.0.172:9006 --cluster-replicas 1

--cluster-replicas 1 这个指的是从机的数量,为集群中的每个主节点创建一个从节点。

集群.jpg

8.测试

sudo /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.0.172 -p 9001
运行redis客户端后输入,可查看集群信息

cluster info
cluster nodes
查看集群信息.jpg
redis集群测试.png

本文大部分内容转载于参考文章
参考:超详细,多图文介绍redis集群方式并搭建redis伪集群


2020.5.24 09:10 深圳

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