• 微服务自动化【集群搭建】


    目录

     搭建 etcd 集群

    etcd构建自身高可用集群主要有三种形式:

    1. 静态部署(前提) 

    2. 集群搭建 

    3. 集群测试


     搭建 etcd 集群

       etcd构建自身高可用集群主要有三种形式:

    • 静态发现:

                    预先已知etcd集群中有哪些节点,

                    在启动时通过--initial-cluster参数直接指定好etcd的各个节点地址

    • etcd动态发现:

                    静态配置前提是在搭建集群之前已经提前知道各节点的信息,

                    而实际应用中可能存在预先并不知道各节点ip的情况,

                    这时可通过已经搭建的etcd来辅助搭建新的etcd集群。

                    通过已有的etcd集群作为数据交互点,然后在扩展新的集群时

                    实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io

    • DNS动态发现:

                    通过DNS查询方式获取其他节点地址信息 


    1. 静态部署(前提) 

    以下为2台主机信息(需要打开虚拟机,请根据自己电脑配置量力而行) 

     

    通常都是将集群节点部署为3,5,7,9个节点,为什么不能选择偶数个节点? 

    1.偶数个节点集群不可用风险更高,表现在选主过程中,有较大概率或等额选票,从而触发  下一轮选举。

    2.偶数个节点集群在某些网络分割的场景下无法正常工作。当网络分割发生后,将集群节点对半分割开。 此时集群将无法工作。按照RAFT协议,此时集群写操作无法使得大多数节点同意,从而导致写失败,集群无法正常工作 

     请确保两台主机中都已经安装好了 etcd 服务并能正常启动


    2. 集群搭建 

    1. 安装服务 参考博文==>微服务自动化【etcd基本介绍】) 

    2. 编辑etcd.conf文件,添加集群信息注意修改对应的ip 

    vim /etc/etcd/etcd.conf
    •  代码如下
    1. #########################################################
    2. ###### 请根据各节点实际情况修改配置:1/3/4/5/6/7 ######
    3. #########################################################
    4. #[Member]
    5. #1.节点名称,必须唯一
    6. ETCD_NAME="etcd01"
    7. #2.设置数据保存的目录
    8. ETCD_DATA_DIR="/var/lib/etcd"
    9. #3.用于监听其他etcd member的url
    10. ETCD_LISTEN_PEER_URLS="http://192.168.27.128:2380"
    11. #4.该节点对外提供服务的地址
    12. ETCD_LISTEN_CLIENT_URLS="http://192.168.27.129:2379,http://127.0.0.1:2379"
    13. #[Clustering]
    14. #5.对外公告的该节点客户端监听地址
    15. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.129:2379"
    16. #6.该节点成员对等URL地址,且会通告集群的其余成员节点
    17. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.129:2380"
    18. #7.集群中所有节点的信息
    19. ETCD_INITIAL_CLUSTER="etcd01=http://192.168.27.128:2380,etcd02=http://192.168.27.129:2380"
    20. #8.创建集群的token,这个值每个集群保持唯一
    21. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    22. #9.初始集群状态,新建集群的时候,这个值为new;
    23. ETCD_INITIAL_CLUSTER_STATE="new"
    24. #10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
    25. # 为了兼容flannel,将默认开启v2版本,故配置文件中设置
    26. ETCD_ENABLE_V2="true"

    3. 修改/etc/etcd/etcd.conf文件后,要先删除/var/lib/etcd目录下保存的数据,再重新启用服务,不然失败

    cd /var/lib/etcd && rm -rf *

    4. 为节点etcd01创建一个etcd服务 /etc/systemd/system/etcd.service

    vim /etc/systemd/system/etcd.service
    • 代码如下 
    1. [Unit]
    2. Description=Etcd Server
    3. Documentation=https://github.com/etcd-io/etcd
    4. After=network.target
    5. [Service]
    6. User=root
    7. Type=notify
    8. ## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
    9. ## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
    10. EnvironmentFile=-/etc/etcd/etcd.conf
    11. ## 2.ExecStart即etcd启动程序位置
    12. ExecStart=/usr/local/bin/etcd
    13. Restart=always
    14. RestartSec=10s
    15. LimitNOFILE=65536
    16. [Install]
    17. WantedBy=multi-user.target

    5. 因为需要跨主机通信,需要开放防火墙端口

    firewall-cmd --zone=public --add-port=2379/tcp --permanent && firewall-cmd --zone=public --add-port=2380/tcp --permanent && firewall-cmd --reload && firewall-cmd --list-port

    6. 启动可能报错信息(没有就忽略)

    master-16 etcd[25461]: request cluster ID mismatch (got bdd7c7c32bde1208 want 698851d67fea3c17)
    • 原因 集群ip地址变化后,除了修改/etc/etcd/etcd.conf 文件并重新启用服务外,还需要删除/var/lib/etcd目录下保存的数据
    • 解决办法 删除了etcd集群所有节点中的--data_dir的内容

    7. 服务相关指令 

    1. systemctl daemon-reload
    2. systemctl enable etcd
    3. systemctl start etcd
    4. systemctl status etcd
    5. systemctl stop etcd
    6. systemctl restart etcd

    3. 集群测试

    1. 各节点重启启动完成后,在任意节点执行etcdctl member list可列所有集群节点信息 

    1. etcdctl member list
    2. etcdctl member list -w table
    3. etcdctl endpoint health
    4. etcdctl endpoint status

    2. http命令 

    1. etcdctl --endpoints=http://192.168.199.160:2379,http://192.168.199.157:2379,http://192.168.199.158:2379 endpoint health
    2. etcdctl --endpoints=http://192.168.27.120:2379 endpoint health
    3. etcdctl --endpoints=http://192.168.27.129:2379 member list -w table

     

  • 相关阅读:
    【附源码】计算机毕业设计java智慧后勤app设计与实现
    Triton Inference Server 环境配置
    Hadoop生态系统—数据仓库Hive的安装
    【力扣10天SQL入门】Day7+8 计算函数
    代码分析之今日头条
    人工智能安全国际标准化进展研究
    python基础之面对对象之类和对象
    【解决】VSCode编写C++自定义头文件undefined reference异常问题
    跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算
    C++——编译和链接原理笔记
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/128157240