首页 > 数据库 >Docker 搭建redis集群-三台机机器、三主三从

Docker 搭建redis集群-三台机机器、三主三从

时间:2022-12-02 15:01:30浏览次数:41  
标签:-- 三主三 redis 192.168 密码 集群 Docker 节点


1. 拉取redis镜像

这里我使用的是之前打包的镜像,redis版本是:​​6.2.0​

直接拉取也行:

docker pull redis:latest

三台服务器:​​192.168.104.79​​​、​​192.168.104.80​​​、​​192.168.104.81​​ 三台机器可通信即可。

上面拉取的镜像是X86的镜像,如果是ARM64的服务器,上面镜像则不能用,这里贴一个热心网友的镜像,亲测可用(单机、集群均好使),版本为:​​5.0.9​​​,下载地址:​​https://gitee.com/AlphaHinex/trunk/blob/master/docker-library/redis/5.0/redis-kunpeng-5.0.9.tar.gz​

2. 创建redis集群容器

这步先创建6个redis容器(这里是没有设置redis连接密码的,如果需要设置redis密码,在创建容器时,最后都需要加上在最后添加:​​--requirepass "redis密码" --masterauth "redis密码"​​),先不启动。

这里创建redis集群密码给我坑的不行,使用docker 容器部署的redis集群,一旦容器创建之后,任何修改的东西,只要重启,就会失效!!!

这点给忽略了,导致浪费了大半天的时间去改这个集群密码。。。。。。。。。。。。。。。。。最后尝试在创建容器时指定密码,果然好使了。 如果需要指定密码,下面创建容器时,在最后添加:​​--requirepass "redis密码" --masterauth "redis密码"​

​docker-79​​ 机器:

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

​docker-80​​ 机器:

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6379

docker create --name redis-node4 --net host -v /data/redis-data/node4:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6380

​docker-81​​ 机器:

docker create --name redis-node5 --net host -v /data/redis-data/node5:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6379

docker create --name redis-node6 --net host -v /data/redis-data/node6:/data 192.168.104.51:5000/redis:latest --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6380

Docker 搭建redis集群-三台机机器、三主三从_redis


Docker 搭建redis集群-三台机机器、三主三从_java_02


Docker 搭建redis集群-三台机机器、三主三从_redis_03

在操作了几次之后,发现这种启动方式,并没有使用一个明显的配置文件,也就是现在redis集群的配置文件,是看不到的(也可能是我没有找到)。

为什么会这么说,后面可以在连接上redis后,测试修改下配置文件,比如修改redis持久化配置,默认是关闭持久化的,可以用 ​​CONFIG GET appendonly​​​ 查看。开启的话,用:​​config set appendonly yes​​​,然后将改动写入配置文件:​​config rewrite​​​,会发现报错了:​​(error) ERR The server is running without a config file​​。意思是服务没有配置文件。。。。。。。。

另外有个规律就是,如果想自定义redis的配置文件,比如设置下密码,改下redis节点启动的端口,设置是否持久化什么的,只需要在上面命令的最后,用​​-- config的名称 值​​​追加即可。例如上面的设置密码,直接追加:​​--requirepass "redis密码" --masterauth "redis密码"​​​,因为这里是集群模式,远程连接用的密码是​​requirepass​​​,而节点间的通信验证的是​​masterauth​​​,所以设置密码的话,要加上这两个属性。如果只有
​​​requirepass​​​ 没有 ​​masterauth​​,那么redis会疯狂打印日志,提示节点通信验证密码失败,日志文件半天就能达到N多个G。然后将服务器占满。然后redis宕掉。。。。。。。

日志提示信息为:​​(Non critical) Master does not understand REPLCONF listening-port: -NOAUTH Authentication required.​

接着依次启动容器:

Docker 搭建redis集群-三台机机器、三主三从_java_04


Docker 搭建redis集群-三台机机器、三主三从_容器_05


Docker 搭建redis集群-三台机机器、三主三从_docker_06


这里还有一点,要设置容器自动重启,否则服务器重启之后,redis没有自动起来。三台机器依次执行

docker update --restart=always redis-node1 redis-node2
docker update --restart=always redis-node3 redis-node4
docker update --restart=always redis-node5 redis-node6

3. 创建集群关系

进入上面创建的任意容器:

Docker 搭建redis集群-三台机机器、三主三从_redis集群_07


组建redis集群:

redis-cli --cluster create 192.168.104.79:6379 192.168.104.79:6380 192.168.104.80:6379 192.168.104.80:6380 192.168.104.81:6379 192.168.104.81:6380  --cluster-replicas 1

如果创建redis容器时,设置了密码,则这里组建集群时,需要指定密码:在上面命令最后加上:​​-a redis密码​

这里这个 ​​--cluster-replicas 1​​​ 表示​​主从比例​​​,当前集群主从节点比例是 ​​1:1​​,由于创建了6个redis容器,那么正常应该是三主三从。并且redis集群,主节点最少3个,3个才能保证集群的健壮性。

Docker 搭建redis集群-三台机机器、三主三从_redis_08


执行上面命令后,会打印配置信息,可以看到当前集群环境为3个​​Master​​​节点,并且平分​​16383​​个数据槽,并且自动分配3个从节点对应到其他3台Master节点。

redis集群情况为:

Master主节点

Slave从节点

192.168.104.79:6379

192.168.104.80:6380

192.168.104.80:6379

192.168.104.81:6380

192.168.104.81:6379

192.168.104.79:6380

接着是等待用户输入确认上面的集群信息:这里需要输入 ​​yes​

Docker 搭建redis集群-三台机机器、三主三从_redis_09


至此,redis集群搭建成功了。

4. 测试redis集群

