docker搭建redis集群的方法

本篇内容主要讲解“docker搭建redis集群的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker搭建redis集群的方法”吧!

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的丰泽网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

之前用redis单机搭建过伪集群,但是到了真实环境才发现处处是坑

搭建条件3台宿主机 同时安装docker和docker-compose 可以用vm虚拟三台 6个集群。

三台服务器分别是 192.168.65.133、192.168.65.134、192.168.65.135

  1. 第一步首先在任意一台服务器,新建一个文件(主要是为了存放redis数据和一些配置信息)。 新建一个 redis 文件,在redis文件中再新建一个master和slave,因为一台机器上要放两个redis实例(机器有限,当然每个reids的master不要和slave放在同一台机器上) 如图:docker搭建redis集群的方法 以master为列,创建好之后 分别创建 docker-compose.yml文件和redis.conf文件,创建数据目录data 如图:docker搭建redis集群的方法

  2. docker-compose.yml:

version: '3.3'
services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf
    network_mode: host
    ports:
      - "6379:6379"
      - "16379:16379"
    volumes:
      - /home/docker_container/redis/master/data:/data
      - /home/docker_container/redis/master/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /home/docker_container/redis/master/log/redis.log:/root/redis/redis.log

上述network:host是为了解决Waiting for the cluster to join....................一直没有成功

redis.conf#bind 192.168.65.133 127.0.0.1 #必须要注释 port 6379 #端口 protected-mode no #requirepass admin #masterauth admin daemonize no appendonly yes cluster-enabled yes cluster-node-timeout 15000 cluster-config-file nodes.conf

对应的192.168.65.133 上slave也配置一份需要修改配置文件 docker-compose.yml和redis.conf文件 docker-compose.yml version: '3.3' services: redis-slave: image: redis:latest container_name: redis-slave restart: always command: redis-server /usr/local/etc/redis/redis.conf network_mode: host ports: - "6380:6380" - "16380:16380" volumes: - /home/docker_container/redis/slave/data:/data - /home/docker_container/redis/slave/conf/redis.conf:/usr/local/etc/redis/redis.conf

redis.conf #bind 0.0.0.0 port 6380 protected-mode no #requirepass admin #masterauth admin daemonize no appendonly yes cluster-enabled yes cluster-node-timeout 15000 cluster-config-file nodes.conf 主要是改端口,上述配置文件 docker-compose.yml文件中 - "16380:16380" 是集群通信端口 我一般就是在redis 端口上+10000 把所有文件都准备好了之后,用docker-compose up -d 启动master和slave的redis,并查看启动情况,启动没啥问题, 就可以把redis文件用 scp -r 命令 copy到另外两台服务器。 然后用docker-compose up -d 启动剩下的redis 一共是 6个redis. 启动完成后,我们就可以用 redis-trib 集群 redis. 可以在任意一台机器上输入集群命令: docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.65.133:6379 192.168.65.133:6380 192.168.65.134:6379 192.168.65.134:6380 192.168.65.135:6379 192.168.65.135:6380 会出现: `>>> Creating cluster

Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.30.70:7001 192.168.30.70:7002 192.168.30.70:7003 Adding replica 192.168.30.70:7004 to 192.168.30.70:7001 Adding replica 192.168.30.70:7005 to 192.168.30.70:7002 Adding replica 192.168.30.70:7006 to 192.168.30.70:7003 M: 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 192.168.30.70:7001 slots:0-5460 (5461 slots) master M: bb8fda08e1dcd39e937443f81b5458e80f52d804 192.168.30.70:7002 slots:5461-10922 (5462 slots) master M: d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 192.168.30.70:7003 slots:10923-16383 (5461 slots) master S: 52eee69afa751d71c84d5436d14b0e16a37536fa 192.168.30.70:7004 replicates 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 S: 701ed2fbb3df9fc63b083818620f5c020d05e323 192.168.30.70:7005 replicates bb8fda08e1dcd39e937443f81b5458e80f52d804 S: a3548a9dffa225f05786ea2289db65f5f1c623be 192.168.30.70:7006 replicates d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 Can I set the above configuration? (type 'yes' to accept):`

输入** yes** ` Waiting for the cluster to join.....

Performing Cluster Check (using node 192.168.30.70:7001) M: 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 192.168.30.70:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 192.168.30.70:7003@17003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: a3548a9dffa225f05786ea2289db65f5f1c623be 192.168.30.70:7006@17006 slots: (0 slots) slave replicates d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 S: 701ed2fbb3df9fc63b083818620f5c020d05e323 192.168.30.70:7005@17005 slots: (0 slots) slave replicates bb8fda08e1dcd39e937443f81b5458e80f52d804 S: 52eee69afa751d71c84d5436d14b0e16a37536fa 192.168.30.70:7004@17004 slots: (0 slots) slave replicates 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 M: bb8fda08e1dcd39e937443f81b5458e80f52d804 192.168.30.70:7002@17002 slots:5461-10922 (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration.

Check for open slots... Check slots coverage... [OK] All 16384 slots covered. `

master和slave应该是可以通过集群顺序调整,没有尝试过,不知道是不是这样。 docker run --rm -it inem0o/redis-trib check 192.168.65.133:6379测试是否连接上集群

搭建集群采坑 1、创建集群的时候会遇到Waiting for the cluster to join....................一直没有成功 修改 网络模式改成host,docker run 的方式加上--net host,在每个redis的docker-compose方式加上network_mode: host。 2、防火墙未关闭会导致或者redis未正确启动 错误:can't connect to node 192.168.65.134:6379 解决方案:关闭防火墙

关闭防火墙

systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动

开启端口

firewall-cmd --zone=public --add-port=80/tcp --permanent 如果还是不行,需要去检查redis是否 启动成功,可以尝试在访问其他端口,看能不能连上 大部分原因可能是 redis.conf配置问题,配置文件 bind 参数配置或者其他配置不对 docker搭建redis集群的方法 注释掉或者 改为0.0.0.0 试着改为ip 加127.0.0.1 还是有问题 3、redis-cli 连接集群时 加上 -c 参数 redis-cli -c -h yourhost -p yourpost

集群密码设置: 使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码 如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题 各个节点的密码都必须一致,否则Redirected就会失败 具体指令如下: 第一种 集群密码 cd /mnt/redis-cluster; chmod 777 9001/conf/redis.conf; //配置文件授权 ... chmod 777 9003/conf/redis.conf; //两台配置文件都需要授权

//链接redis docker ps -a //查看容器ID

//5.0.2 docker run -it --link redis-9001:redis --net redis-net --rm redis redis-cli -h XX.XXX.XX.XX -c -p 9001 //5.0(这里设置的是单台redis的密码,所以需要每台redis都要进入执行以下操作设置密码) docker exec -it redis容器ID redis-cli -h XX.XXX.XX.XX -c -p 9001

第二种 //设置密码 config set masterauth 123456 config set requirepass 123456 auth 123456 config rewrite

设置masterauth config set masterauth 密码

设置requirepass config set requirepass 密码

验证密码,以继续操作 auth LinShen

回写到文件,使其永久生效(如果这里出现Permission denied,则说明Dockerfile少了RUN chmod 777 /usr/local/etc/redis/redis.conf) config rewrite

到此,相信大家对“docker搭建redis集群的方法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


分享标题:docker搭建redis集群的方法
本文来源:http://ybzwz.com/article/jodjed.html