自学内容网 自学内容网

etcd部署(基于v3.5.15)

单节点部署

下载etcd,解压etcd二进制包,并进入解压后目录

wget https://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-amd64.tar.gz
tar -xvzf etcd-v3.5.15-linux-amd64.tar.gz
cd etcd-v3.5.15-linux-amd64/

etcd包目录

创建数据目录

mkdir -p /data/etcd/data

移动可执行文件到/usr/local/bin/目录

mv etcd etcdctl etcdutl /usr/local/bin/

其余文件可以删除了

测试版本

etcd --version

etcd版本

配置systemd管理

vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Service
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name etcd1 \
  --data-dir /data/etcd/data \
  --listen-peer-urls http://127.0.0.1:2380 \
  --listen-client-urls http://127.0.0.1:2379,http://10.168.31.180:2379 \
  --advertise-client-urls http://192.168.110.12:2379 \
  --initial-advertise-peer-urls http://127.0.0.1:2380 \
  --initial-cluster etcd1=http://127.0.0.1:2380 \
  --initial-cluster-state new \
  --initial-cluster-token etcd-1

Restart=on-failure
RestartSec=5

LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

配置解释:

ExecStart: 指定 etcd 二进制文件的路径和启动参数。

–name: 指定节点的名称。

–data-dir: 存储 etcd 数据的目录;上面创建的目录/data/etcd/data。

–listen-peer-urls: 设置 etcd 节点监听其他节点的 URL。

–listen-client-urls: 设置 etcd 节点监听客户端请求的 URL。可以同时监听 localhost 和实际的服务器 IP 地址。

–advertise-client-urls: 客户端会通过此地址与 etcd 通信。

–initial-advertise-peer-urls: 广播给集群中其他节点的 URL。

–initial-cluster: 指定集群中节点的配置。在单节点模式下,这里仅包括当前节点。

–initial-cluster-state: 指定集群的初始状态。在新建集群时使用 new。

Restart 和 RestartSec: 如果 etcd 进程崩溃或退出,服务会在 5 秒后自动重启。

LimitNOFILE: 增加文件描述符的限制,适应 etcd 的高并发需求。

启动etcd,设置开机启动

systemctl start etcd
systemctl enable etcd

验证

etcdctl put mytest "asd"

etcdctl get mytest

测试验证

集群部署(3节点)

环境准备

三个节点都需要操作

准备3台服务器

操作系统IP地址主机名
alma linux9.310.168.31.181al931181
alma linux9.310.168.31.182al931182
alma linux9.310.168.31.183al931183

配置3台服务器hosts

vim /etc/hosts
## 增加以下配置
10.168.31.181 al931181 
10.168.31.182 al931182 
10.168.31.183 al931183 

配置3台服务器时间同步

dnf install -y ntp
vim /etc/ntp.conf
#修改server的信息为时间服务器的信息,这里设置为阿里云的时间服务器
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst

配置防火墙,放开时间ntpd服务端口

firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload

启动ntpd服务,并检查ntp同步状态。

systemctl start ntpd
systemctl enable ntpd
ntpq -p

生成etcd自签证书

只在al931181节点上面操作

下载CFSSL工具

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64

将二进制包移动至/usr/local/bin/下,并赋予权限

mv cfssl_1.6.3_linux_amd64 /usr/local/bin/cfssl
mv cfssl-certinfo_1.6.3_linux_amd64  /usr/local/bin/cfssl-certinfo
mv cfssljson_1.6.3_linux_amd64 /usr/local/bin/cfssljson
chmod u+x /usr/local/bin/cfssl
chmod u+x /usr/local/bin/cfssl-certinfo
chmod u+x /usr/local/bin/cfssljson

创建数据目录和证书目录

3个节点相同操作

mkdir -p /data/etcd/{ssl,data}

进入证书目录,创建CA配置文件

