云服务器 Redis 集群搭建

  • 主从复制架构搭建
    • 集群架构介绍
    • 环境准备
    • 安装
    • 配置及启动
    • 测试
  • Sentinel (哨兵)架构搭建
    • 集群架构介绍
    • 环境准备
    • Sentinel 配置
    • Sentinel 启动
    • 测试
  • Redis Cluster 搭建
    • Redis Cluster 介绍
    • 环境准备
    • 安装
    • 配置
    • 启动
    • 测试

集群搭建说明

为什么会出现 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.8 node2/172.17.30.12 node3/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.8 node2/172.17.20.14 node3/172.17.30.12
主节点端口 7001 7001 7001
从节点端口 7002 7002 7002
Slot槽范围划分 0 - 5460 5461 - 10922 10923 – 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/serverln -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.8cp redis.conf /opt/server/redis

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

# 创建目录:7001和7002
cd /opt/server/redismkdir -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/rediscp 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

云服务器 Redis 集群搭建相关推荐

  1. 云服务器Redis集群部署及客户端通过公网IP连接问题

    目录 1.配置文件 2.启动服务并创建集群 (1)启动6个Redis服务 (2)通过客户端命令创建集群 3.客户端连接 (1)客户端配置 (2)测试用例 (3)错误日志分析 4.问题解决 (1)查re ...

  2. redis 集群搭建_Redis分布式缓存分布式集群搭建

    当你试图解决一个你不理解的问题时,复杂化就产成了.-Andy Boothe Redis集群安装部署 Redis是一个运行在内存的非关系型数据库,因为其速度快(效率高),支持数据的持久化(安全),事务操 ...

  3. redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用

    转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...

  4. Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...

  5. redis集群搭建踩坑笔记

    推荐参考教程:https://blog.csdn.net/pucao_cug/article/details/69250101 错误: from /usr/lib/ruby/2.3.0/rubygem ...

  6. 系统学习redis之二——redis集群搭建

    redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 ...

  7. 服务器集群名称是否可修改,云服务器可以集群吗

    云服务器可以集群吗 内容精选 换一换 在SAP HANA系统中,需要创建一台弹性云服务器,用于运行SAP HANA Studio软件. 专属计算集群(Dedicated Computing Clust ...

  8. Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群

    Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...

  9. Redis集群搭建及java连接redis

    Redis集群搭建及java连接redis Redis集群分为三种: 1.主从关系模式2.Sentinel哨兵关系模式3.Cluster去中心化模式 1.主从关系模式 1.1.什么是主从模式? (1) ...

最新文章

  1. 重置管理员密码linux,grafana重置管理员密码
  2. mysql 导入导出摘要
  3. 有关SQL server connection Keep Alive 的FAQ(3)
  4. 某同学工作之后的感悟
  5. maven打包报错You have to use a classifier to attach supplemental artifacts to the project instead of rep
  6. python数独代码_python 实现计算数独
  7. 运行Java程序时 Tomcat出错 显示端口被占用
  8. CentOS 安装中文语言包 教程
  9. Flutter 从配制开发环境再到开发第一个应用
  10. 在LINQPad中征服ASP.NET Boilerplate查询性能
  11. 信阳农林技术学院经纬度_信阳农林学院驻村工作队为扶贫村协调种苗助力美丽乡村建设...
  12. PCM格式音频数据的读取
  13. keras深度学习(3)-单标签多分类问题之新闻分类
  14. window本地运行hadoop 测试用例 failed to create symlink
  15. ECC椭圆曲线算法(1)阿贝尔群
  16. CMD快捷指令之磁盘检查(管理员身份运行命令提示符)
  17. 消除笔哪个p图软件有?快把这些软件收好
  18. 转载自www.dezai.cn 常用sql统计
  19. 用迅雷下载的视频,文件夹打开是空的,文件夹有大小,也没有隐藏文件的解决办法
  20. 自变量趋于无穷大时函数的极限

热门文章

  1. uniapp 微信小程序 web-view上传手机文件管理器里最近文件(不限文件类型)
  2. ubuntu with linux 3.19,ubuntu更改启动顺序
  3. PHP接收GET和POST请求
  4. 在日本合法打工情况介绍
  5. 如何在Jupyter notebook上插入图片
  6. 系统学习iOS动画—— Flight Info(keyframe-animations)
  7. go 学习笔记之有意思的变量和不安分的常量
  8. IdentityServer4 Clients
  9. 01背包+完全背包问题
  10. 全国分省12.5m DEM数据(ALOS 12.5m)/高程dem