前言

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于 内存 分布式 、可选持久性的键值对( Key-Value )存储数据库

安装单机版

  • 安装源:DockerHub

  • 默认配置文件:配置文件示例 6.2

  • 运行时指定配置文件

    • docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf
  • 局域网访问配置

    • #不限制IP访问,局域网能够访问
      bind 0.0.0.0
      #禁用保护模式
      protected-mode no
  • 设置密码:requirepass devops666

  • v6.0 后的版本增加了通过 ACL 的方式设置用户名密码

  • 持久化:appendonly yes

  • 启用后默认使用的 AOF(Append-Only File)持久化方式

  • AOF/RDB 等持久化方式文档说明

  • compose.yml

    • version: '3.1'
      services:
      redis:
      container_name: db_redis_6_2
      image: redis:6.2.13
      restart: always
      command: redis-server /usr/local/etc/redis/redis.conf
      volumes:
      - ./data:/data
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
      - "6379:6379"
      networks:
      - devopsnetwork networks:
      devopsnetwork:
      external: true
  • redis.conf

    • #不限制IP访问,局域网能够访问
      bind 0.0.0.0
      #禁用保护模式
      protected-mode no #端口
      port 6379 #密码
      requirepass devops666 #开启AOF日志 指定持久化方式
      appendonly yes
  • 安装成功,可以使用 dbeaver 连接查看

搭建 Redis 集群

Redis 集群是一种高可用、可水平扩展的 Redis 部署方式。它将 Redis 数据库分布在多个节点上,是为了提供高性能、高可用性和可伸缩性而设计的分布式 Redis 解决方案

需要注意的点

  • 配置、管理和维护成本相对高
  • 不支持多数据库,只能使用 0 数据库
  • 不支持跨节点的事务操作
  • 批量操作时支持有限,如数据不在一个节点,则会报错
  • 在部署 Redis 集群模式时,至少需要六个节点组成集群才能保证集群的可用性。

集群规划

  • 节点分配

    • devops02:192.168.123.216
    • devops03:192.168.123.219
    • devops04:192.168.123.222
  • 端口分配

    • 6389: redis 访问端口
    • 16389: 集群端口, 普通端口号加 10000,集群节点之间的通讯
  • 不要设置密码,未找到节点间通信带密码的解决方案,-a password 只是主节点访问使用

  • 集群的 redis 配置模板

    • #端口
      port 6380 #是否开启 Redis 集群模式
      cluster-enabled yes #设置 Redis 集群配置信息及状态的存储位置
      cluster-config-file nodes.conf #设置 Redis 群集节点的通信的超时时间
      cluster-node-timeout 5000
      appendonly yes
      daemonize no
      protected-mode no
      pidfile /data/redis.pid #主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。
      # cluster-migration-barrier 1 #设置集群可用性
      # cluster-require-full-coverage yes
      # 集群节点 IP,如果要外部访问需要修改为宿主机IP,如:192.168.123.216
      # cluster-announce-ip 默认172.x.x.x
      #客户端连接端口
      #cluster-announce-port 6380
      #节点间通信端口
      #cluster-announce-bus-port 16380
  • docker compose.yml 配置模板

    • version: '3.1'
      services:
      redis:
      container_name: cluster_redis_6380
      image: redis:6.2.13
      restart: always
      command: redis-server /usr/local/etc/redis/redis.conf
      volumes:
      - ./data:/data
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
      - '6380:6380'
      - '16380:16380'

集群部署

将上面的配置模板文件按下面的目录结构创建

- node-cluster
- redis-6380
- config
- redis.conf :需要配置模板中修改 port:6380
- compose.yml:需要配置模板中修改 container_name: cluster_redis_6380
- redis-6381
- config
- redis.conf :需要配置模板中修改 port:6381
- compose.yml:需要配置模板中修改 container_name: cluster_redis_6381
  1. 修改 redis.conf 中的 port

  2. 修改 compose.yml 中的 container_name: cluster_redis_6381

  3. 将 node-cluster 目录上传到准备的集群节点服务器:192.168.123.216,192.168.123.219,192.168.123.222

  4. 在服务器的对应目录中执行 docker compose up -d,确保容器正常运行

  5. 依托于创建的 redis 容器,使用下面的命令创建集群并添加节点

      devops02=192.168.123.216
    devops03=192.168.123.219
    devops04=192.168.123.222
    docker exec -it cluster_redis_6380 redis-cli -p 6380 --cluster create \
    ${devops02}:6380 \
    ${devops02}:6381 \
    ${devops03}:6380 \
    ${devops03}:6381 \
    ${devops04}:6380 \
    ${devops04}:6381 \
    --cluster-replicas 1 \
    --cluster-yes

  6. 连接集群测试(redis-cli)

    1. docker exec -it cluster_redis_6380 redis-cli -p 6380 -c
    2. 查看集群信息:cluster info
    3. 查看集群节点信息:cluster nodes
    4. 本地连接测试:redis-cli -h 192.168.123.216 -p 6380 -c

