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
第一步 首先在任意一台服务器,新建一个文件(主要是为了存放redis数据和一些配置信息)。 新建一个 redis 文件,在redis文件中再新建一个master和slave,因为一台机器上要放两个redis实例(机器有限,当然每个reids的master不要和slave放在同一台机器上) 如图: 以master为列,创建好之后 分别创建 docker-compose.yml文件和redis.conf文件,创建数据目录data 如图:
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 参数配置或者其他配置不对 注释掉或者 改为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集群的方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!