NeoKylin-Server离线部署跨主机redis集群

  • NeoKylin-Server使用docker部署跨主机redis集群
    • 一、说明
    • 二、部署过程:
      • 1. 基础环境布置
      • 3. 部署etcd+flannel组网
      • 4. 启动docker并导入images;
      • 5. 创建目录、编辑文件;
      • 6. 运行启动 Redis 镜像;
      • 7. 创建 Redis 集群;
      • 8. 测试;

NeoKylin-Server使用docker部署跨主机redis集群

一、说明

背景:NeoKylin使用使用flannel+etcd可达成docker容器跨主机通信,再通过redis-cluster建立集群数据库。
系统:Neokylin-Server-5.0_U4-x86_64-Release-B14-20190320。
环境:

虚拟机(节点)名称 ip 部署
m1 192.168.136.21 etcd、redis
m2 192.168.136.22 etcd、redis
m3 192.168.136.23 etcd、redis
n1 192.168.136.26 redis
n2 192.168.136.27 redis
n3 192.168.136.28 redis

二、部署过程:

1. 基础环境布置

  1. 切换root账号或所有语句加sudo;
  2. 关闭6个节点防火墙(或打开端口);
systemctl stop firewalld
systemctl disable firewalld
  1. 6个节点安装docker、etcd、flannel、ntpdate
    说明:其中etcd只有m1、m2、m3使用
  2. 设置所有节点;

修改6个节点名称为m1、m2、m3、n1、n2、n3

hostnamectl set-hostname <newhostname>

修改6个节点hosts文件

vim /etc/hosts

结尾追加

192.168.136.21 m1
192.168.136.22 m2
192.168.136.23 m3
192.168.136.26 n1
192.168.136.27 n2
192.168.136.28 n3
  1. 时间同步;
    6个节点通过ntpdate时间同步
ntpdate cn.pool.ntp.org

3. 部署etcd+flannel组网

详细见: NeoKylin-Server-5.0 离线部署 etcd+flannel 集群,实现 docker 容器跨主机网络通信.

4. 启动docker并导入images;

设置6个节点自启动docker

systemctl start docker
systemctl enable docker

docker安装redis或导入镜像redis tar文件,这里使用6.0.8版本

docker load < redis.tar

导入tar文件需将导入的images重命名,先通过docker images获取导入的镜像名称前四位XXXX,再通过下语句重命名:

docker tag XXXX redis

5. 创建目录、编辑文件;

第一台服务器 m1 中执行创建存储目录命令:

mkdir -p /var/lib/redis/7000

第二台服务器 m2 中执行创建存储目录命令:

mkdir -p /var/lib/redis/7001

第三台服务器 m3 中执行创建存储目录命令:

mkdir -p /var/lib/redis/7002

第四台服务器n1中执行创建存储目录命令:

mkdir -p /var/lib/redis/7003

第五台服务器n2 中执行创建存储目录命令:

mkdir -p /var/lib/redis/7004

第六台服务器 n3中执行创建存储目录命令:

mkdir -p /var/lib/redis/7005

第一台服务器 m1

cat > /var/lib/redis/7000/redis.conf << EOF
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第二台服务器 m2

cat > /var/lib/redis/7001/redis.conf << EOF
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第三台服务器 m3

cat > /var/lib/redis/7002/redis.conf << EOF
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第四台服务器n1

cat > /var/lib/redis/7003/redis.conf << EOF
port 7003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第五台服务器n2

cat > /var/lib/redis/7004/redis.conf << EOF
port 7004
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第六台服务器 n3

cat > /var/lib/redis/7005/redis.conf << EOF
port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

6. 运行启动 Redis 镜像;

