ev123建站,我要自学网网站建设,wordpress 发布网页,cctv军事报道Redis的dev环境docker搭建 1、前言2、官方文档重点信息提取2.1、创建redis实例2.2、使用自己的redis.conf文件。 3、单机版redis搭建4、redis集群版4.1、一些验证4.2、一些问题 结语 1、前言
本文主要针对M2下#xff0c;相应进行开发环境搭建#xff0c;然后做一个文档记录… Redis的dev环境docker搭建 1、前言2、官方文档重点信息提取2.1、创建redis实例2.2、使用自己的redis.conf文件。 3、单机版redis搭建4、redis集群版4.1、一些验证4.2、一些问题 结语 1、前言
本文主要针对M2下相应进行开发环境搭建然后做一个文档记录是第二弹文章搭建是采用docker compose文件。 希望对相关人有帮助。如果只想要Docker-Compose文件请转到第三节的单机模式和第四节的集群模式。 针对第四节集群模式这里有个地方需要提前说明目前redis cluster的搭建模式存在一个问题无法解决即无法通过Docker暴露出的端口进行宿主机的外部访问连接后续只能看看是否研究开启tsl或者其他方式允许访问。从内部各种方式可以验证出集群状态是正常的而且数据能正常访问。 原本是打算使用redis-commander进行docker集群内访问redis cluster但是很可惜官方似乎在docker compose组建的运行环境下是存在问题的Issue看这。
2、官方文档重点信息提取
redis的docker镜像官网地址在此处点击。 hub地址是需要翻墙访问 2.1、创建redis实例
docker run --name some-redis -d redis如果想持久化则是如下命令
docker run --name some-redis -d redis redis-server --save 60 1 --loglevel warningredis-server --save 60 1 --loglevel warning这是传递给 Redis 服务器的参数它告诉 Redis 服务器在后台每隔 60 秒检查一次数据库如果有至少一个键被修改则将其写入磁盘。后面的 1 表示如果至少有一个键被修改则每秒进行一次检查。–loglevel warning 设置 Redis 服务器的日志级别为 “warning”表示只记录警告级别的日志。
2.2、使用自己的redis.conf文件。
创建自己的Dockerfile文件将上下文中的redis.conf添加到/data/中如下所示
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ redis-server, /usr/local/etc/redis/redis.conf ]也可以使用docker命令
docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf其中/myredis/conf/是包含redis.conf文件的本地目录。使用这种方法意味着你不需要为你的redis容器创建Dockerfile。 映射的目录应该是可写的因为根据配置和操作模式Redis可能需要创建额外的配置文件或重写现有的配置文件。
3、单机版redis搭建
先创建redis单机版的目录。
mkdir redis-single然后在redis-single目录下创建两个目录一个是conf一个是data
mkdir conf data在conf目录下创建redis.conf文件
# redis-single.conf
# 允许来自任何IP的连接
bind 0.0.0.0
# 设置启动保护模式
# protected-mode yes
# 设置密码
requirepass test123save 900 1 # 在900秒15分钟内如果至少有1个键被修改就创建一个RDB快照
save 300 10 # 在300秒5分钟内如果至少有10个键被修改就创建一个RDB快照
save 60 10000 # 在60秒内如果至少有10000个键被修改就创建一个RDB快照appendonly yes # 启用了 AOF 持久化
appendfsync everysec # 将写操作追加到AOF文件并在每秒同步一次上述配置为aof持久化的时机解释如下
关键字持久化时机解释appendfsyncalways每执行一次更新命令持久化一次appendfsynceverysec每秒钟持久化一次appendfsyncno不会主动执行持久话依赖于操作系统的空闲调用
然后回退到上一级目录即redis-single目录下创建docker-compose.yml文件文件内容如下所示
version: 3.1services:redis-single:image: redis:latestrestart: alwaysports:- 6379:6379volumes:- /Users/tanqiwei/docker-dev/redis-single/data:/data- /Users/tanqiwei/docker-dev/redis-single/conf/redis-single.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]然后输入下面命令启动
docker compose up然后外部用一些redis的可视化客户端连接进行连接然后进行key的创建和更新都是正常的。
4、redis集群版
redis集群版最开始写的很顺利而且成功运行但是目前为止我依旧没找到任何可以通过外部手段连接该集群的方式等待后续更新集群是正常创建的。
由于使用redis cluster创建3节点主3节点副本所以一共是6个节点。
首先创建redis-cluster目录
mkdir redis-cluster同样是在这个目录下创建conf data两个文件夹。
mkdir conf data然后进入conf目录创建redis-master.conf文件内容如下
# redis-cluster.conf
# 启用集群模式
bind 0.0.0.0
cluster-enabled yes
cluster-node-timeout 5000
requirepass test123
cluster-config-file nodes.conf
masterauth test123# 在900秒15分钟内如果至少有1个键被修改就创建一个RDB快照
save 900 1
# 在300秒5分钟内如果至少有10个键被修改就创建一个RDB快照
save 300 10
# 在60秒内如果至少有10000个键被修改就创建一个RDB快照
save 60 10000 # 启用了 AOF 持久化
appendonly yes
# 将写操作追加到AOF文件并在每秒同步一次
appendfsync everysec 然后使用cp命令创建另外5个文件文件内容一模一样。
tanqiweitanqiweideMacBook-Pro conf % ls
redis-master.conf redis-node2.conf redis-slave1.conf
redis-node1.conf redis-node3.conf redis-slave2.conf然后回到上一层下的data目录分别创建如下六个文件夹(文件夹名分别为master、node1、node2、node3、slave1、slave2
tanqiweitanqiweideMacBook-Pro data % ls
master node1 node2 node3 slave1 slave2接着回到redis cluster创建下面的docker-compose文件。
version: 3.1services:redis-cluster:image: redis:latestentrypoint: /bin/sh -ccommand: echo yes | redis-cli --cluster create198.20.0.31:6379198.20.0.32:6379198.20.0.33:6379198.20.0.34:6379198.20.0.35:6379198.20.0.36:6379--cluster-replicas 1 --pass test123networks:redis_cluster_subnet:ipv4_address: 198.20.0.30depends_on:- redis-master- redis-slave1- redis-slave2- redis-node1- redis-node2- redis-node3redis-master:image: redis:latestrestart: alwaysports:- 7001:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/master:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-master.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.31redis-slave1:image: redis:latestrestart: alwaysports:- 7002:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/slave1:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-slave1.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.32redis-slave2:image: redis:latestrestart: alwaysports:- 7003:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/slave2:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-slave2.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.33redis-node1:image: redis:latestrestart: alwaysports:- 7004:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/node1:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-node1.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.34 redis-node2:image: redis:latestrestart: alwaysports:- 7005:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/node2:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-node2.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.35 redis-node3:image: redis:latestrestart: alwaysports:- 7006:6379volumes:- /Users/tanqiwei/docker-dev/redis-cluster/data/node3:/data- /Users/tanqiwei/docker-dev/redis-cluster/conf/redis-node3.conf:/etc/redis/redis.confcommand: [redis-server, /etc/redis/redis.conf]networks:redis_cluster_subnet:ipv4_address: 198.20.0.36 networks:redis_cluster_subnet:driver: bridgeipam:config:- subnet: 198.20.0.0/24 在这个docker compose文件里面为了能6个节点互联且能够固定IP所以我采用了子网的方式。
networks:redis_cluster_subnet:driver: bridgeipam:config:- subnet: 198.20.0.0/24然后每个redis集群其实按照单机版的方式处理只是加了网络的选项而且配置文件设置了以集群方式开启。
最后定义了一个名为 redis-cluster 的服务使用最新版本的 Redis 镜像。entrypoint 和 command 部分包含了在容器启动时执行的命令用于初始化 Redis 集群。
然后执行docker compose up的命令就能启动成功。 4.1、一些验证
docker exec -it redis-cluster-redis-master-1 /usr/local/bin/redis-cli -c -a test123 --cluster check 198.20.0.31:6379输出如下所示:
tanqiweitanqiweideMacBook-Pro data % docker exec -it redis-cluster-redis-master-1 /usr/local/bin/redis-cli -c -a test123 --cluster check 198.20.0.31:6379
Warning: Using a password with -a or -u option on the command line interface may not be safe.
198.20.0.31:6379 (b244b72f...) - 0 keys | 5461 slots | 1 slaves.
198.20.0.33:6379 (183e2e42...) - 0 keys | 5461 slots | 1 slaves.
198.20.0.32:6379 (cfcf1409...) - 1 keys | 5462 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average. Performing Cluster Check (using node 198.20.0.31:6379)
M: b244b72fc5375c7e559ccb02aff9992e0d1aa0d0 198.20.0.31:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 183e2e42276ab7a4dfdfb426cb3e01a65a038362 198.20.0.33:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 91c8156bd7afd58c252d09ea416b68abbd3ddb49 198.20.0.35:6379slots: (0 slots) slavereplicates b244b72fc5375c7e559ccb02aff9992e0d1aa0d0
S: 7cf393d7371a927104ae861cdb8dc675f2a35281 198.20.0.36:6379slots: (0 slots) slavereplicates cfcf14091a752771d47e092321e3f4ade75f6de7
S: df71e5c164e2f99e41b1a951d7bc60c6e9daa7eb 198.20.0.34:6379slots: (0 slots) slavereplicates 183e2e42276ab7a4dfdfb426cb3e01a65a038362
M: cfcf14091a752771d47e092321e3f4ade75f6de7 198.20.0.32:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...
[OK] All 16384 slots covered.redis-cluster-redis-master-1是启动后的redis服务名按docker ps查询得到。 输入下面命令进入对应的docker服务
docker exec -it redis-cluster-redis-master-1 /usr/local/bin/redis-cli -c -a test123 -h 198.20.0.31 -p 6379然后进行一些集群信息访问
目前可以确认服务内部的ok的至于最开始无法命令get是因为从节点一般做备份不允许读取所以得开readonly命令。
4.2、一些问题
在进行docker compose down或者docker compose stop命令后再次重启会提示。
[ERR] Node XXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.在google查了许久没有头绪只能每次重启前进行数据清理。
删除每个redis下的appendonly.aof、dump.rdb、xxx.conf文件。 例如我在redis-cluster目录下时执行这个命令。
rm -rf data/*/*第二个问题是无法进行外部连接访问任何redis的连接器包括原生的redis-cli在docker宿主机的情况下无法连接内部集群只能通过容器内部访问。 这个问题找了半天都没有头绪后续有时间研究出来了再更新文档 结语
目前搭建redis单机是没问题的按自己思路搭建集群也没问题后面发现无法通过宿主机外部连接访问进行了各种查询也尝试过海外其他人的方案都无法让外部宿主机进行访问。 我认为可能有其他方式或者配置上的问题目前研究时间有限等后续抽时间研究好了再更新文档。 文章转载自: http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.plkrl.cn.gov.cn.plkrl.cn http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.qkcyk.cn.gov.cn.qkcyk.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.ljbm.cn.gov.cn.ljbm.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.fy974.cn.gov.cn.fy974.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.wnpps.cn.gov.cn.wnpps.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.nbfkk.cn.gov.cn.nbfkk.cn http://www.morning.tbplf.cn.gov.cn.tbplf.cn http://www.morning.hsrch.cn.gov.cn.hsrch.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn http://www.morning.okiner.com.gov.cn.okiner.com http://www.morning.qhczg.cn.gov.cn.qhczg.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.fmtfj.cn.gov.cn.fmtfj.cn http://www.morning.lptjt.cn.gov.cn.lptjt.cn http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn http://www.morning.bchgl.cn.gov.cn.bchgl.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn http://www.morning.rbjf.cn.gov.cn.rbjf.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.chtnr.cn.gov.cn.chtnr.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.lkkgq.cn.gov.cn.lkkgq.cn http://www.morning.hgcz.cn.gov.cn.hgcz.cn http://www.morning.ddgl.com.cn.gov.cn.ddgl.com.cn http://www.morning.yunease.com.gov.cn.yunease.com http://www.morning.dshxj.cn.gov.cn.dshxj.cn http://www.morning.hgscb.cn.gov.cn.hgscb.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn http://www.morning.gcqs.cn.gov.cn.gcqs.cn http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.nlrp.cn.gov.cn.nlrp.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.wjhnx.cn.gov.cn.wjhnx.cn http://www.morning.spfq.cn.gov.cn.spfq.cn http://www.morning.lsfbb.cn.gov.cn.lsfbb.cn http://www.morning.lggng.cn.gov.cn.lggng.cn http://www.morning.kqnwy.cn.gov.cn.kqnwy.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.snmsq.cn.gov.cn.snmsq.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.lwnb.cn.gov.cn.lwnb.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.gqfbl.cn.gov.cn.gqfbl.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.txlnd.cn.gov.cn.txlnd.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn