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

在这里插入图片描述

在这里插入图片描述

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naijia_OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值