微服务实战系列之玩转Docker(十六)

导览

前言

Docker,一个宠儿,一个云原生领域的"容器健将",博主自开设玩转Docker系列后,从7月到本月,已足足持续更新了3个月。通过循序渐进、由浅入深的方式,以十五篇"精美实干"的Docker实践文章,为各位有兴趣、需帮助的盆友/同学提供了一定的示范或指南。

经过这个系列的创作,博主深切地感受到知识的整合与传递过程,不是堆砌拼凑,更不是左拉右拽。正如你在提交一个方案时,如果没有明确的论题、论据,那么大概率是一次无效的思考。

总之,还是一句话,理论联系实际是"技术ren"的看家本领。

话不多言归正传,最近有粉丝又找博主了,询问什么时候更博啊...甚为惭愧。因为博主虽然主攻Java领域,但是周边也得涉猎。为积极响应粉丝盆友的号召,玩转Docker系列今日再续新篇。那么该谈点什么呢?咱们边走边聊,Let's go~

Q:基于容器云如何实现高可用的配置中心

先抛个问题给各位,当业务从单体(或单节点)切换到集群服务模式时,你最该考虑的是什么呢?
甲说:我打包一次,可以随处部署,这正是Docker可以解决的,妙极了;
乙说:业务模块切换为微服务,实现高可用,好想法;
丙说:集中发布、集中部署、集中运维,好主意;

其他人怎么说,咱们先不谈了。以上甲乙丙的想法,也可能是我们的想法,博主在这里不做评价,但是必须考虑的指标一定是配置中心支持高可用

当前我们以微服务模式 构建业务,以容器化思维部署应用,那么中心轴是什么?毫无疑问,一定是配置中心。配置中心至少发挥了以下3个作用:

  • 服务注册
  • 服务状态发布与订阅
  • 服务发现

行文至此,各位盆友,脑海中有没有闪现出一个"名人":动物园管理员------ZooKeeper。在博主的历史文章中,已对这位管理员做了较为详细的介绍,这里不再赘述(可以回去查找)。今天我们看看另外一个活跃于云平台(PaaS)的服务发现配置中心------etcd 吧。

一、etcd入门

1. 简介

什么是etcd ?

etcdis a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node。

一句话总结:etcd是一个高度一致的分布式key-value存储仓库,支持集群共享访问,并且可以优雅的实现集群内的选举,避免宕机。

它的名称由来也很有意思,是 etc(unix/linux的/etc目录)+ d(distribute系统)。简单理解就是一个支持分布式的"文件目录"

2. 特点

根据官方提供的文档材料,博主进行简单描述,以供大家参考:

总结一下,即以下8个字:

  • 简单:调用简单
  • 安全:支持SSL机制
  • 快速:读写效率高
  • 可信:分布一致性强

二、etcd实践

对它有一个简单的认知后,博主先带着各位亲自体验一下,咱走着聊~

1. 安装etcd镜像

powershell 复制代码
docker pull bitnami/etcd:3

效果如下:

2. 创建etcd集群

博主准备3个主机,用于模拟创建真实的etcd集群,每个节点定义如下:

节点名称 节点IP端口
etcd-node1 10.11.12.44:2380
etcd-node2 10.11.12.45:2380
etcd-node3 10.11.12.46:2380

同时为便于管理,博主选择采用docker compose进行容器编排,以下是每个节点的docker-compose.yml基础配置内容。

2.1 etcd-node1

yaml 复制代码
services:
  etcd-node1:
    image: bitnami/etcd:3
    container_name: etcd-node1
    environment:
      - TZ=Asia/Shanghai
      - ETCD_NAME=etcd-node1
      - ETCD_DATA_DIR=/bitnami/etcd/data
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.44:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.44:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /app/etcd/data:/bitnami/etcd/data

2.2 etcd-node2

yaml 复制代码
services:
  etcd-node2:
    image: bitnami/etcd:3
    container_name: etcd-node2
    environment:
      - TZ=Asia/Shanghai
      - ETCD_NAME=etcd-node2
      - ETCD_DATA_DIR=/bitnami/etcd/data
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.45:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.45:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /app/etcd/data:/bitnami/etcd/data

2.3 etcd-node3

yaml 复制代码
services:
  etcd-node3:
    image: bitnami/etcd:3
    container_name: etcd-node3
    environment:
      - TZ=Asia/Shanghai
      - ETCD_NAME=etcd-node3
      - ETCD_DATA_DIR=/bitnami/etcd/data
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.46:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.46:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /app/etcd/data:/bitnami/etcd/data

3. 启动etcd集群

启动集群很简单,分别在每个节点中执行如下命令:

powershell 复制代码
# 后台启动
docker compose up -d
# 查看
docker compose ps

效果如下:

至此,一个基于docker的etcd集群创建完成了。

结语

这是一篇极简的etcd学习教程,重在实践。etcd是容器云中常用的分布式存储工具,在高可用高可靠等安全服务的前提下, 它能够为业务服务提供极高的数据稳定性和可靠性。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

系列回顾


微服务实战系列之玩转Docker(十五)
微服务实战系列之玩转Docker(十四)
微服务实战系列之玩转Docker(十三)
微服务实战系列之玩转Docker(十二)
微服务实战系列之玩转Docker(十一)
微服务实战系列之玩转Docker(十)
微服务实战系列之玩转Docker(九)
微服务实战系列之玩转Docker(八)
微服务实战系列之玩转Docker(七)
微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生

相关推荐
Tp_jh1 小时前
推荐一款非常好用的C/C++在线编译器
linux·c语言·c++·ide·单片机·unity·云原生
小码哥呀3 小时前
RabbitMQ如何保证发送的消息可靠(RabbitMQ的Confirm模式和2.Return模式)
分布式·rabbitmq
白总Server3 小时前
OpenHarmony
后端·spring cloud·华为·微服务·ribbon·架构·系统架构
林小果13 小时前
K8S搭建
云原生·容器·kubernetes
LKID体4 小时前
docker加载目录中所有的镜像
java·docker·容器
火山引擎边缘云6 小时前
QCon演讲实录|徐广治:边缘云原生操作系统的设计与思考
云原生·边缘计算·cdn
Python 集中营6 小时前
如何使用springboot+redis开发一个简洁的分布式锁?
spring boot·redis·分布式
行者Sun19896 小时前
【K8s】专题十五(1):Kubernetes 网络之概念总览
网络·云原生·容器·kubernetes
=(^.^)=哈哈哈7 小时前
Kubernetes(K8s)相关漏洞介绍
云原生·容器·kubernetes·云原生安全