Docker搭建etcd集群(亲测)

1 篇文章 0 订阅

笔者测试环境为Centos7.5 64bit

1、容器安装etcd

#yum install etcd -y    //centos7的镜像直接用yum安装即可

#etcd -version           //进入容器查看etcd版本,是否安装成功

2、Etcd部署

2.1、开放etcd通信使用的接口

#firewall-cmd --zone=public --add-port=2379/tcp --permanent

#firewall-cmd --zone=public --add-port=2380/tcp --permanent

#firewall-cmd --reload

#firewall-cmd --list-ports        //查看已经打开的所有端口

#mkdir -p /var/data/etcd

Etcd启动参数说明及注意事项:

--name etcd0 //节点名称,默认为 default

--data-dir //服务运行数据保存的路径,默认为${name}.etcd

--snapshot-count //指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘

--heartbeat-interval //leader 多久发送一次心跳到 followers。默认值是 100ms

--eletion-timeout //重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms。

--listen-peer-urls  //和同伴通信的地址,比如http://ip:2380,如果有多个,使用逗号分隔。需要所有节点都能够访问,所以不要使用 localhost

--listen-client-urls //对外提供服务的地址:比如http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和 etcd 交互

--advertise-client-urls:对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点

--initial-advertise-peer-urls http://192.168.2.55:2380 //其他member使用,其他member通过该地址与本member交互信息。一定要保证从其他member能可访问该地址。静态配置方式下,该参数的value一定要同时在--initial-cluster参数中存在。

memberID的生成受--initial-cluster-token和--initial-advertise-peer-urls影响。该节点同伴监听地址,这个值会告诉集群中其他节点

--initial-cluster //集群中所有节点的信息,格式为node1=http://ip1:2380,node2=http://ip2:2380,…,注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值。

--initial-cluster-state //新建集群的时候,这个值为 new;假如已经存在的集群,这个值为 existing。

--initial-cluster-token//创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误。

--initial-cluster-token etcd-cluster-2    //用于区分不同集群。本地如有多个集群要设为不同。

--initial-cluster-state new    //用于指示本次是否为新建集群。有两个取值new和existing。如果填为existing,则该member启动时会尝试与其他member交互。集群初次建立时,要填为new,经尝试最后一个节点填existing也正常,其他节点不能填为existing。集群运行过程中,一个member故障后恢复时填为existing,经尝试填为new也正常。

上述配置也可以设置配置文件,默认为/etc/etcd/etcd.conf

#docker run -ti --net mynetwork --ip 192.168.0.10 --name etcd1 -p 2379:2379 -p 2380:2380 d5d21b79319a /bin/bash

#docker run -ti --net mynetwork --ip 192.168.0.10 --name etcd1 -v /root/jiezisoft:/root/jiezisoft --privileged=true -p 2379:2379 -p 2380:2380 -p 9901:9901 -p 9902:9902 -p 9903:9903 -p 9904:9904 d5d21b79319a /bin/bash

#docker create -it --net mynetwork --ip 192.168.0.10 --name etcd1 -v /root/jiezisoft:/root/jiezisoft/ --privileged=true -p 2379:2379 -p 2380:2380 -p 9901:9901 -p 9902:9902 -p 9903:9903 -p 9904:9904 d5d21b79319a bash

#etcd --name node1 --initial-advertise-peer-urls http://192.168.0.10:2380 --listen-peer-urls http://192.168.0.10:2380 --listen-client-urls http://192.168.0.10:2379,http://127.0.0.1:2379 --advertise-client-urls http://192.168.0.10:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://192.168.0.10:2380,node2=http://192.168.0.20:2480,node3=http://192.168.2.10:2380 --initial-cluster-state new

#etcd --name node1 --initial-advertise-peer-urls http://192.168.0.10:2380 --listen-peer-urls http://192.168.0.10:2380 --listen-client-urls http://192.168.0.10:2379,http://127.0.0.1:2379 --advertise-client-urls http://192.168.0.10:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://192.168.0.10:2380,node2=http://192.168.0.20:2480,node3=http://192.168.2.10:2380,node4=http://192.168.2.20:2480 --initial-cluster-state new

#etcd --name node2 --initial-advertise-peer-urls http://192.168.0.20:2480 --listen-peer-urls http://192.168.0.20:2480 --listen-client-urls http://192.168.0.20:2479,http://127.0.0.1:2479 --advertise-client-urls http://192.168.0.20:2479 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://192.168.0.10:2380,node2=http://192.168.0.20:2480,node3=http://192.168.2.10:2380,node4=http://192.168.2.20:2480 --initial-cluster-state new

#etcd --name node3 --initial-advertise-peer-urls http://192.168.2.10:2380 --listen-peer-urls http://192.168.2.10:2380 --listen-client-urls http://192.168.2.10:2379,http://127.0.0.1:2379 --advertise-client-urls http://192.168.2.10:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://192.168.0.10:2380,node2=http://192.168.0.20:2480,node3=http://192.168.2.10:2380,node4=http://192.168.2.20:2480 --initial-cluster-state new

