docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从) ...

打印 上一主题 下一主题

主题 849|帖子 849|积分 2547

1、前言

  使用 Docker Compose 搭建 Redis 集群是一种便捷高效的方法,可以快速地在本地或者测试环境中搭建一个 Redis 集群。以下是详细的步骤,在 Docker 环境中使用 docker-compose 来搭建 Redis 集群。
本次搭建使用三太虚拟机作为宿主机,ip分别如下:
  1. 192.168.10.128
  2. 192.168.10.129
  3. 192.168.10.130
复制代码
2、预备工作

2.1、Docker 安装

  通过以下指令进行Docker 安装:
  1. // 更新软件包索引
  2. sudo apt-get update
  3. // 允许APT使用HTTPS
  4. sudo apt-get install \
  5.     apt-transport-https \
  6.     ca-certificates \
  7.     curl \
  8.     gnupg-agent \
  9.     software-properties-common
  10. // 添加 Docker 的官方 GPG 密钥:
  11. sudo  curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  12. // 设置稳定版仓库
  13. sudo add-apt-repository \
  14.    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  15.   $(lsb_release -cs) \
  16.   stable"
  17. // 更新软件包索引
  18. sudo apt-get update
  19. // 安装 Docker
  20. sudo apt-get install docker-ce
  21. // 查看Docker状态
  22. sudo systemctl status docker
复制代码
2.2、docker-compose 安装

  docker-compose 安装命令如下:
  1. sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose
复制代码
2.3 目次创建

  在每台创建redis的data目次,使用以下脚本进行:
  1. #!/bin/bash
  2. for dir in master/data slave/data; do
  3.   mkdir -p "/home/arkham/docker/redis/redis-cluster/$dir";
  4. done
复制代码
3、redis设置文件

3.1 生成redis.conf文件

  我们需要为每个 Redis 节点创建独立的设置文件,以下是 redis.conf 的示例,其他节点的设置文件雷同,只需要修改端口和节点名称。为了方便操纵,同样通过shell脚步来完成,不同服务器只需要更改cluster-announce-ip即可,脚本代码如下:
  1. #!/bin/bash
  2. for dir in master slave; do
  3. if [ "$dir" == "master" ]; then
  4.     port=6379
  5.   elif [ "$dir" == "slave" ]; then
  6.     port=6380
  7.   fi
  8. echo "port $port
  9. save 900 1
  10. save 300 10
  11. save 60 10000
  12. dbfilename dump.rdb
  13. dir /data
  14. appendonly yes
  15. appendfilename "appendonly.aof"
  16. appendfsync everysec
  17. cluster-enabled yes
  18. cluster-config-file nodes.conf
  19. cluster-node-timeout 5000
  20. requirepass 123456arkham
  21. masterauth 123456arkham
  22. cluster-announce-ip 192.168.10.128" >/home/arkham/docker/redis/redis-cluster/$dir/redis.conf;
  23. done
复制代码
3.2 shell文件无法执行问题办理

  在windows下编写的shell脚本,将shell文件拷贝至相应服务器,执行过程中大概会报文件不存在错误,这时候脚本文件大概执行失败,一个是权限问题,还有大概是文件问题,dos格式的文件行尾为^M,而 unix 格式的文件行尾为$,办理办法如下
  1. # 给sehll目录下所有文件增加权限
  2. chmod -R 775 /home/server/shell
  3. # 查看行尾符 dos格式的文件行尾为^M$,而unix格式的文件行尾为$
  4. sudo  cat -A redis.sh
  5. # 修改
  6. sudo  sed -i "s/\r//" redis.sh
