云服务器 Redis 集群搭建

集群搭建说明

为什么会出现 3 种搭建集群的方式?
主从复制架构集群存在的问题:Master 节点单点故障问题
Sentinel(哨兵)集群存在的问题:解决了 Master 单点故障的问题,同时带来了新的问题 -> 单个节点无法存储全量数据,需要把数据分区存储在每一个节点

主从复制架构搭建

集群架构介绍

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器

前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点

主从模式

① 一主一从

如下图所示左边是 Master 节点,右边是 slave 节点,即主节点和从节点。从节点也是可以对外提供服务的,主节点是有数据的,从节点可以通过复制操作将主节点的数据同步过来,并且随着主节点数据不断写入,从节点数据也会做同步的更新。从节点起到的作用主要是数据备份
在这里插入图片描述
② 一主多从

一个 Master 可以有多个 slave,也就相当于有了多份的数据副本,是一个一个高可用的选择,例如一个 Master 和一个 slave 挂掉了,还能有其他的 slave 数据备份
在这里插入图片描述

主从复制原理

① 当从数据库启动后,会向主数据库发送 SYNC 命令

② 主数据库接收到 SYNC 命令后开始在后台保存快照(RDB持久化),并将保存快照期间接收到的命令缓存起来

③ 快照完成后,Redis(Master)将快照文件和所有缓存的命令发送给从数据库

④ Redis(Slave)接收到 RDB 和缓存命令时,会开始载入快照文件并执行接收到的缓存的命令

在之后每当主数据库接收到写命令时,就会将命令同步给从数据库

主从复制架构的使用场景

适用于 读多写少 的场景,通过主从复制功能来建立多个从数据库节点,主数据库只进行写操作,从数据库负责读操作。当单个主无法处理过多写操作的时候,需要使用 Redis 3.0 推出的集群功能

环境准备

服务器准备

node1/172.17.0.8node2/172.17.30.12node3/172.17.30.26

安装包准备

Redis 3.2.8 下载

Redis 依赖环境准备

# 在 3 台服务器上都执行
yum -y install gcc-c++
安装

① 解压

# 在 /opt/server 下解压安装包(可自定义安装目录)
tar -zxvf redis-3.2.8.tar.gz

# 3 台服务器解压后的目录(3 台尽量路径相同,方便排查问题)
/opt/server/redis-3.2.8

② 安装 TCL

# 在 node2 和 node3 上执行即可
yum -y install tcl

③ 编译 Redis

# 3 台服务器都执行
cd /opt/server/redis-3.2.8/

# 执行编译和安装
make PREFIX=/opt/server/redis-3.2.8-bin install

④ 创建 备份文件 和 日志存放目录

# 3 台服务器都执行
cd /opt/server/redis-3.2.8-bin/

mkdir -p /opt/server/redis-3.2.8-bin/log
mkdir -p /opt/server/redis-3.2.8-bin/data
配置及启动

① 配置 node1redis.conf

# 进入安装目录
cd /opt/server/redis-3.2.8-bin/

# 修改配置文件
vim redis.conf

# 增加以下内容

   # 修改第128行
   daemonize yes
   # 修改第163行
   logfile "/opt/server/redis-3.2.8-bin/log/redis.log"
   # 修改第247行
   dir /opt/server/redis-3.2.8-bin/data

② 配置 node2node3redis.conf

# 进入安装目录
cd /opt/server/redis-3.2.8/

# 修改配置文件
vim redis.conf

# 增加以下内容

   # 修改第128行
   daemonize yes
   # 修改第163行
   logfile "/opt/server/redis-3.2.8-bin/log/redis.log"
   # 修改第247行
   dir /opt/server/redis-3.2.8-bin/data
   # 修改第266行,配置主节点的 ip 和 端口
   slaveof node1 6379

③ 启动

依次在 node1 、node2、node3 上执行如下命令

cd  /opt/server/redis-3.2.8-bin/

# 启动
bin/redis-server redis.conf

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

测试

测试:在 node1 上执行写操作,在 node2node3 上查看

bin/redis-cli -h node1

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

Sentinel (哨兵)架构搭建

集群架构介绍

Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个 Sentinel 实例 组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器

执行流程示意图

