云网牛站
所在位置:首页 > Linux云服务器 > 在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

2019-06-04 10:19:17作者:优进稿源:云网牛站

本文介绍在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9操作系统上设置Etcd集群的方法,本文将详细讨论Linux机器上三节点etcd集群的理想设置。

 

Linux上的Etcd群集设置

此设置应适用于使用systemd服务管理器的所有Linux发行版,适合CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9、Fedora 30/29系统。

此设置基于以下服务器网络信息和详细信息(左边为短主机名,右边为IP地址):

1]、etcd1:192.168.18.9

2]、etcd2:192.168.18.10

3]、etcd3:192.168.18.11

由于我的所有服务器都使用Systemd服务管理器,因此可以使用命令设置主机名:

# Node 1

sudo hostnamectl set-hostname etcd1.mydomain.com --static

sudo hostname etcd1.mydomain.com

# Node 2

sudo hostnamectl set-hostname etcd2.mydomain.com --static

sudo hostname etcd2.mydomain.com

# Node 3

sudo hostnamectl set-hostname etcd3.mydomain.com --static

sudo hostname etcd3.mydomain.com

将mydomain.com替换为你服务器的域名,比如云网牛站就用ywnz.com,可以将服务器名称映射到本地DNS上的正确IP地址,也可以直接将记录添加到每台服务器上的/etc/hosts文件中:

sudo tee -a /etc/hosts<<EOF

192.168.18.9  etcd1.mydomain.com etcd1

192.168.18.10 etcd2.mydomain.com etcd2

192.168.18.11 etcd3.mydomain.com etcd3

EOF

 

一、下载并安装etcd二进制文件(所有节点)

登录到要使用的每个etcd集群节点并下载etcd二进制文件,这是在所有节点上完成的,可参考在RHEL/CentOS 8上安装和配置etcd 3.3.12的方法

创建临时目录:

mkdir /tmp/etcd && cd /tmp/etcd

安装wget:

# RHEL family

sudo yum -y install wget

# Debian family

sudo apt-get -y install wget

# Arch/Manjaro

sudo pacman -S wget

下载etcd二进制存档:

curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest \

 | grep browser_download_url \

 | grep linux-amd64 \

 | cut -d '"' -f 4 \

 | wget -qi -

取消归档文件并将二进制文件移动到/usr/local/bin目录:

tar xvf *.tar.gz

cd etcd-*/

sudo mv etcd* /usr/local/bin/

cd ~

rm -rf /tmp/etcd

检查etcd和etcdctl版本:

$ etcd --version

etcd Version: 3.3.13

Git SHA: 98d3084

Go Version: go1.10.8

Go OS/Arch: linux/amd64

$ etcdctl --version

etcdctl version: 3.3.13

API version: 2

参考:在Ubuntu 18.04/Ubuntu 16.04服务器上安装etcd的方法

 

二、创建etcd目录和用户(所有节点)

我们将etcd配置文件存储在/etc/etcd目录中,将数据存储在/var/lib/etcd中,用于管理服务的用户和组称为etcd。

创建一个etcd系统用户/组:

sudo groupadd --system etcd

sudo useradd -s /sbin/nologin --system -g etcd etcd

然后为etcd创建数据和配置目录:

sudo mkdir -p /var/lib/etcd/

sudo mkdir /etc/etcd

sudo chown -R etcd:etcd /var/lib/etcd/

 

三、在所有节点上配置etcd

我们需要在所有三台服务器上填充systemd服务单元文件,但首先,在我们继续之前需要一些环境变量。

在每台服务器上,通过运行以下命令保存这些变量:

INT_NAME="eth0"

ETCD_HOST_IP=$(ip addr show $INT_NAME | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)

ETCD_NAME=$(hostname -s)

注:

1]、INT_NAME是用于群集流量的网络接口的名称,更改它以匹配你的服务器配置。

2]、ETCD_HOST_IP是指定网络接口的内部IP地址,这用于服务客户端请求并与etcd集群对等体通信。

3]、ETCD_NAME,每个etcd成员必须在etcd集群中具有唯一名称,使用的命令将设置etcd名称以匹配当前计算实例的主机名。

设置所有变量后,创建etcd.service systemd单元文件:

cat <<EOF | sudo tee /etc/systemd/system/etcd.service

[Unit]

Description=etcd service

Documentation=https://github.com/etcd-io/etcd

[Service]

Type=notify

User=etcd

