etcd集群部署

etcd集群部署

一、环境准备。(3个节点相同操作)

  1、准备3台服务器。

 

操作系统  IP地址 主机名
CentOS7.9 192.168.110.12 etcd1
CentOS7.9 192.168.110.13 etcd2
CentOS7.9 192.168.110.15 etcd3

 

  2、配置3台服务器hosts。

  vim /etc/hosts

192.168.110.12 etcd1
192.168.110.13 etcd2
192.168.110.15 etcd3

 

  3、配置3台服务器时间同步。

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

 

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

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

 

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

systemctl start ntpd
systemctl enable ntpd
ntpq -p

 

二、生成etcd自签证书。(只在etcd1上操作)

  1、下载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

 

  2、将二进制包移动至/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、创建证书目录。(3个节点相同操作)

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

 

  4、进入证书目录,创建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

 

  5、创建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

 

  6、生成CA秘钥和证书

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

  这会生成两个文件:ca.pem(CA 证书)和 ca-key.pem(CA 私钥)。

 

  7、创建etcd证书信息文件

cat > server-csr.json << EOF
{
    "CN": "etcd-server",
    "hosts": [
        "localhost",
        "127.0.0.1",
        "192.168.110.12",
        "192.168.110.13",
        "192.168.110.15",
        "192.168.110.16",
        "192.168.110.17",
        "etcd1",
        "etcd2",
        "etcd3",
        "etcd4",
        "etcd5",
        "etcd1.com",
        "*.etcd1.com"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "Etcd Server",
            "OU": "Etcd Server"
        }
    ]
}
EOF      

  这里在配置etcd证书信息时,在hosts项中加入了预留地址,以便后期扩容,如果不确定预留地址信息可以使用通配符域名的方式,后期使用dns解析的方式来解决证书不匹配的问题。

  

  8、生成etcd证书。

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

  这会生成两个文件:server.pem(etcd 证书)和 server-key.pem(etcd 证书私钥)。

 

  9、传输证书和私钥到etcd2和etcd3

scp *.pem etcd2:/data/etcd/ssl
scp *.pem etcd3:/data/etcd/ssl

 

三、部署、启动etcd集群。(3个节点相同操作)

  1、下载etcd二进制包。

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

 

  2、解压,移动命令文件,配置环境变量

tar zxf etcd-v3.5.15-linux-amd64.tar.gz
cp etcd-v3.5.15-linux-amd64/etcd* /data/etcd/bin/
echo "export PATH=/data/etcd/bin:\$PATH" > /etc/profile.d/etcd.sh
source /etc/profile.d/etcd.sh

 

  3、创建systemd管理文件。

cat > /usr/lib/systemd/system/etcd.service << EOF

[Unit]
Description=Etcd Service
After=network.target

 

[Service]
Type=notify
ExecStart=/data/etcd/bin/etcd \
--name=etcd1 \
--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://192.168.110.12:2380 \
--listen-peer-urls=https://192.168.110.12:2380 \
--listen-client-urls=https://192.168.110.12:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://192.168.110.12:2379 \
--initial-cluster-token=etcd-cluster-1 \
--initial-cluster=etcd1=https://192.168.110.12:2380,etcd2=https://192.168.110.13:2380,etcd3=https://192.168.110.15:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/data

 

Restart=on-failure
RestartSec=5


[Install]
WantedBy=multi-user.target

EOF

  其中红色部分信息根据不同的节点进行配置,蓝色部分信息根据自己定义的name信息进行配置。

  参数详解:

    --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。
    --initial-cluster-token:指定集群的唯一标识符。这是一个唯一的字符串,用于标识集群。
    --initial-cluster:指定集群中所有成员的初始信息。这是一个逗号分隔的列表,包含集群中所有成员的名称、URL 和投票权重。
    --initial-cluster-state:指定集群的初始状态。可以设置为 new 或 existing。如果设置为 new,表示创建一个新的集群;如果设置为 existing,表示加入现有集群。
    --data-dir:指定 Etcd 数据目录的路径。这是 Etcd 存储持久化数据的地方。

 

  4、配置firewalld防火墙。

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.12" port protocol="tcp" port="2380" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.13" port protocol="tcp" port="2380" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.15" port protocol="tcp" port="2380" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.12" port protocol="tcp" port="2379" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.13" port protocol="tcp" port="2379" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.15" port protocol="tcp" port="2379" accept'

  开启客户端请求,比如需要请求etcd集群的服务部署在192.168.110.11,则只需要开通2379端口。

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.110.11" port protocol="tcp" port="2379" accept'
firewall-cmd --reload

 

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

systemctl start etcd
systemctl enable etcd

 

   6、查看集群状态。

etcdctl --endpoints=https://192.168.110.12:2379,https://192.168.110.13:2379,https://192.168.110.15:2379 \
  --cacert=/data/etcd/ssl/ca.pem \
  --cert=/data/etcd/ssl/server.pem \
  --key=/data/etcd/ssl/server-key.pem \
  endpoint health

 

posted @ 2024-08-16 17:05  难止汗  阅读(242)  评论(0编辑  收藏  举报