server1 服务器掉线后,server2 服务器升级为新的主服务器
在这里插入图片描述

环境准备

哨兵模式在主从复制架构的基础上实现的,所以需要先将 主从复制集群搭建好

Sentinel 配置

配置说明

① sentinel monitor 代表监控

② mymaster 代表服务器的名称,可以自定义

③ node1 代表监控的主服务器,6379 代表端口

④ 代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行 failover 操作

配置步骤

① 配置 node1 服务器

cd /opt/server/redis-3.2.8

# 修改配置文件
vim sentinel.conf

# 修改以下内容

# 修改第15行, bind 配置,每台机器修改为自己对应的主机名
bind 0.0.0.0
# 在下方添加配置,让 sentinel 服务后台运行
daemonize yes
logfile "/opt/server/redis-3.2.8/log/sentinel.log"
# 修改第71行,三台机器监控的主节点,现在主节点是 node1 服务器
sentinel monitor mymaster node1 6379 2

② 配置 node2node3 服务器

# 修改第15行, bind 配置,每台机器修改为自己对应的主机名
bind 0.0.0.0
# 在下方添加配置,让 sentinel 服务后台运行
daemonize yes
logfile "/opt/server/redis-3.2.8/log/sentinel.log"
# 修改第71行,三台机器监控的主节点,现在主节点是 node1 服务器
sentinel monitor mymaster node1 6379 2

③ 如果 redis 配置了密码,需要在 sentinel.conf 中进行配置

# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
Sentinel 启动

分别在 3 台服务器上启动哨兵

cd /opt/server/redis-3.2.8

# 启动
bin/redis-sentinel sentinel.conf

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

测试

查看当前的 Master 节点的信息,然后将 Master 节点的 redis-server 进程结束掉,然后再看 Master 节点的信息
在这里插入图片描述
Master 节点的 redis-server 进程结束掉再查看
在这里插入图片描述
在这里插入图片描述

Redis Cluster 搭建

Redis Cluster 介绍

Redis Cluster 是分布式架构,有多个节点,每个节点都负责进行数据读写操作,每个节点之间会进行通信,Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接

Redis Cluster 特点

① 所有的 Redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽;

② 节点的 fail 是通过集群中 超过半数 的节点检测失效时才生效

③ 客户端与 Redis 节点直连,不需要中间 proxy 层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

④ redis-cluster 把所有的物理节点映射到 [0-16383]slot 上(不一定是平均分配), cluster 负责维护 node<->slot<->value

⑤ Redis集群预分好 16384 个桶(Slot),当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) & 16384的值,决定将一个key 放到哪个桶中
在这里插入图片描述

Redis Cluster 的优势

① 缓存永不宕机

启动集群,永远让集群的一部分起作用。主节点失效了子节点能迅速改变角色成为主节点,整个集群的部分节点失败或者不可达的情况下能够继续处理命令

② 迅速恢复数据

持久化数据,能在宕机后迅速解决数据丢失的问题

③ Redis 可以使用所有机器的内存,变相扩展性能

④ 使 Redis 的计算能力通过简单地增加服务器得到成倍提升,Redis 的网络带宽也会随着计算机和网卡的增加而成倍增长

⑤ Redis 集群没有中心节点,不会因为某个节点成为整个集群的性能瓶颈

⑥ 异步处理数据,实现快速读写

环境准备

下载安装包

Redis3.0 及以上版本实现,集群中至少应该有奇数个节点,所以至少有三个节点,官方推荐三主三从的配置方式 Redis 3.xRedis4.x 搭建集群是需要手动安装 ruby 组件的,比较麻烦

Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli 的方式,是集群的构建方式复杂度大大降低

Redis 5.0.8 下载

# 上传到该目录下
/opt/server

服务器准备

基于 Redis-5.0.8 版本,在三台机器上搭建 6 个节点的 Redis 集群:三主三从架构

node1/172.17.0.8node2/172.17.20.14node3/172.17.30.12
主节点端口700170017001
从节点端口700270027002
Slot槽范围划分0 - 54605461 - 1092210923 – 16383

编译环境准备

yum -y install gcc-c++ tcl
tar -zxvf redis-5.0.8.tar.gz -C /opt/server/
安装