#etcd --name node4 --initial-advertise-peer-urls http://192.168.2.20:2480 --listen-peer-urls http://192.168.2.20:2480 --listen-client-urls http://192.168.2.20:2479,http://127.0.0.1:2479 --advertise-client-urls http://192.168.2.20:2479 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://192.168.0.10:2380,node2=http://192.168.0.20:2480,node3=http://192.168.2.10:2380,node4=http://192.168.2.20:2480 --initial-cluster-state new

#etcd --name etcd0 --initial-advertise-peer-urls http://192.168.0.10:2380 --listen-peer-urls http://0.0.0.0:2380 --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://192.168.0.10:2379 --initial-cluster-token etcd-cluster-2 --initial-cluster etcd0=http://192.168.0.10:2380,etcd1=http://192.168.0.20:2480,etcd2=http://192.168.2.10:2380 --initial-cluster-state new

#etcdctl member list   //查看集群成员

#vi /etc/etcd/etcd.conf     //修改etcd的配置文件

#etcdctl member add node4 http://192.168.2.20:2480   //添加节点,然后再启动节点

静态ip:

A主机虚拟机172.16.1.117:

#docker network create --subnet=192.168.0.0/24 mynetwork  //A主机,一定不能和宿主机同网段

#docker network ls

#docker run -it --name CONTAINERNAME --net mynetwork --ip 192.168.0.10 IMAGEID /bin/bash

#route add -net 192.168.2.0/24 gw 172.16.1.118   //添加路由

B主机虚拟机172.16.1.118

#docker network create --subnet=192.168.2.0/24 mynetwork  //B主机,一定不能和宿主机同网段

#docker network ls

#docker run -it --name CONTAINERNAME --net mynetwork --ip 192.168.2.10 IMAGEID /bin/bash   

#route add -net 192.168.0.0/24 gw 172.16.1.117    //添加路由

打开端口

#systemctl start firewalld

#firewall-cmd --query-port=2379/tcp   //查询2379端口是否开启

#firewall-cmd --zone=public --add-port=2379/tcp --permanent  //永久开启2379端口
#firewall-cmd --reload   //重启防火墙生效

自动启动etcd脚本:

注意:用host网络就是使用宿主机网络+端口,在主备机模式测试时,需要改一下IP="10.0.0.10",和initial-cluster-token etcd-cluster-1,保证主备机IP不一样和集群ID不一样。

#!/bin/bash

IP="10.0.0.10"

CLUSTER="s11=http://${IP}:2380,s12=http://${IP}:2480,s13=http://${IP}:2580"

nohup /usr/bin/etcd --name s11 --initial-advertise-peer-urls http://${IP}:2380 \

  --listen-peer-urls http://${IP}:2380 \

  --listen-client-urls http://${IP}:2379,http://127.0.0.1:2379 \

  --advertise-client-urls http://${IP}:2379,http://127.0.0.1:2379 \

  --initial-cluster-token etcd-cluster-1 \

  --initial-cluster ${CLUSTER} \

  --initial-cluster-state new > /dev/null 2>&1 &

nohup /usr/bin/etcd --name s12 --initial-advertise-peer-urls http://${IP}:2480 \

  --listen-peer-urls http://${IP}:2480 \

  --listen-client-urls http://${IP}:2479,http://127.0.0.1:2479 \

  --advertise-client-urls http://${IP}:2479,http://127.0.0.1:2479 \

  --initial-cluster-token etcd-cluster-1 \

  --initial-cluster ${CLUSTER} \

  --initial-cluster-state new > /dev/null 2>&1 &

nohup /usr/bin/etcd --name s13 --initial-advertise-peer-urls http://${IP}:2580 \

  --listen-peer-urls http://${IP}:2580 \

  --listen-client-urls http://${IP}:2579,http://127.0.0.1:2579 \

  --advertise-client-urls http://${IP}:2579,http://127.0.0.1:2579 \

  --initial-cluster-token etcd-cluster-1 \

  --initial-cluster ${CLUSTER} \

  --initial-cluster-state new > /dev/null 2>&1 &

3、Centos6安装etcd

#yum -y update nss -y

# curl -L  https://github.com/coreos/etcd/releases/download/v3.2.22/etcd-v3.2.22-linux-amd64.tar.gz -o etcd-v3.2.22-linux-amd64.tar.gz

#tar xzvf etcd-v3.2.22-linux-amd64.tar.gz

#cd etcd-v3.2.22-linux-amd64

#cp etcd /bin