六台服务器分别执行 Docker 运行命令来启动 Redis 镜像。这里需要注意的是,不同服务器间的 Docker 是不能相互通信的,但这里我们采用了flannel组网,docker容器不指定网络时,会默认docker0网络,flannel已将docker0覆盖,所以不用创建网络。
说明:
-d:设置容器后台运行;
-v:指定挂载的宿主机存储目录;
–name:指定运行后的容器名称;
–cpus:指定容器使用 CPU 数量;
–memory:限制容器使用内存数量;
–memory-swap:指定交换内存大小,这里设置为 0,即不用交换内存;
–net:指定 Docker 使用的网络模式;
–restart:指定 Docker 重启时容器的重启策略;
–privileged:设置容器拥有特权,能够获取宿主机 Root 权限;

第一台服务器m1 执行如下命令

docker run -d -p 7000:7000 -p 17000:17000 -v /var/lib/redis/7000:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7000 \
redis redis-server /data/redis.conf

第二台服务器 m2执行如下命令

docker run -d -p 7001:7001 -p 17001:17001 -v /var/lib/redis/7001:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7001 \
redis redis-server /data/redis.conf

第三台服务器 m3执行如下命令

docker run -d -p 7002:7002 -p 17002:17002 -v /var/lib/redis/7002:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7002 \
redis redis-server /data/redis.conf

第四台服务器n1 执行如下命令

docker run -d -p 7003:7003 -p 17003:17003 -v /var/lib/redis/7003:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7003 \
redis redis-server /data/redis.conf

第五台服务器 n2执行如下命令

docker run -d -p 7004:7004 -p 17004:17004 -v /var/lib/redis/7004:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7004 \
redis redis-server /data/redis.conf

第六台服务器 n3执行如下命令

docker run -d -p 7005:7005 -p 17005:17005 -v /var/lib/redis/7005:/data \
--cpus=1 --memory=2GB --memory-swap=0 \
--privileged=true \
--restart=always \
--name redis-7005 \
redis redis-server /data/redis.conf

7. 创建 Redis 集群;

随意进入一台服务器,使用 Redis 镜像的 redis-cli 工具执行创建集群命令使各个 Redis 组成集群,这里本人进入第一台服务器 m1 中,使用端口为 7000 的 Redis 端镜像,可以执行下面命令:
-p:指定连接 Redis 的端口;
create:创建 Redis 集群;
–cluster:使用 Redis 集群模式命令;
–cluster-replicas:指定副本数(slave 数量);

docker exec -it redis-7000 \
redis-cli -p 7000 --cluster create \
192.168.136.21:7000 192.168.136.22:7001 192.168.136.23:7002 \
192.168.136.26:7003 192.168.136.27:7004 192.168.136.28:7005 \
--cluster-replicas 1

看到

Can I set the above configuration? (type 'yes' to accept):

输入yes

等待执行结束后,redis集群搭建完毕

8. 测试;

查看集群信息
进入 Redis 镜像内部并折佣 redis-cli 命令:
-p:指定连接 Redis 的端点;
-c:使用集群模式;

m1执行

docker exec -it redis-7000 redis-cli -p 7000 -c

查看集群信息,在容器中输入

> cluster info

查看集群节点信息,在容器中输入

> cluster nodes

在m1执行

docker exec -it redis-7000 redis-cli -p 7000 -c
set aaa 111

然后在m2执行

docker exec -it redis-7001 redis-cli -p 7001 –c
get aaa

如果弹出“111”,则说明redis集群正确

最后容器可添加以下语句保证电脑重启后容器自启动

docker container update --restart=always 容器名字

参考文档:
通过Docker部署Redis 6.x 集群.
NeoKylin-Server-5.0 离线部署 etcd+flannel 集群,实现 docker 容器跨主机网络通信.

