前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 安装 Redis 单机&集群总结

Docker 安装 Redis 单机&集群总结

作者头像
易墨
发布2023-10-10 08:21:40
5190
发布2023-10-10 08:21:40
举报

前言

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

安装单机版

安装源:DockerHub

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

运行时指定配置文件

代码语言:javascript
复制
docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf

局域网访问配置

代码语言:javascript
复制
#不限制IP访问,局域网能够访问
bind 0.0.0.0
#禁用保护模式
protected-mode no

设置密码:requirepass devops666

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

持久化:appendonly yes

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

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

compose.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
#不限制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 配置模板

代码语言:javascript
复制
#端口
  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 配置模板

代码语言:javascript
复制
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'

集群部署

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

代码语言:javascript
复制
- 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

修改 redis.conf 中的 port

修改 compose.yml 中的 container_name: cluster_redis_6381

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

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

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

代码语言:javascript
复制
  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

连接集群测试(redis-cli)

代码语言:javascript
复制
docker exec -it cluster_redis_6380 redis-cli -p 6380 -c

查看集群信息:cluster info

查看集群节点信息:cluster nodes

本地连接测试: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文件夹到服务器再创建集群即可
  • 工具连接测试

后语

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装单机版
  • 搭建 Redis 集群
    • 需要注意的点
      • 集群规划
        • 集群部署
          • 集群外部访问问题
          • 后语
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档