Redis集群

容量不够,redis如何进行扩容?
并发写操作,redis如何分摊?
使用redis集群:三个服务器均可作为集群入口,多个服务器之间可以相互请求

1.1前期准备

1.准备三台服务器,在redis同级目录中新建redis-cluster目录。
2.三个服务器中的redis-cluster目录中再分别新建8001,8004;8002,8005;8003,8006目录
架构图

或者架构如下

若使用相关云服务器(笔者此处使用腾讯云),需要在防火墙中放行端口

1.2.编辑配置文件

安装目录说明:

redis集群需要至少三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用三台机器部署6个redis实例,每台机器一主一从

第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8001 8004第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:(1)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)(2)protected-mode  no   (关闭保护模式)
(3)port 8001(分别对每个机器的端口号进行设置)
(4)daemonize yes # 后台启动
(5)pidfile /var/run/redis_8001.pid  # 把pid进程号写入pidfile配置的文件
(6)logfile "8001.log"
(7)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(8)cluster-enabled yes(启动集群模式)
(9)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
(10)cluster-node-timeout 10000(11)appendonly yes如果要设置密码需要增加如下配置:(11)requirepass kuku    (设置redis访问密码)(12)masterauth kuku      (设置集群节点间访问密码,跟上面一致)第三步:把修改后的配置文件,copy到8004,修改第3、5、6、7、9项里的端口号,
--------------
可以用批量替换:
:%s/源字符串/目的字符串/g
--------------
第四步:另外两台机器也需要做上面几步操作,第二台机器用8002和8005,第三台机器用8003和8006第五步:分别启动6个redis实例,然后检查是否启动成功
(1)/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/800*/redis.conf
(2)ps -ef | grep redis 查看是否启动成功第六步:用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
# 下面命令里的1代表为每个创建的主服务器节点创建一个从服务器节点
# 执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口16379(默认是在redis端口号上加1W)
# 关闭防火墙
# systemctl stop firewalld # 临时关闭防火墙
# systemctl disable firewalld # 禁止开机启动
# 注意:下面这条创建集群的命令大家不要直接复制,里面的空格编码可能有问题导致创建集群不成功
(1)/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster create --cluster-replicas 1 192.168.0.61:8001 192.168.0.62:8002 192.168.0.63:8003 192.168.0.61:8004 192.168.0.62:8005 192.168.0.63:8006
(默认会将配置的前三台配置为主节点,后三台为从节点)第七步:验证集群:
(1)连接任意一个客户端即可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis-5.0.14/src/redis-cli -a kuku -c -h 192.168.0.61 -p 800*
(2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis-5.0.3/src/redis-cli -a kuku -c -h 192.168.0.60 -p 800* shutdown
# 注意:集群关闭以后不能再使用第六步方式启动,需要挨着将所有节点启动集群会自动完成搭建,redis会读取nodes.800x.conf中的信息自动搭建

完成配置进行到第六步后成功界面

输入yes 然后回车继续,此时集群内部会进行一些通讯,若是服务器通讯第一次可能会很慢

登录进入集群查看集群信息

2.redis集群水平扩容

需求:在业务高峰期比如双11需要增加一个集群缓解系统压力,这样情况下可以采取水平扩容的方式,在前面配置的三台基础上再新增集群(本文水平拓展一个集群)

2.1前期准备

1.新的主机上新建redis-cluster目录新增8007和8009(笔者此处8008被占用)目录,本文基于8001的主机完成,目录结构配置如下

2.将之前8001和redis.conf拷贝到8007和8009

cd  /usr/local/redis-cluster/8001/
cp redis.conf /usr/local/redis-cluster/8007/
cp redis.conf /usr/local/redis-cluster/8009/

2.2环境搭建

修改涉及到端口号的配置

(3)port 8001(分别对每个机器的端口号进行设置)
(5)pidfile /var/run/redis_8001.pid  # 把pid进程号写入pidfile配置的文件
(6)logfile "8001.log"
(7)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(9)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

启动新搭建的redis

/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/8007/redis.conf
/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/8009/redis.conf
ps -el | grep redis # 查看是否启动成功,若启动失败查看对应800x目录下的800x.log日志文件排错

将搭建的redis加入集群

 /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node 124.220.0.192:8007 124.220.0.192:8001 # 将8007加入集群
/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node 124.220.0.192:8009 124.220.0.192:8001 # 将8009加入集群

启动成功界面

在之前集群的客户端使用cluster nodes查看节点

当添加节点成功以后,新增的节点不会有任何数据,因为它还没有分配任何的slot(hash槽),我们需要为新节点手工分配hash槽,在主机上使用命令

[root@VM-12-8-centos 8009]# /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster reshard 124.xxx.0.xxx:8001


分配多少给那个ID,all用所有的节点作为源节点迁移给slots


迁移以上槽位给8007,若槽位中有数据也会一起迁移
redis-cli客户端查看节点信息,可以发现0-198,5461-5661,10923-11121这三个段的槽位分配给了8007

添加从节点8009到集群中去并查看集群状态

[root@VM-12-8-centos ~] # /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node xxx.xxx.0.1x:8009 xxx.xx.0.1x:8001

此时8009是master主节点(任何节点开始加入集群都是master)
将8009设置为8007的从节点,我们使用replicate命令来指定当前节点(从节点)的主节点id为哪个
1.连接8009客户端,然后使用集群命令操作修改为8007的从节点

[root@VM-12-8-centos ~] # /usr/local/redis-5.0.14/src/redis-cli -a kuku -c -h 124.220.0.192 -p 8009
124.220.0.192:8009> cluster replicate b71cbb038b3176425043219d1f223ee21cf8dd94
#b71cbb038b3176425043219d1f223ee21cf8dd94为8007的id可以通过redis-cli客户端中使用cluster nodes查看节点

2.3 拓展集群删除

1.删除8009从节点

[root@VM-12-8-centos 8009]# /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster del-node xx.xx.x.1xx:8009 f75485721a1c4bd49869e6c56a7799765f5faf1d


redis-cli客户端查看nodes信息(cluster nodes命令查看),8009已经被删除

2.删除8007主节点
删除8007master之前,因为主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题。

/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster reshard xxx.xx.0.xx:8007

需要注意会提示以下操作

How many slots do you want to move (from 1 to 16384)? 600 # 迁移多少数据
What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f  #把数据移动到哪?8001的主节点id
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node 1:2728a594a0498e98e4b83a537e19f9a0a3790f38 #需要的数据源id,也就是我们的8007节点id
Source node 2:done # 直接输入done 开始生成迁移计划... ...
Do you want to proceed with the proposed reshard plan (yes/no)? Yes # 输入yes开始迁移

数据迁移完以后执行删除

/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster del-node xxx.xx.0.1xx:8007 b71cbb038b3176425043219d1f223ee21cf8dd94


再到其他集群redis-cli客户端cluster-node查看8007已经被移除

Redis5.0+——集群搭建,水平扩容相关推荐

  1. redis5.0集群搭建(两台服务器)

    redis5.0集群搭建(两台服务器) 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-5.0.2 版本. 两台虚拟机都是 C ...

  2. *福音*阿里云redis5.0.*集群搭建及java代码测试详细(终于不用ruby了)

    redis 5.0版本 集群搭建不需要我们安装ruby就可以搭建成功,并且redis给我们提供了快速搭建脚本,执行utils/create-cluster/ 目录下的create-cluster脚本 ...

  3. linux redis5.0 集群搭建

    一.下载 wget http://download.redis.io/releases/redis-5.0.0.tar.gz 二.解压.编译 #解押到 /usr/local/ 文件夹 tar -zxv ...

  4. Spark-1.4.0集群搭建

    主要内容 Ubuntu 10.04 系统设置 ZooKeeper集群搭建 Hadoop-2.4.1集群搭建 Spark 1.4.0集群搭建 假设已经安装好Ubuntu操作系统 Ubuntu 10.04 ...

  5. hadoop-3.0.0集群搭建

    2019独角兽企业重金招聘Python工程师标准>>> hadoop-3.0.0集群搭建 下载hadoop包 wget -c http://ftp.jaist.ac.jp/pub/a ...

  6. Spark2.2.0集群搭建部署之【HADOOP集群篇】

    软件准备信息,详见Spark2.2.0集群搭建部署之[软件准备篇] 基础配置信息,详见Spark2.2.0集群搭建部署之[基础配置篇] SSH无密访问,详见park2.2.0集群搭建部署之[无密访问篇 ...

  7. Spark2.2.0集群搭建部署之【基础配置篇】

    软件准备信息,详见Spark2.2.0集群搭建部署之[软件准备篇] Spark集群在生产环境中,主要部署在linux的集群中,所以需要先安装JDK,SCALA等基础配置. 由于Spark是计算框架,所 ...

  8. centos7 搭建三主三从 redis5.0集群

    最近在开始准备做毕设.楼主实习的公司为传统行业,技术太老了..只能自己慢慢找资料摸索新东西,打算用spring boot+spring cloud+redis+es+mysql+docker做个web ...

  9. Hadoop-2.8.0集群搭建、hadoop源码编译和安装、host配置、ssh免密登录、hadoop配置文件中的参数配置参数总结、hadoop集群测试,安装过程中的常见错误

    25. 集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据 ...

最新文章

  1. C++基于多态实现依赖颠倒原则附源码
  2. oracle9i用expdp导出全库,Linux下Oracle 11g数据库全库自动备份(EXPDP)
  3. 【网站】网站不能在QQ,微信中访问,申诉办法
  4. 基于COM的矢量图像控件VectorDraw
  5. 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)
  6. jni开发-CmakeList详解
  7. 深信服(SCSA)认证学习—基础知识点二
  8. Android 开发神器系列(工具篇)之 Android 屏幕共享工具
  9. TextCNN文本分类实践
  10. 硬件只要一块esp8266 nodemcu板+几根杜邦线实现远程PC开机,软件全开源(替代智能开关)
  11. 爱你却不能长相厮守痛楚等你殊不知道终局
  12. ch341a i2c 安卓_ch341a编程器软件继续更新-产生芯片列表功能
  13. 力扣 1818. 绝对差值和 数学 二分
  14. Shell攻关之条件判断与流程控制
  15. 通过EFI安装Ubantu+Win7双系统教程
  16. ps2021一键换天空教程,来看看吧
  17. win10 uwp 使用 Microsoft.Graph 发送邮件
  18. 访问共享提示0x80070043错误。
  19. DIY制作示波器的超详细教程:(二)电路才是“硬”道理——硬件电路简述
  20. 你真的了解游戏设计缺陷吗?

热门文章

  1. Babylon.js 深入 - 第 2 章 - 声音(2)
  2. ireport 5.6.0 + Jasper 6.8.0 报表生成
  3. w7设置双显示器_Win7双显示器设置方法 一台电脑带两个显示器设置方法
  4. java基础知识竞海报_40张风韵别致的海报设计(经典欣赏)
  5. INSPIRED启示录 读书笔记 - 第17章 产品人物角色
  6. DataPipeline丨LinkedIn元数据之旅的最新进展—Data Hub
  7. 浪潮服务器还原备份系统,一键GHOST系统数据手动还原备份的妙用的方法(上)...
  8. 【Devops实践】Git+Gitlab+Jenkins pipeline(maven+Sonarqube+harbor) +k8s 整合CICD
  9. 分布式技术一周技术动态 2016-10-09
  10. 简单两步解决UCenter忘记创始人UCenter Administrator密码