如果设置了密码,则启动redis客户端时,要使用集群模式:​​redis-cli -c -h IP -p 端口​​​ 否则后面测试设置值的时候,报错:​​(error) MOVED 9189 192.168.104.67:6380​​。这里是因为上面分配了哈希槽了,测试的这个key的位置没有在当前连接的节点上,节点跳转出错。

看下集群节点信息是否是上面创建的节点信息:​​cluster info​​​ 如果上面设置了redis密码,则会提示:​​(error) NOAUTH Authentication required.​​​,需要先输入下密码:​​auth 你的redis密码​

Docker 搭建redis集群-三台机机器、三主三从_redis_10


如果没有设置密码,则可以直接使用redis自带连接工具连接redis:​​redis-cli​

Docker 搭建redis集群-三台机机器、三主三从_容器_11


可以看到 3 个Master 节点,3 个Slave节点。在任意一台redis上设置一个key值:set key1 “Hello World”

Docker 搭建redis集群-三台机机器、三主三从_redis_12


如果提示:​​(error) MOVED 9189 192.168.104.67:6380​​,则可能是没有启动集群模式。启动集群模式,使用命令:

redis-cli -h yourhost -p yourpost -a 'redis密码' -c

如果没有密码,则不用加参数 ​​-a 'redis密码'​​​。后面的​​-c​​ 不能省略。

在其他redis上查看:get key1

Docker 搭建redis集群-三台机机器、三主三从_java_13


Docker 搭建redis集群-三台机机器、三主三从_redis集群_14


可以看到,都是可以拿到这个值的。测试删除key:

Docker 搭建redis集群-三台机机器、三主三从_redis集群_15


Docker 搭建redis集群-三台机机器、三主三从_java_16

查看redis配置,可以在连接上redis后,使用 :​​127.0.0.1:6379> CONFIG GET *​​,不过这里打印的配置上面一行是属性,下面是值

Docker 搭建redis集群-三台机机器、三主三从_容器_17


可以看到,端口是​​6379​​​,日志级别是 ​​notice​​。

如果是单机启动的话,是可以在命令行修改配置的,格式: ​​CONFIG SET 属性名称 新值​​​ 如修改密码:​​CONFIG SET requirepass abc123456​​​,修改立即生效,不过重启可能会失效,下面将改动写入配置文件:​​config rewrite​

5. 关于redis集群

上面组建集群时使用了 ​​--cluster-replicas 1​​​ ,那么如果是指定 ​​--cluster-replicas 2​​的话,会不会变成2个主节点,对应4个从节点呢?

这个后面有空了测一下。

另外关于redis主从集群,为什么要用6个节点的问题,看到有人这么说:

既然要搭建集群,那么master节点至少要3个,slave节点也是3个,为什么呢?这是因为一个redis集群如果要对外提供可用的服务,那么集群中必须要有过半的master节点正常工作。基于这个特性,如果想搭建一个能够允许 n 个master节点挂掉的集群,那么就要搭建2n+1个master节点的集群。(感觉和Zookeeper的vote机制差不多)
如:
2个master节点,挂掉1个,则1不过半,则集群down掉,无法使用,容错率为0
3个master节点,挂掉1个,2>1,还可以正常运行,容错率为1
4个master节点,挂掉1个,3>1,还可以正常运行,但是当挂掉2个时,2=2,不过半,容错率依然为1


标签:--,三主三,redis,192.168,密码,集群,Docker,节点
From: https://blog.51cto.com/linmengmeng/5907044

相关文章

  • 禅道 docker 部署
     官方文档:https://hub.docker.com/r/idoop/zentao  1.创建本地目录:mkdir-p/data/zbox2.启动容器:dockerrun-itd--restart=always-p8088:80-p3316:3306-......
  • Redis 持久化 RDB
    RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。手动触发分别对应save和bgsave命令:·save命令:阻塞当前Redis服务器,线......
  • Windows下Redis安装与配置的两种方式
    原文链接:https://blog.csdn.net/HQqHQhqqhq/article/details/127903697安装和配置RedisRedis的安装有两种安装形式,一种是安装包式,另一种是压缩包注意:windows没有32位的,所......
  • mysql docker安装mysql8
    目录mysqldocker安装mysql8安装命令验证mysqldocker安装mysql8mysql数据库想忽略大小写,如果原先已经有数据了,是无法直接实现的。需要先把数据导出,然后把数据删除改成忽......
  • (收藏)Java中使用Jedis操作Redis
    使用Java操作Redis需要jedis-2.1.0.jar如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jarpackagecom.test;importjava.util.HashMap;import......
  • Redis中的单线程多路复用的一个通俗解析
    在尚学堂的课程中,有个不错的单线程多路复用的通俗解析,觉得不错:其实就是黄牛买票,黄牛是单线程了,但他能服务很多买票的人,买票的人也不需要去等待的 ......
  • centos7.9离线安装docker环境
    centos7.9安装docker1.离线下载dockerhttps://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz2.离线安装docker准备前:2.0.1关闭Selinux首先......
  • 【Docker学习系列】Docker学习2-docker设置阿里云镜像加速器
    在上一篇中,我们学会了在centos中安装docer。我们知道,镜像都是外网的,镜像一般都是比较大的,因为种种原因,我们知道,从外网下载比较慢的。所以,本文,凯哥就介绍怎么将docker的镜像......
  • 基于docker的mysql主从同步搭建
    环境1、macbook2、docker20.10.173、dockerdesktop开始搭建*第一步:准备容器文件存放的物理文件地址目录(/Users/qeek/mydata可以按需定义)#####主库mkdir-pv......
  • 15个Docker基本命令及用法
    查看docker安装信息dockerinfo获取docker镜像dockerpullazraelrabbit/monupw创建docker容器dockerrun--namemonojexus-d-p32022:22-p32080:80-v/mydata:/data......