复制代码
3.3 docker-compose.yml文件编写

  docker-compose.yml文件内容如下:
  1. version: '3.1'
  2. services:
  3.   redis-master:
  4.     image: redis:latest
  5.     container_name: redis-master
  6.     restart: always
  7.     ports:
  8.       - "6379:6379"
  9.       - "16379:16379"
  10.     environment:
  11.       - TZ=Asia/Shanghai
  12.     volumes:
  13.     - /home/arkham/docker/redis/redis-cluster/master/data:/data
  14.     - /home/arkham/docker/redis/redis-cluster/master/redis.conf:/usr/local/etc/redis/redis.conf
  15.     deploy:
  16.       resources:
  17.         limits:
  18.           cpus: '2'
  19.           memory: 4G
  20.         reservations:
  21.           cpus: '2'
  22.           memory: 4G
  23.     command: ["redis-server","/usr/local/etc/redis/redis.conf"]
  24.   redis-slave:
  25.     image: redis:latest
  26.     container_name: redis-slave
  27.     restart: always
  28.     ports:
  29.       - "6380:6380"
  30.       - "16380:16380"
  31.     environment:
  32.       - TZ=Asia/Shanghai
  33.     volumes:
  34.       - /home/arkham/docker/redis/redis-cluster/slave/data:/data
  35.       - /home/arkham/docker/redis/redis-cluster/slave/redis.conf:/usr/local/etc/redis/redis.conf
  36.     deploy:
  37.       resources:
  38.         limits:
  39.           cpus: '2'
  40.           memory: 4G
  41.         reservations:
  42.           cpus: '2'
  43.           memory: 4G
  44.     command: [ "redis-server","/usr/local/etc/redis/redis.conf" ]
复制代码
4、启动集群及初始化

4.1 启动 Redis 集群

  在 redis 目次下,执行以下命令启动 Redis 节点:
  1. sudo docker-compose up -d
复制代码
  如果拉取镜像超时失败或者拒绝毗连,大概是由于docker源的缘故原由,修改为国内源:
  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4.     "registry-mirrors": [
  5.         "https://do.nark.eu.org",
  6.         "https://dc.j8.work",
  7.         "https://docker.m.daocloud.io",
  8.         "https://dockerproxy.com",
  9.         "https://docker.mirrors.ustc.edu.cn",
  10.         "https://docker.nju.edu.cn"
  11.     ]
  12. }
  13. sudo systemctl daemon-reload
  14. sudo systemctl restart docker
复制代码
4.2 Redis 集群初始化

  集群启动后,需进行集群初始化操纵。需要进入到任意一个 Redis 容器中,并使用 redis-cli 命令来创建集群。
  1. // 进入任意 Redis 容器
  2. docker exec -it redis-master  /bin/bash
  3. // 执行创建集群
  4. redis-cli -a 123456arkham --cluster create 192.168.10.128:6379 192.168.10.128:6380 192.168.10.129:6379 192.168.10.129:6380 192.168.10.129:6379 192.168.10.129:6380 --cluster-replicas 1
  5. // 创建成功后连接任意一个redis节点
  6. redis-cli -a 123456arkham -c -h 192.168.10.128 -p 6379
  7. // 查看集群信息
  8. cluster info
复制代码
  执行结果如下:
  1. 192.168.10.128:6379> cluster info
  2. cluster_state:ok
  3. cluster_slots_assigned:16384
  4. cluster_slots_ok:16384
  5. cluster_slots_pfail:0
  6. cluster_slots_fail:0
  7. cluster_known_nodes:4
  8. cluster_size:3
  9. cluster_current_epoch:4
  10. cluster_my_epoch:1
  11. cluster_stats_messages_ping_sent:2972
  12. cluster_stats_messages_pong_sent:2841
  13. cluster_stats_messages_fail_sent:4
  14. cluster_stats_messages_sent:5817
  15. cluster_stats_messages_ping_received:2841
  16. cluster_stats_messages_pong_received:2970
  17. cluster_stats_messages_fail_received:2
  18. cluster_stats_messages_received:5813
  19. total_cluster_links_buffer_limit_exceeded:0
复制代码
5、总结

  通过上述步骤,我们已经使用 Docker Compose 成功搭建了一个 Redis 集群。这种方式特殊适合用于开辟和测试环境,由于它的设置简单、部署快速,非常适合本地或测试环境中进行集群架构的模拟和验证。但在生产环境中,Redis 集群的部署和使用需要更为审慎和细致的规划,包罗性能调优、安全设置、资源分配等多个方面。
  使用 Docker Compose 部署 Redis 集群的上风重要在于快速构建和灵活设置。通过 Compose 文件,可以定义多个 Redis 实例的网络、端口和数据卷,实现一键启动整个集群的需求。在开辟和测试阶段,这种方式能够节省大量时间,便于模拟复杂的集群环境,资助开辟者验证 Redis 集群在不同场景下的体现和问题。Docker Compose 对资源的隔离性和可移植性,使得 Redis 集群的搭建和销毁变得极其简单,这对于功能开辟、问题排查和测试用例的验证来说,都是极大的上风。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表