当前位置: 首页 > news >正文

Redis(十三)【集群基础搭建】

十三、Redis集群基础搭建

13.1 集群细节

  • 所有redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度何宽带
  • 节点的 fail 是通过集群中超过半数的节点检测失效时才生效的
  • 客户端与 redis 节点直连,不需要中间 proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  • redis-cluster 把所有的物理节点映射到[0-16383]的slot槽上,cluster 负责维护 node<->slot<->value

在这里插入图片描述

13.2 集群搭建

环境准备

  • redis-6.2.6(下面会有安装教程)
  • 由CentOS7作为镜像的Linux虚拟机
  • yum命令

1)集群整体规划:

IP端口号节点
192.168.159.1007000master
192.168.159.1007001master
192.168.159.1007002master
192.168.159.1007003slave—>master为7001
192.168.159.1007004slave—>master为7002
192.168.159.1007005slave—>master为7000

2)开启防火墙端口

# 开启防火墙端口7000、7001、7002、7003、7004、7005
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
# 重新启动防火墙
service firewalld restart
# 只看端口信息
firewall-cmd --list-ports

3)首先要在Linux虚拟机上安装redis

# 安装包存放目录
cd /usr/local/redis
# 下载最新稳定版
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# 解压
tar -zxvf redis-6.2.6.tar.gz
# 进入解压后的目录
cd /usr/local/redis/redis-6.2.6/
# 编译
make
# 执行 "make install" 默认会安装到 /usr/local/bin,可通过PREFIX指定安装路径
make install PREFIX=/usr/local/redis
# 测试是否安装成功,执行下面命令
/usr/local/redis/bin/redis-server