NeoKylin-Server使用docker部署跨主机redis集群相关推荐

  1. kafka的简单介绍以及docker-compose部署单主机Kafka集群

    Kafka简单介绍 Kafka是由Apache软件基金会开发的一个分布式.分区的.多副本的.多订阅者的开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可 ...

  2. docker初体验:docker部署nginx负载均衡集群

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...

  3. Deepin+Docker+Redis5.0 安装 Redis集群

    一.开发环境 Deepin15.11 桌面版 Linux操作系统 我的Windows10 VMware15.5.1中 已经安装了Deepin15.11 VitualBox 用来运行Docker容器的虚 ...

  4. 正式环境docker部署hyperf_Hyperf使用docker-compose集群部署

    从运行容器开始 docker run -v /www:/www -p 9601:9601 -p 9602:9602 -p 9603:9603 -it --entrypoint /bin/sh hype ...

  5. docker+consul+overly 实现docker的跨主机访问

    docker 的跨主机访问 集群中主机连接到键值存储,Docker支持 Consul.Etcd和Zookeeper 集群中主机运行一个Docker守护进程 集群中主机必须具有唯一的主机名,因为键值存储 ...

  6. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    大家一定非常熟悉如何利用Docker启动单个Redis容器用于开发环境,本文将介绍如何利用Docker Compose模板在本机和云端部署基于Sentinel的高可用Redis 3集群. Redis集 ...

  7. 缓存架构设计之——Redis集群搭建

    前述 这里我们要基于Docker 安装一个redis集群,主要包含:Redis集群配置,主从复制,集群扩容缩容. 1.Redis集群高级应用 这里安装6个redis,配置如下 Redis节点 IP 端 ...

  8. 运维之道 | Redis 集群搭建

    Redis 集群搭建 集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机.同时每个节点至少有一个备份节点,所以下面最少需要创建使用6台主机,才能完成Redis Cluster 集群搭建(主节点. ...

  9. redis进阶使用(三)—— Redis 集群

    Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 ...

  10. 手把手教你实现 Docker 部署 Redis 集群

    作者:我为什么要写这个 cnblogs.com/cxbhakim/p/9151720.html 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试 ...

最新文章

  1. 针对Web应用的【攻击模式篇】
  2. python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)
  3. QT的QModbusResponse类的使用
  4. 【机器学习】降维技术-PCA
  5. Dalvik/ART(ANDROID)中的多线程机制(1)
  6. face alignment by 3000 fps系列学习总结(二)
  7. 计算机专业新手博客,本博客的标题不是“当初学者学习编程语言的时候在学什么?”...
  8. SAP License:生产订单无目标成本解决办法
  9. Windows10(MSN)天气数据爬取
  10. 用html5画卡通人物源代码,用canvas画一个卡通人物!!
  11. halcon 相似度_怎样用深度学习判断两张图片的相似度?
  12. 如何教你获取1688店铺所有商品,商品详情数据分析
  13. IOS 关闭键盘 退出键盘 的5种方式
  14. bilibili缓存文件在哪里_用这3招,彻底清除Windows10更新缓存,电脑高手必会
  15. influxdb官网文档翻译
  16. 陶哲轩实分析:微积分基本定理剖析
  17. 吴恩达机器学习第二周编程题参考答案
  18. 华为odjava机试题_华为OD机试 :找终点
  19. 给未来的你-李开复在2011级大学新生学习规划讲座上的演讲
  20. 外航空姐异国情感生活:空姐之恋

热门文章

  1. windows功能_windows必备的系统功能增强2具,免费,简单,实用
  2. sketchup边线设置_草图大师SketchUp改变模型边线颜色的方法
  3. 与美不期而遇:Carry on Till Tomorrow
  4. 把抽奖活动写成一篇技术博客是怎样一种体验
  5. python实现论文查重系统_基于数据仓库的图书数据挖掘系统设计与实现毕业论文+Python源码+知网查重报告...
  6. 【日语】英语26个字母的日语读法
  7. Android自定ViewGroup实现流式布局
  8. AVX贴片钽电容标识
  9. 有哪些好用的word文件对比工具
  10. 不可重复读和幻读的区别(悲观锁和乐观锁)