Redis5.x版本搭建 Cluster 集群(HA)

image

单机环境搭建

单机环境仅供我们平时开发和测试时使用,一般我们可能会在 Linux 或者 Windows 上部署,Windows版本的部署非常简单,首先在 GitHub 上下载 zip 包解压到指定位置,后执行下面的命令就成功的部署好了。下载地址 Redis GitHub 下载地址

redis-server.exe redis.windows.config

运行成功如下图


Windows Redis

Linux 版本安装如下

1.主机名修改
hostnamectl --static set-hostname redis1

2.安装gcc yum install gcc
检查是否安装 gcc -v

3.下载 Redis gz 安装包
Redis 官网下载安装包,也可使用一下命令直接下载到服务器

 wget http://download.redis.io/releases/redis-5.0.3.tar.gz  #远程下载

下载完成后解压到 /usr/local 目录下
修改 /usr/local/redis-5.0.3/redis.conf 参数 daemonize 值改为 yes,使其后台运行,启动命令如下:

/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-5.0.3/redis.conf #指定配置文件

4.验证单机环境

  • 验证启动是否成功 ps -ef | grep redis
  • 进入redis客户端 /usr/local/redis-5.0.3/src/redis-cli
  • 存数据 set name zoluo
  • 取数据 get name
  • 退出客户端 quit 或 Ctrl + C 或 exit
  • 退出redis服务:
    (1)pkill redis-server
    (2)kill -9 进程号

高可用集群环境搭建

哨兵模式

在 Redis3.0 以前的版本要实现集群一般是借助哨兵 sentinel 工具来监控master节点的状态, 如果 master 节点异常,则会做主从切换,将某一台 slave 作为 master,哨兵的配置略微复 杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情 况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存 也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。
参考:

Cluster 集群模式

1.概述
Redis 的集群主要是使用切片技术来搭建的,简单来说就是把所有KEY分散存放到不同的redis节点上(不要把鸡蛋都放在一个篮子里)。

2.说明
Redis 集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特 性。Redis 集群不需要 sentinel 哨兵也能完成节点移除和故障转移的功能。需要将每个节点 设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到 上万个节点(官方推荐不超过 1000 个节点)。Redis 集群的性能和高可用性均优于之前版本的 哨兵模式,且集群配置非常简单 。

3.集群基本原理
Redis 集群中内置了 16384 个槽位,当需要放置数据时,Redis 先对 KEY 使用 CRC16 算法计算出一个结果,然后把结果对 16384 求余数,这样每个 KEY 都会对应一个编号在 0-16383 之间的槽号码,Redis 会根据节点数量大致均等的原则将哈希槽映射到不同节点。比如有 3 个 Redis 节点,把 16384 分成 3 段,每个节点承担一段范围的哈希槽。在一个集群中16384个槽位必须同时在线否则集群就会失败。

优点是添加和移除节点非常容易。比如要新增一个节点,值需要从其他节点上移动一些槽位到新节点即可,如果要删除一个节点,那就把它拥有的槽位移动到其他节点,然后进行删除。上面这种移动过程不需要任何停机时间。

所有的 Redis 节点彼此互通

  • 节点的失败是通过集群中超过半数的节点检测失效才生效的
  • 客户端与 Redis 节点直连,不需要中间的代理,客户端不需要连接集群所有节点,只需要连接任何一个可用的节点即可

4.Redis 高可用集群搭建
Redis 集群需要至少要三个 master 节点,我们这里使用三台虚拟机搭建三个 master 节点,并且给每个 master 再搭建一个slave 节点,总共6个 Redis 节点,这里用三台机器部署6个 Redis 实例,
每台机器一主一从,搭建集群的步骤如下:

第一步:在每台机器的 /usr/local 下创建文件夹 redis-cluster,然后在其下面分别创建 2 个文件夹如下

$redis1
mkdir -p /usr/local/redis-cluster  
mkdir 7001
mkdir 7002 
$redis2
mkdir -p /usr/local/redis-cluster  
mkdir 7003
mkdir 7004 
$redis3
mkdir -p /usr/local/redis-cluster  
mkdir 7005
mkdir 7006 

第二步:把之前的 /usr/local/redis-5.0.3/redis.conf 配置文件 copy 到每个 700* 下,修改如下内容:

(1)daemonize yes  
(2)port 7001 #分别对每个机器的端口号进行设置  
(3)dir /usr/local/redis-cluster/7001/ #指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
(4)cluster-enabled yes #启动集群模式 
(5)cluster-config-file nodes-7001.conf #集群节点信息文件,这里 700* 和port对应上  
(6)cluster-node-timeout 5000   
(7)  # bind 127.0.0.1 #去掉bind绑定访问ip信息
(8) protected-mode  no  #关闭保护模式  
(9)appendonly yes  #如果要设置密码需要增加如下配置: 
         requirepass zoluo  #设置redis访问密码
         masterauth zoluo  #设置集群节点间访问密码,跟上面一致

第三步:另外两台机器修改第2、3、5项里的端口号

第四步:分别启动6个redis实例,然后检查是否启动成功,命令如下

/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/700*/redis.conf  
ps -ef | grep redis #查看是否启动成功

第五步:用 redis-cli 创建整个 Redis 集群(Redis 5.x以前的版本集群是依靠 ruby 脚本 redistrib.rb 实现)

/usr/local/redis-5.0.3/src/redis-cli -a zoluo --cluster create --cluster-replicas 1 192.168.2.10:7001 192.168.2.11:7004 192.168.2.11:7003 192.168.2.12:7006 192.168.2.12:7005 192.168.2.10:7002 192.168.2.13:8006 #代表为每个创建的主服务器节点创建一个从服务器节点 

加入集群

第六步:验证集群:
(1)连接任意一个客户端即可:

#./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模 式,指定ip地址和端口号)
/usr/local/redis-5.0.3/src/redis-cli -a zoluo-c -h  192.168.2.10 -p 700*  
cluster infoc #查看集群信息
cluster nodes #查看节点列表 
#进行数据操作验证  
节点信息

(2)关闭集群则需要逐个进行关闭,使用命令:

/usr/local/redis-5.0.3/src/redis-cli -a zoluo -c -h 192.168.2.10 -p 700* shutdown

自此 Redis 高可用集群搭建完毕!参考:
Redis 集群详解
Redis 官方说明

补充说明

1.Redis 集群节点加入顺序与主节点与从节点关联是随机的,参考官方说明。
2.如果在安装过程中出现不可逆转的错误或安装失败,最好重新安装。
重新安装我要做关键的两步:

  • 关闭集群
/usr/local/redis-5.0.3/src/redis-cli -a zoluo -c -h 192.168.2.10 -p 700* shutdown
或
kill -9 进程号
  • 删除每台机器上数据文件
cd /usr/local/redis-cluster/700*/
rm -rf appendonly.700*.aof
rm -rf nodes.700*.conf
  • 重复操作上面 4、5、6 步骤,当然如果需要修改端口,按照每台机器不重复修改就行了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容