![在这里插入图片描述](https://img-blog.csdnimg.cn/10cbc722a8a643f0800cfc5f1c26b34d.png#pic_center =800x#pic_center =800x)

![在这里插入图片描述](https://img-blog.csdnimg.cn/9295324553ad422984862ef39590606a.png#pic_center =800x#pic_center =800x)

1. 创建集群

判断集群中的一个节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建 redis 集群时建议节点数最好位奇数,搭建集群至少需要三个主节点、三个从节点,至少需要6个节点

# 安装ruby和依赖的包
yum install -y ruby rubygems

3.3.5.gem安装:http://rubygems.org/downloads/redis-3.3.5.gem

从官网下载redis-3.3.5.gem后,使用 xftp 上传到linux虚拟机中,运行以下命令

gem install redis-3.3.5.gem 

/usr/local/redis/redis-6.2.6目录下拷贝一份redis.conf文件到/usr/local/redis/目录下,修改以下内容

bind 0.0.0.0				# 绑定的IP,默认为本机127.0.0.1
port 7000				    # 运行的端口号,默认为6379
pidfile /var/run/redis_7000.pid		    # PID进程文件
daemonize yes				# 以守护进程的方式运行,默认是no,需要我们自己开启yes(实质上就是是否开启后台运行,不占用窗口)
dbfilename dump-7000.rdb	 # 设置rdb快照文件名字
appendonly yes				# 默认是不开启aof模式的,默认是使用rdb方式持久化,大部分所有的情况下,rdb完全够用
appendfilename "appendonly-7000.aof"	# 持久化的名字的文件
cluster-enabled yes			# 开启集群模式,默认关闭
cluster-config-file nodes-7000.conf		# 集群各节点配置文件
cluster-node-timeout 5000    # 集群超时时间

如下图所示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/usr/local/redis/目录下创建redis-cluster-upgrade文件夹,并在该文件夹创建7000~7007文件夹

mkdir redis-cluster-upgrade
mkdir 7000 7001 7002 7003 7004 7005 7006 7007

在这里插入图片描述

在这里插入图片描述

将修改后的redis.conf文件复制到7000~7007文件夹下

在这里插入图片描述

复制完后,对每个redis.conf文件修改对应的端口号

回到/usr/local/redis/bin目录,根据配置文件分别启动redis-server服务

[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7000/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7001/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7002/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7003/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7004/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7005/redis.conf 
[root@vinjcent bin]# ./redis-server ../redis-cluster-upgrade/7006/redis.conf 

### 停止节点
#!/bin/bash
./redis-cli -p 7000 shutdown
./redis-cli -p 7001 shutdown
./redis-cli -p 7002 shutdown
./redis-cli -p 7003 shutdown
./redis-cli -p 7004 shutdown
./redis-cli -p 7005 shutdown
./redis-cli -p 7006 shutdown

在这里插入图片描述

# 查看redis进程
ps aux|grep redis

在这里插入图片描述

redis-trib.rb文件复制到/usr/local/redis/bin/目录下(旧版本才需要

[root@vinjcent src]# pwd
/usr/local/redis/redis-6.2.6/src
# 旧版本需要拷贝
[root@vinjcent src]# cp ./redis-trib.rb /usr/local/redis/bin/

在这里插入图片描述

创建集群命令,在/usr/local/redis/bin目录下

# (旧版本命令)
./redis-trib.rb create --replicas 1 192.168.159.100:7000 192.168.159.100:7001 192.168.159.100:7002 192.168.159.100:7003 192.168.159.100:7004 192.168.159.100:7005

# 个人使用的是redis-6.2.6版本,命令如下
./redis-cli --cluster create 192.168.159.100:7000 192.168.159.100:7001 \
192.168.159.100:7002 192.168.159.100:7003 192.168.159.100:7004 192.168.159.100:7005 \
--cluster-replicas 1

在这里插入图片描述

在这里插入图片描述

从节点没有hash槽,只有当主节点宕机之后,从节点选举成为新的主节点才有slot槽

在这里插入图片描述

出现如上信息,说明16284个哈希槽已经全部分配完毕,此时集群搭建成功

2. 查看集群状态

### 1.查看集群状态 check [原始集群中任意节点]
# 旧版本
[root@vinjcent bin]# ./redis-trib.rb check 192.168.159.100:7000
# 新版本 -c 代表集群,没加 -c 代表单机
./redis-cli -c -p 7000 -a [密码]
./redis-cli -c -p 7000

### 2.主节点状态说明
- 主节点
	主节点存在hash slots,且主节点的hash slots 没有交叉
	主节点不能删除
	一个主节点可以有多个从节点
	主节点宕机时,多个副本之间自动选举主节点
	
- 从节点
	从节点没有hash slots
	从节点可以删除
	从节点不负责数据的写,只负责数据的同步

在这里插入图片描述

在这里插入图片描述

3. 集群操作

1)帮助命令

### 查看帮助命令
[root@vinjcent bin]# ./redis-cli --cluster help
Cluster Manager Commands:
  create         host1:port1 ... hostN:portN
                 --cluster-replicas <arg>
  check          host:port
                 --cluster-search-multiple-owners
  info           host:port
  fix            host:port
                 --cluster-search-multiple-owners
                 --cluster-fix-with-unreachable-masters
  reshard        host:port
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
  rebalance      host:port
                 --cluster-weight <node1=w1...nodeN=wN>
                 --cluster-use-empty-masters
                 --cluster-timeout <arg>
                 --cluster-simulate
                 --cluster-pipeline <arg>
                 --cluster-threshold <arg>
                 --cluster-replace
  add-node       new_host:new_port existing_host:existing_port
                 --cluster-slave
                 --cluster-master-id <arg>
  del-node       host:port node_id
  call           host:port command arg arg .. arg
                 --cluster-only-masters
                 --cluster-only-replicas
  set-timeout    host:port milliseconds
  import         host:port
                 --cluster-from <arg>
                 --cluster-from-user <arg>
                 --cluster-from-pass <arg>
                 --cluster-from-askpass
                 --cluster-copy
                 --cluster-replace
  backup         host:port backup_directory
  help           

2)添加主节点

### 1.添加主节点 --cluster add-node [新加入节点] [原始集群中任意节点]
./redis-cli --cluster add-node 192.168.159.100:7006 192.168.159.100:7000
- 注意
	该节点必须以集群模式启动
	默认情况下,该节点就是以master节点形式添加
# 查看集群节点./redis-cli --cluster check [ip]:[port]
./redis-cli --cluster check 192.168.159.100:7006

在这里插入图片描述

在这里插入图片描述
新添加的主节点没有solts槽,需要用到reshard命令进行分片

3)添加从节点

### 1.添加从节点 --cluster add-node --cluster-slave [新加入节点] [集群中任意节点]
./redis-cli --cluster add-node --cluster-slave 192.168.159.100:7006 192.168.159.100:7000

- 注意
	当添加副本节点时,没有指定主节点,redis会随机给该副本节点分配到较少副本节点的主节点
### 2.为确定的master节点添加主节点  --cluster add-node --cluster-slave --cluster-master-id [master节点id] [新加入节点] [集群任意节点]
./redis-cli --cluster add-node --cluster-slave --cluster-master-id 4ca0a36684446afe069ef575c3ca7d0f60c1186c 192.168.159.100:7006 192.168.159.100:7000
  • 添加从某个从节点

在这里插入图片描述

在这里插入图片描述

  • 为确定的master节点添加主节点

在这里插入图片描述

在这里插入图片描述

4)删除副本节点