至此,终于是一步步的创建好了 Redis 集群

集群外部访问问题

当 redis.conf 没有设置 cluster-announce-ip 时,使用redis-cli访问没有问题,但是会发现连接时访问节点会变成容器内部IP

导致的结果就是 使用一些Redis客户端连接会超时,无法使用。要解决这个问题,需要将每个节点的 redis.conf 中的 cluster-announce-ip 配置修改为其宿主机IP即可,可以这样做

  • 新建对应文件夹及配置

  • 复制对应IP文件夹到服务器再创建集群即可

  • 工具连接测试

后语

假期结束,先是折腾了一会创建集群密码的问题,然后又是尝试各种连接工具,终于搞定了集群的安装,完美的假期。

Docker 安装 Redis 单机&集群总结的更多相关文章

  1. docker 安装redis cluster集群

    安装Redis镜像 docker pull yyyyttttwwww/redis 创建redis容器 docker run -it -d --name r1 -p 5001:6379 --net=ne ...

  2. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  3. docker1.12 安装redis第三方集群方案 codis

    docker1.12 安装redis第三方集群方案 codis

  4. Docker安装部署es集群

    Docker安装部署es集群:环境准备:已安装docker的centos服务器一台1. 拉取es版本docker pull elasticsearch:5.6.82. 新建文件夹 数据挂载目录 和 配 ...

  5. docker安装Elasticsearch7.6集群并设置密码

    docker安装Elasticsearch7.6集群并设置密码 Elasticsearch从6.8开始, 允许免费用户使用X-Pack的安全功能, 以前安装es都是裸奔.接下来记录配置安全认证的方法. ...

  6. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

  7. linux 安装redis和集群

    一.安装redis单机 1.安装编译环境 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 2.安装步骤: 第一步:r ...

  8. Docker 搭建 Redis Cluster 集群环境

    使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...

  9. CentOS7 安装Redis Cluster集群

    上一篇中已经讲到了如何安装单击版Redis,这一篇我们来说下如何安装Cluster,关于哨兵模式这里我就不写文章安装了,有兴趣的同学可以自己去研究,哨兵模式可以在主从模式下在创建三台机器的哨兵集群监控 ...

  10. Centos6 安装 Redis 和集群配置

    Redis安装 先确认gcc和tcl已经安装 sudo yum install gcc-c++ sudo yum install tcl 解压, 编译和安装 .tar.gz /usr/src/ cd ...

随机推荐

  1. 兰姆达 x AnayticDB 降本30%的数据湖最佳实践

    1. 客户介绍 上海兰姆达数据科技有限公司(简称"兰姆达数据")是一家提供卓越的数据科学软件产品和解决方案的初创高科技公司.兰姆达核心团队专注于大数据,机器学习算法和精准营销Saa ...

  2. idea专业版和idea社区版整合Tomcat,并将war包部署

    目录 一.idea专业版部署 二.idea社区版部署 三.错误案例 开发过程中,由于需要运用云平台,所以从新配置开发环境,其它或多或少有些许问题,但解决起来较为轻松.而对于部署注册中心Eureka时, ...

  3. ChatGPT帮助工程师写代码:从功能模块完善到成功执行,实现需求

    在软件开发过程中,经常会遇到需要完善功能模块.调试代码和解决问题的情况.为了提高效率,我们可以借助人工智能技术,例如OpenAI的ChatGPT语言模型,来协助我们进行代码编写和调试.本文将介绍一个案 ...

  4. AI转换视频风格:Stable Diffusion+TemporalKit

    话不多说,开干! 基本方法 首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-K ...

  5. IOS Safari、微信小程序 img或者其他标签元素出现黑边、黑线阴影

    这个问题最开始出现在小程序上,然后在社区找到一个一样得案例 案例:https://developers.weixin.qq.com/community/develop/doc/000608420706 ...

  6. SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值

    SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高 查看内存状态: DBCC Me ...

  7. Unity的IPreprocessShaders:深入解析与实用案例

    Unity IPreprocessShaders Unity IPreprocessShaders是Unity引擎中的一个非常有用的功能,它可以让开发者在编译Shader时自定义哪些操作需要被执行.这 ...

  8. C# OpenCVSharp图像入门_给绿幕图片视频加背景

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研 ...

  9. 用python用户注册和短信验证码逻辑实现案例

    一.写代码前分析(逻辑分析OK了才可以顺利成章的敲代码): A.用户发送请求 1.注册账号(用户名不能重复)--按照需求进行判断 2.短信验证码(有效期5分钟)--对短信验证码进行保存 B.用户注册. ...

  10. 部署Harbor镜像仓库

    Harbor介绍 Harbor是一个开源的企业级容器注册表服务.它由VMware和Pivotal联合开发,旨在为云原生应用程序提供一种安全可靠的容器镜像管理解决方案. Harbor是一个功能丰富.安全 ...