cd /data/etcd/ssl
cat > ca-config.json <<EOF
{
    "signing": {
        "default": {
            "expiry": "262800h"
        },
        "profiles": {
            "etcd": {
                "expiry": "262800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF

创建CA证书信息文件

cat > ca-csr.json << EOF
{
    "CN": "Etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "Etcd CA",
            "OU": "Etcd CA"
        }
    ]
}
EOF

生成CA秘钥和证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

生成三个文件:ca.csr(证书签名请求 )、ca.pem(CA 证书)和 ca-key.pem(CA 私钥)。
证书文件1

创建etcd证书信息文件

cat > server-csr.json << EOF
{
    "CN": "etcd-server",
    "hosts": [
        "localhost",
        "127.0.0.1",
        "10.168.31.180",
        "10.168.31.181",
        "10.168.31.182",
        "10.168.31.183",
        "al931180",
        "al931181",
        "al931182",
        "al931183",
        "al931180.etcd.top",
        "al931181.etcd.top",
        "al931182.etcd.top",
        "al931183.etcd.top",
        "*.etcd.top"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "Etcd Server",
            "OU": "Etcd Server"
        }
    ]
}
EOF  

host里面预留地址信息,以便后续扩容。可以使用通配符域名的进行地址的预留,后续使用dns解析的方式解决证书不匹配的问题。

生成etcd证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd server-csr.json | cfssljson -bare server

这会生成三个文件:server.csr(证书签名请求 )、server.pem(etcd 证书)和 server-key.pem(etcd 证书私钥)。
证书文件2

传输证书和私钥到其它节点

scp *.pem al931182:/data/etcd/ssl
scp *.pem al931183:/data/etcd/ssl

部署、启动etcd集群

三个节点相同操作

下载并移动二进制文件

下载和移动二进制文件同单机部署

创建systemd管理文件

al931181
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931181 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.181:2380 \
--listen-peer-urls=https://10.168.31.181:2380 \
--listen-client-urls=https://10.168.31.181:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.181:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/data

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

EOF
al931182
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931182 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.182:2380 \
--listen-peer-urls=https://10.168.31.182:2380 \
--listen-client-urls=https://10.168.31.182:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.182:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/data

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

EOF
al931183
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931183 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.183:2380 \
--listen-peer-urls=https://10.168.31.183:2380 \
--listen-client-urls=https://10.168.31.183:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.183:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/data

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

EOF

参数详解:

–name:指定 Etcd 成员的唯一名称。此名称用于标识集群中的特定 Etcd 成员,并且必须在整个集群中是唯一的。
–cert-file:指定服务器证书文件的路径。此文件包含了服务器的公钥证书,用于加密客户端与 Etcd 之间的通信。
–key-file:指定服务器私钥文件的路径。此文件包含了服务器的私钥,用于解密客户端与 Etcd 之间的通信。
–peer-cert-file:指定对等节点证书文件的路径。此文件包含了 Etcd 成员之间通信时使用的证书。
–peer-key-file:指定对等节点私钥文件的路径。此文件包含了 Etcd 成员之间通信时使用的私钥。
–trusted-ca-file:指定受信任的证书颁发机构 (CA) 证书文件的路径。此文件包含了 CA 的证书,用于验证客户端证书的真实性。
–peer-trusted-ca-file:指定受信任的证书颁发机构 (CA) 证书文件的路径,用于验证对等节点证书。此文件包含了 CA 的证书,用于验证对等节点证书的真实性。
–peer-client-cert-auth:启用对等节点间的证书验证。如果设置为 true,则 Etcd 成员之间通信时会验证对方的证书。
–client-cert-auth:启用客户端证书验证。如果设置为 true,则 Etcd 会验证客户端提供的证书。
–initial-advertise-peer-urls:指定 Etcd 成员向集群其他成员广播的 URL。这是其他 Etcd 成员用来与当前成员通信的 URL。
–listen-peer-urls:指定 Etcd 成员监听来自其他成员的 URL。这是 Etcd 成员监听其他成员通信请求的 URL。
–listen-client-urls:指定 Etcd 成员监听来自客户端的 URL。这是 Etcd 成员监听客户端请求的 URL。
–advertise-client-urls:指定 Etcd 成员向客户端广播的 URL。这是客户端用来与当前 Etcd 成员通信的 URL。
–listen-metrics-urls:指定 metrics 接口运行在 2381 端口下面的,而且是 http 的协议。
–initial-cluster-token:指定集群的唯一标识符。这是一个唯一的字符串,用于标识集群。
–initial-cluster:指定集群中所有成员的初始信息。这是一个逗号分隔的列表,包含集群中所有成员的名称、URL 和投票权重。
–initial-cluster-state:指定集群的初始状态。可以设置为 new 或 existing。如果设置为 new,表示创建一个新的集群;如果设置为 existing,表示加入现有集群。
–data-dir:指定 Etcd 数据目录的路径。这是 Etcd 存储持久化数据的地方。

启动etcd服务,设置开机启动

systemctl start etcd
systemctl enable etcd

查看集群状态

etcdctl --endpoints=https://10.168.31.181:2379,https://10.168.31.182:2379,https://10.168.31.183:2379 \
  --cacert=/data/etcd/ssl/ca.pem \
  --cert=/data/etcd/ssl/server.pem \
  --key=/data/etcd/ssl/server-key.pem \
  endpoint health

原文地址:https://blog.csdn.net/qq_41139119/article/details/143867576

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!