① 解压安装包

# 赋权
chmod u+x redis-5.0.8.tar.gz 

# 解压
tar -zxvf redis-5.0.8.tar.gz -C /opt/server/

② 编译安装

# 进入源码目录
cd /opt/server/redis-5.0.8

# 编译
make

# 安装至指定目录
make PREFIX=/opt/server/redis-5.0.8-bin install

③ 创建目录软连接

# 3台机器都操作
# 创建安装目录软连接
cd /opt/server

ln -s redis-5.0.8-bin redis

④ 配置环境变量

# 3台机器都操作
# 配置环境变量
vim /etc/profile

# 增加以下内容
export REDIS_HOME=/opt/server/redis
export PATH=:$PATH:$REDIS_HOME/bin

# 执行生效
source /etc/profile
配置

① 从解压目录拷贝配置文件到安装目录

cd /opt/server/redis-5.0.8

cp redis.conf /opt/server/redis

② 在 Redis 安装目录下创建 7001 和 7002 目录,分别存储Redis服务配置文件、日志及数据文件

# 创建目录:7001和7002
cd /opt/server/redis

mkdir -p 7001 7002

# 分别创建数据存放目录和日志存放目录
mkdir -p /opt/server/redis/7001/log
mkdir -p /opt/server/redis/7001/data
mkdir -p /opt/server/redis/7002/log
mkdir -p /opt/server/redis/7002/data

③ 拷贝配置文件

cd /opt/server/redis

cp redis.conf 7001/redis_7001.conf
cp redis.conf 7002/redis_7002.conf

④ 修改配置文件

分别修改 redis_7001.confredis_7002.conf ,以下内容针对 redis_7001.conf ,修改 redis_7002.conf 时将内容中的 7001 全部替换为 7002

# 69行,配置redis服务器接受链接的网卡
bind 0.0.0.0
# 88行,关闭保护模式
protected-mode no
# 92行,设置端口号
port 7001
# 136行,redis后台运行
daemonize yes
# 158行,Redis服务进程PID存储文件名称
pidfile /var/run/redis_7001.pid

# 171行,设置redis服务日志存储路径
logfile "/opt/server/redis-5.0.8-bin/7001/log/redis.log"
## 263行,设置redis持久化数据存储目录
dir /opt/server/redis-5.0.8-bin/7001/data/

## 699行,启动AOF方式持久化
appendonly yes

# 832行,启动Redis Cluster
cluster-enabled yes
# 840行,Redis服务配置保存文件名称
cluster-config-file nodes-7001.conf
# 847行,超时时间
cluster-node-timeout 15000
启动

启动 redis 服务

# 3 台机器都执行
# 启动 7001 端口 Redis 服务
/opt/server/redis/bin/redis-server /opt/server/redis/7001/redis_7001.conf

# 启动 7002 端口 Redis 服务
/opt/server/redis/bin/redis-server /opt/server/redis/7002/redis_7002.conf

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

启动集群

# 任意选择一台机器执行如下命令,创建集群
/opt/server/redis/bin/redis-cli --cluster create 172.17.0.8:7001 172.17.0.8:7002 172.17.20.14:7001 172.17.20.14:7002 172.17.30.12:7001 172.17.30.12:7002 --cluster-replicas 1

在这里插入图片描述

集群常用的操作命令

# 添加新的主节点
redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-master-id node_id

# 添加新的从节点
redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id node_id

# 删除节点
redis-cli --cluster del-node host:port node_id

# hash 槽重新分配
添加新的节点后,需对新添加的主节点进行 hash 槽重新分配,此时主节点才能存储数据,redis 共有 16384 个槽
redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to node_id --cluster-slots <args> --cluster-yes
测试

启动 redis 客户端

# 任选一台机器启动客户端
redis-cli -c -p 7001

查看集群信息

# 查看集群信息
cluster nodes

# 查看主从信息
info replication

在这里插入图片描述
在这里插入图片描述
测试查询数据和设置数据
在这里插入图片描述
测试主从切换
将 node1 的 7001 端口的 Master 停掉,然后在 node2 上查看集群信息

# 停止 7001 端口的服务
/bin/redis-cli -h node1 -p 7001 SHUTDOWN

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值