ExecStart=/usr/local/bin/etcd \\

 --name ${ETCD_NAME} \\

 --data-dir=/var/lib/etcd \\

 --initial-advertise-peer-urls http://${ETCD_HOST_IP}:2380 \\

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

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

 --advertise-client-urls http://${ETCD_HOST_IP}:2379 \\

 --initial-cluster-token etcd-cluster-0 \\

 --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 \\

 --initial-cluster-state new \

[Install]

WantedBy=multi-user.target

EOF

如果没有将工作名称解析或映射添加到/etc/hosts文件中,则将etcd1、etcd2和etcd3替换为你的节点IP地址。

对于CentOS/RHEL Linux发行版,请将SELinux模式设置为允许:

sudo setenforce 0

sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

参考:在RHEL 8/CentOS 8系统中禁用SELinux的方法

如果有活动的防火墙服务,请允许2379和2380端口:

# RHEL / CentOS / Fedora firewalld

sudo firewall-cmd --add-port={2379,2380}/tcp --permanent

sudo firewall-cmd --reload

# Ubuntu/Debian

sudo ufw allow proto tcp from any to any port 2379,2380

 

四、启动etcd服务器

通过在每个群集节点上运行以下命令来启动etcd服务:

sudo systemctl daemon-reload

sudo systemctl enable etcd

sudo systemctl start etcd

确认所有节点上都运行了etcd服务,运行systemctl status etcd -l命令,如下图所示:

在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

 

五、测试Etcd群集安装

通过列出etcd集群成员来测试你的设置:

$ etcdctl member list

152d6f8123c6ac97: name=etcd3 peerURLs=http://etcd3:2380 clientURLs=http://192.168.18.11:2379 isLeader=false

332a8a315e569778: name=etcd2 peerURLs=http://etcd2:2380 clientURLs=http://192.168.18.10:2379 isLeader=false

aebb404b9385ccd4: name=etcd1 peerURLs=http://etcd1:2380 clientURLs=http://192.168.18.9:2379 isLeader=true

要使用etcd v3,需要明确指定版本:

$ ETCDCTL_API=3 etcdctl member list

152d6f8123c6ac97, started, etcd3, http://etcd3:2380, http://192.168.18.11:2379

332a8a315e569778, started, etcd2, http://etcd2:2380, http://192.168.18.10:2379

aebb404b9385ccd4, started, etcd1, http://etcd1:2380, http://192.168.18.9:2379

还可以通过运行以下命令检查集群运行状况:

$ etcdctl cluster-health

member 152d6f8123c6ac97 is healthy: got healthy result from http://192.168.18.11:2379

member 332a8a315e569778 is healthy: got healthy result from http://192.168.18.10:2379

member aebb404b9385ccd4 is healthy: got healthy result from http://192.168.18.9:2379

cluster is healthy

我们也尝试写入etcd:

$ etcdctl set /message "Hello World"

Hello World

读取消息的值,它应该适用于所有节点:

$ etcdctl get /message

Hello World

创建目录:

$ etcdctl mkdir /myservice

$ etcdctl set /myservice/container1 localhost:8080

localhost:8080

$ etcdctl ls /myservice

/myservice/container1

 

六、关于Test Leader failure

在CentOS 7/8、Ubuntu 18.04/16.04、Debian 10/9上设置Etcd集群

我们当前的Leader是etcd1-节点1:

$ etcdctl member list

152d6f8123c6ac97: name=etcd3 peerURLs=http://etcd3:2380 clientURLs=http://192.168.18.11:2379 isLeader=false

332a8a315e569778: name=etcd2 peerURLs=http://etcd2:2380 clientURLs=http://192.168.18.10:2379 isLeader=false

aebb404b9385ccd4: name=etcd1 peerURLs=http://etcd1:2380 clientURLs=http://192.168.18.9:2379 isLeader=true

让我们把它拿下来:

[comput@etcd1 ~]$ sudo systemctl stop etcd

检查新的Leader-Now etcd2服务器:

$ etcdctl member list

152d6f8123c6ac97: name=etcd3 peerURLs=http://etcd3:2380 clientURLs=http://192.168.18.11:2379 isLeader=false

332a8a315e569778: name=etcd2 peerURLs=http://etcd2:2380 clientURLs=http://192.168.18.10:2379 isLeader=true

aebb404b9385ccd4: name=etcd1 peerURLs=http://etcd1:2380 clientURLs=http://192.168.18.9:2379 isLeader=false

一旦etcd1服务启动,Leader将保持etcd2,除非它失败。

 

相关主题

Ubuntu 16.04下通过静态发现方式部署etcd集群

精选文章
热门文章