### 1.删节节点 --cluster del-node [集群中任意节点] [删除节点id]
./redis-cli --cluster del-node 192.168.159.100:7005 bb3d941a437c52d98caf993b6a92c3e271bc0435

在这里插入图片描述

5)集群在线分片

### 1.在线分片 --cluster reshard [集群中任意节点]
  reshard        host:port
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
./redis-cli --cluster reshard 192.168.159.100:7000

13.3 在springboot项目中的配置方式

application.yml

# 端口
server:
  port: 3035
  servlet:
    context-path: /redisSession
# 应用名称
spring:
  application:
    name: redis-session-manager
  # redis集群(建议将所有节点都添加,该集群方式不需要配置主从复制以及哨兵模式,在配置集群中已经具备这些功能)
  redis:
    cluster:
      nodes: 192.168.159.100:7000,192.168.159.100:7001,192.168.159.100:7002,192.168.159.100:7003,192.168.159.100:7004,192.168.159.100:7005

相关文章:

  • java计算机毕业设计商场会员管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 网络协议:知识扫盲
  • ESPRIT 2019初学到走心机编程视频教程
  • type alias+noexcept+override+final
  • nova VirtualInterfaceCreateException (by quqi99)
  • 会员积分制度有哪些好处?
  • orc文件的读写及整合hive
  • High Performance Computing 综述
  • DoozyUI⭐️十六、Progressor Group:可视化帮手,进度条组自动求平均值
  • 高德地图 INVALID_USER_SCODE 10008 错误
  • 2020中青杯A题集成电路通道布线数学建模全过程论文及程序
  • 神经系统图 基本结构图,大脑神经网络结构图片
  • 堆排序算法用数组模拟二叉树,求A[K](K>0)的父节点坐标
  • 【Unity】物理引擎、生命周期物理阶段、刚体、碰撞体、触发器、物理材质
  • 苹果证书在线制作
  • 收藏网友的 源程序下载网
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CentOS 7 防火墙操作
  • css属性的继承、初识值、计算值、当前值、应用值
  • Effective Java 笔记(一)
  • Flannel解读
  • Go 语言编译器的 //go: 详解
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Intervention/image 图片处理扩展包的安装和使用
  • javascript从右向左截取指定位数字符的3种方法
  • Laravel 实践之路: 数据库迁移与数据填充
  • Promise面试题2实现异步串行执行
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Web Storage相关
  • 大主子表关联的性能优化方法
  • 仿天猫超市收藏抛物线动画工具库
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用 @font-face
  • 数据仓库的几种建模方法
  • 移动端 h5开发相关内容总结(三)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2.2w字)前端单元测试之Jest详解篇
  • (26)4.7 字符函数和字符串函数
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (zhuan) 一些RL的文献(及笔记)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 设计模式—简单工厂(Simple Factory Pattern)