#cp etcdctl /bin

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Docker和Kubernetes是目前非常流行的容器化技术,可以帮助开发人员更好的构建、管理和部署应用程序。下面将介绍如何在一台主机上搭建Docker和Kubernetes集群环境,并部署分布式应用程序。 第一步是安装Docker和Kubernetes,安装方式根据不同的操作系统会略有不同。安装完成后,需要对Docker进行一些配置,让它可以将Docker镜像推送和拉取到Kubernetes集群中。这一步可以通过配置Docker的daemon.json文件来完成。 接下来,需要搭建Kubernetes集群。首先需要安装etcd,它是Kubernetes的数据存储后端。然后安装kubectl命令行工具,用于管理Kubernetes集群。 部署Kubernetes集群后,需要将应用程序打包成Docker镜像,并推送到Docker镜像仓库中。然后,通过编写Kubernetes的YAML文件来定义应用程序的部署方式、服务、副本等信息。最后,使用kubectl apply命令来将YAML文件应用到Kubernetes集群中,实现应用程序的部署和运行。 如果需要对应用程序进行扩容,可以通过kubectl scale命令来水平扩展副本数。如果需要对应用程序进行升级,可以通过修改YAML文件并使用kubectl apply命令来实现。 总之,通过搭建Docker和Kubernetes集群环境,我们可以更轻松、高效的构建、管理和部署分布式应用程序。 ### 回答2: Docker 和 Kubernetes 都是一些颇为流行的容器技术。Docker 以其轻量级和易于部署的特点受到许多人的青睐,而 Kubernetes 则是以其在容器编排和自动化部署上的能力而闻名。本文将介绍如何搭建 Docker 和 Kubernetes 集群环境,并演示如何在分布式应用程序上部署这些技术。 Docker 集群环境: 要搭建 Docker 集群环境,我们需要一个主节点和多个工作节点。可以在机器上安装 DockerDocker Compose。使用 Docker Compose,我们可以轻松创建、启动和停止应用程序,同时便于管理容器。 当我们有多个 Docker 容器的时候,可以将它们放在不同的宿主机上,从而构建一个 Docker 集群。整个集群可以共享一个网络,这样我们就可以在不同的容器间通信。集群中每个节点都可以运行一个容器。这使得我们可以轻易地扩大我们的应用程序,并将它们部署到不同的机器上。 Kubernetes 集群环境: 要搭建 Kubernetes 集群环境,我们首先需要一个主节点和多个工作节点。要安装 Kubernetes 集群,我们可以使用 kubeadm 安装工具。Kubeadm 是一个命令行工具,它可以管理 Kubernetes 集群中的所有节点和服务。 在 Kubernetes 中,我们定义一组容器和服务,并将其称为一个应用程序,这个应用程序可以轻松地在 Kubernetes 集群中部署。Kubernetes 集群还提供了各种管理工具,可以监视应用程序的运行状态并处理故障。 分布式应用部署: 在分布式应用中,Docker 和 Kubernetes 都能够提供强大的支持。使用 Docker,我们可以打包我们的应用程序并将其部署到多个容器中。这样我们就可以轻松地扩大我们的应用程序,并将它们部署到不同的机器上。 使用 Kubernetes,我们可以轻松部署和管理分布式应用程序,同时可以自动地监视、管理和扩展我们的容器。我们可以定义一个 Kubernetes 应用程序对象,该对象将包含我们的容器化应用程序所需的所有配置和信息。 总的来说,Docker 和 Kubernetes 都是非常流行的容器技术,它们能够提供强大的支持,以便我们轻松地部署和管理我们的应用程序。无论你是在单个容器中运行应用程序,还是在整个集群中运行应用程序,这些技术都可以为你节省大量的时间和精力。 ### 回答3: Docker和Kubernetes(简称k8s)是两个广泛应用于容器化解决方案的开源工具。Docker和k8s的联合使用可以提供一个完整的,高度可靠和高度可扩展的容器平台,以便于分布式应用的部署和维护。在本文中,我们将探讨如何在Docker和k8s上搭建集群环境及分布式应用部署方案。 首先我们需要安装和配置好Docker和k8s的环境,确保Docker和k8s能够正常工作。假设我们需要在三台机器上部署应用,我们需要在每台机器上安装Docker和k8s,每个Docker节点都要配置k8s本地存储,以保证数据的持久性和多副本数据备份。然后,我们需要在每个Kubernetes节点上部署一个Pod网络,使不同节点上的容器能够相互通信。 然后,我们需要编写Kubernetes 部署清单文件,并将它们发布到 Kubernetes 集群中。清单文件中应包含有关应用程序的必要配置信息,例如应用程序的容器镜像、环境变量、端口号、挂载点和资源请求/限制。我们可以使用Deployment,StatefulSet和DaemonSet三种资源类型来管理应用程序的部署和维护。使用这些资源类型可以实现高可靠性,自动化和灵活性的分布式应用部署和管理。 最后,我们可以使用Kubernetes的服务发现机制来暴露应用程序的服务,以便其他容器或服务可以访问它。这可以通过创建一个Kubernetes的service对象,并将其与应用程序的Pods关联起来来实现。Service对象可以提供一个常量的IP地址和DNS名称来代表应用程序的服务,并确保在容器出现故障时仍然可用。 综上所述,Docker和k8s组合可以提供一个强大的容器化解决方案,以及高度可靠和高度可扩展的平台来部署和维护分布式应用程式。在实践中,通过使用Docker和k8s,我们可以更轻松地部署,运行和管理复杂的应用程序,同时提高生产力和应用程序的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂安俊@kylinOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值