docker redis5.0 cluster集群搭建的实现

 更新时间:2020年02月09日 14:24:45   作者:oldk  
这篇文章主要介绍了docker redis5.0 cluster集群搭建的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

系统环境:ubuntu16.04LTS

本文是使用 6 个 docker 容器搭建单机集群测试,实际环境如果是多台,可对应修改容器数量、端口号和集群 ip 地址,每台机器都按下面步骤同样操作即可。

拉取redis官方镜像

docker pull redis:5.0

创建配置文件和数据目录

创建目录

mkdir ~/redis_cluster
cd ~/redis_cluster

新建一个模板文件sudo vim redis_cluster.tmpl,填入如下内容:

# redis端口
port ${PORT}

# 关闭保护模式
protected-mode no

# 开启集群
cluster-enabled yes

# 集群节点配置
cluster-config-file nodes.conf

# 超时
cluster-node-timeout 5000

# 集群节点IP host模式为宿主机IP
cluster-announce-ip 10.10.100.197

# 集群节点端口 7000 - 7005
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

# 开启 appendonly 备份模式
appendonly yes

# 每秒钟备份
appendfsync everysec

# 对aof文件进行压缩时,是否执行同步操作
no-appendfsync-on-rewrite no

# 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写
auto-aof-rewrite-percentage 100

# 重写前AOF文件的大小最小值 默认 64mb
auto-aof-rewrite-min-size 5120mb

# 关闭快照备份
save ""

批量创建配置文件和数据目录,终端运行以下命令:

for port in `seq 7000 7005`; do \
 mkdir -p ./${port}/conf \
 && PORT=${port} envsubst < ./redis_cluster.tmpl > ./${port}/conf/redis.conf \
 && mkdir -p ./${port}/data; \
done

批量启动 redis 容器

容器的 ip 地址采用 host 模式:

for port in `seq 7000 7005`; do \
 docker run -d -it --memory=1G \
 -v ~/redis_cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
 -v ~/redis_cluster/${port}/data:/data \
 --restart always --name redis-${port} --net host \
 --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \
done

这里的--memeory=1G是限制单个 docker 容器占用内存大小为 1G,超过会被进程杀死。运行时可能会出现...Memory limited without swap...这个警告,可以忽略。如不需要限制内存,可以去掉--memeory参数。

创建集群

随便进入其中一个容器:

docker exec -it redis-7000 bash

进入后执行如下命令创建集群:

redis-cli --cluster create 10.10.100.197:7000 10.10.100.197:7001 10.10.100.197:7002 10.10.100.197:7003 10.10.100.197:7004 10.10.100.197:7005 --cluster-replicas 1

安装redis-cli命令(如已有可跳过此步):

sudo apt install redis-tools

输入yes后,集群创建完毕,exit退出 docker,接着登录其中一个节点,验证集群可用性:

redis-cli -c -p 7000

输入cluster nodes查看集群状态

127.0.0.1:7000> cluster nodes
06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 connected
a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 connected
e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 master - 0 1567671902582 3 connected 10923-16383
0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 myself,master - 0 1567671901000 1 connected 0-5460
8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 master - 0 1567671902383 2 connected 5461-10922
fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 connected

设置集群密码

设置密码为什么不在上面的步骤,利用模板文件批量创建配置文件的时候就写进去?

无论是在 redis5.x 版本,还是以前的 redis 版本利用 ruby 创建集群的方式,在redis-cli --cluster create创建集群的环节没有密码参数配置,所以我们需要创建完集群再设置密码。

我们用config set方式分别为每一个节点设置相同的密码(不需要重启 redis,且重启后依然有效),在此之前先给所有 redis 配置文件加w权限,不然密码无法保存到文件。

注意当前路径依然是在~/redis_cluster/:

for port in `seq 7000 7005`; do \
 chmod a+w ./${port}/conf/redis.conf; \
done

下面用一台做示例:

登录一个节点:

redis-cli -c -p 7000

设置密码:

127.0.0.1:7000> config set masterauth 123456
OK
127.0.0.1:7000> config set requirepass 123456
OK
127.0.0.1:7000> auth 123456
OK
127.0.0.1:7000> config rewrite
OK

后面几台执行同样的操作即可。

集群写入数据简单测试

随便登录一个集群节点:

redis-cli -c -p 7003 -a 123456

写入数据:

127.0.0.1:7003> set va 1
-> Redirected to slot [7800] located at 10.10.100.197:7001
OK
10.10.100.197:7001> get va
"1"
10.10.100.197:7001> del va
(integer) 1

可以看到,集群中任意节点写入数据,在其他任意节点都能读到。

至此,redis 集群搭建完成。

其他注意事项

  • 外网访问 redis,可能需要防火墙开放相应端口;
  • 如果需要删除容器,可批量操作:
for port in `seq 7000 7005`; do \
 docker stop redis-${port};
 docker rm redis-${port};
done

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • docker 搭建部署 YAPI 框架的详细过程

    docker 搭建部署 YAPI 框架的详细过程

    Yapi是一个高效、易用、功能强大的接口文档管理工具,旨在为开发、产品、测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布、维护 AP,这篇文章主要介绍了docker 搭建部署 YAPI 框架,需要的朋友可以参考下
    2022-08-08
  • docker搭建minio的问题解决

    docker搭建minio的问题解决

    本文主要介绍了docker搭建minio的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 手把手教你docker部署(使用docker-compose)教程

    手把手教你docker部署(使用docker-compose)教程

    使用 Docker Compose 可以轻松、高效的管理容器,下面这篇文章主要给大家介绍了关于手把手教你docker部署(使用docker-compose)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Docker实践--部署Nodejs应用

    Docker实践--部署Nodejs应用

    本篇文章主要介绍了Docker实践--部署Nodejs应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 基于Docker版本squid搭建代理服务器的过程详解

    基于Docker版本squid搭建代理服务器的过程详解

    这篇文章主要介绍了基于Docker版本squid搭建代理服务器的配置方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下本文给大家介绍的非常详细
    2024-03-03
  • docker如何查看容器启动命令(已运行的容器)

    docker如何查看容器启动命令(已运行的容器)

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,下面这篇文章主要给大家介绍了关于docker如何查看容器启动命令(已运行的容器)的相关资料,需要的朋友可以参考下
    2023-02-02
  • docker-swarm教程之安全保护加密数据的方法详解

    docker-swarm教程之安全保护加密数据的方法详解

    默认情况下,集群管理器使用的raft 算法的日志在磁盘上加密,这种静态加密可保护服务配置和数据免受访问加密Raft日志的攻击者的攻击,因此引入了Docker secret功能,来保证加密文件的安全,本文将给大家详细的介绍一下如何安全的保护加密数据
    2023-08-08
  • Docker容器简单部署nginx过程解析

    Docker容器简单部署nginx过程解析

    这篇文章主要介绍了Docker容器简单部署nginx过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Docker Machine深入详解

    Docker Machine深入详解

    这篇文章主要介绍了Docker Machine深入详解,文章总结的很详细,有感兴趣的同学可以研究下
    2021-03-03
  • Docker入门教程之本地打包docker镜像教程

    Docker入门教程之本地打包docker镜像教程

    Docker镜像是一个特殊的文件系统,既提供了运行时所需的程序、库和资源,还提供了相应的配置参数,只是不包含动态数据,下面这篇文章主要给大家介绍了关于Docker入门教程之本地打包docker镜像的相关资料,需要的朋友可以参考下
    2023-06-06

最新评论