本专栏上一篇文章写了《长篇图解etcd核心应用场景及编码实战》,本文继续。后续计划章节如下:《长篇图解etcd核心应用场景及编码实战》《搭建高可用etcd集群》《基于etcd实现分布式锁(java代码实现)》《基于etcd实现配置变更通知(java代码实现)》《基于etcd实现服务注册与发现(java代码实现)》《基于etcd实现分布式系统节点leader选举(java代码实现)》很多人都知道etcd是基于kubernetes的,所以搭建etcd集群最常用的方法就是通过k8s配置启动etcd集群。但是,除了配合k8s使用etcd之外,还有很多其他的应用场景,比如:分布式锁、配置变更通知、分布式系统中多节点的leader选举等。因此,本文介绍的etcd集群安装与k8s,也就是直接在linux服务器上安装etcd高可用服务集群。1.准备工作以下准备工作必须在三台服务器上完成。1.1.规划宿主服务器首先需要规划服务器,因为etcd集群需要选举Leader,所以集群节点数建议3个或者5个,不要太多,节点之间会有数据复制到保证数据一致性,节点越多,对网络和服务器性能消耗越大。需要确保服务器之间的网络连接。使用root用户在/etc/hosts文件中添加如下配置,建立主机名hostname和ip的映射关系。访问peer1就是访问对应的主机ip。192.168.161.3peer1192.168.161.4peer2192.168.161.5peer31.2。创建etcd用户在CentOSLinux发行版下,执行以下命令创建etcd用户和用户组,并自动创建/home/etcd目录。如果您使用的是其他操作系统发行版,您可能需要使用useradd命令并自行创建此目录。groupaddetcdadduser-getcdetcd使用root用户创建新用户和用户主目录。默认新用户没有密码,可以使用passwdetcd命令为其设置密码。1.3.打开防火墙端口要打开防火墙,使用以下三个命令打开etcd的标准端口2379和2380。在实际安装过程中,笔者通常不会使用这两个端口,因为端口越固定,被攻击的可能性就越大。我们随机选择一个不常用的端口,安全性会好一些。这里我还是使用标准端口。集群中各节点通过2380端口进行通信,2379端口负责与客户端对外通信firewall-cmd--zone=public--add-port=2379/tcp--permanent;firewall-cmd--zone=public--add-port=2380/tcp--permanent;firewall-cmd--reload使用root用户操作防火墙。1.4.创建必要的目录使用su-etcd从root用户切换到etcd用户,在etcd用户的家目录/home/etcd下创建如下目录用于etcd数据存储mkdir-p/home/etcd/data;1.5。下载etcd并解压。etcd用户下载etcd安装包。从github下载比较慢。我选择了国内华为云提供的加速镜像。如果不想用我的版本,也可以搜索“etcd国内下载加速”,选择自己需要的版本。wget命令下载,tar命令解压,不用多说了。wgethttps://mirrors.huaweicloud.com/etcd/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz;tar-xzvf/home/etcd/etcd-v3.5.4-linux-amd64.tar.gz;1.6。集群主机免密码登录我们后面在做etcd运维。比如在启动集群的时候,我们不想在一台服务器一台服务器上执行命令,而是想在一台服务器上完成操作,这就要求集群etcd用户之间可以无密登录。这里简单介绍一下,说明实现方法,搜索文章学习原理。在etcd权限用户的根目录下执行以下命令,不管提示什么输入,一路回车即可。ssh-keygen-trsa将公钥保存到authorized_keys文件cat~/.ssh/id_rsa.pub>~/.ssh/authorized_keys将公钥分发到peer2和peer3主机。根据提示输入etcd的登录密码ssh-copy-id-i~/.ssh/id_rsa.pub-p22etcd@peer2;需要单独执行,因为执行命令的时候需要输入密码。ssh-copy-id-i~/.ssh/id_rsa.pub-p22etcd@peer3;这样就完成了peer1免密登录peer2和peer3的配置。在peer2和peer3服务器上进行同样的操作,将自己的公钥发送给另外两台服务器,并替换主机名。这样设置完成后,我们可以在三台服务器任意一台etcd用户下执行sshetcd@peer3登录peer3,无需输入密码,证明我们操作成功。2.集群启动与验证2.1.一键启动脚本完成以上准备工作。其实我们的etcd集群安装已经完成了。实际安装动作是解压。解压目录下的etcd、etcdctl、etcdutl均有可执行文件,可直接使用。接下来,我们使用这个脚本来启动etcd集群(你只需要在3个计划的服务器中的任何一个上执行一次脚本)。我们将此脚本命名为start-etcds.sh,并赋予其可执行权限。#!/bin/bash##----------config----------------exportETCDCTL_API=3CLUSTER_TOKEN=etcdcluster01DATADIR=/home/etcd/dataHOSTNAME1=peer1HOSTNAME2=peer2HOSTNAME3=peer3HOSTIP1=192.168.161.3HOSTIP2=192.168.161.4HOSTIP3=192.168.161.5CLUSTER=${HOSTNAME1}=http://${HOSTIP1}:2380,${HOSTNAME2}=http://${HOSTIP2}:2380,${HOSTNAME3}=http://${HOSTIP3}:2380CLUSTER_IPS=(${HOSTIP1}${HOSTIP2}${HOSTIP3})CLUSTER_NAMES=(${HOSTNAME1}${HOSTNAME2}${HOSTNAME3})##--------------启动etcd节点----------------foriin$(seq0`expr${#CLUSTER_IPS[@]}-1`);做nodeip=${CLUSTER_IPS[i]}nodename=${CLUSTER_NAMES[i]}ssh-T$nodeip<
