docker搭建etcd集群方式 bitnami/etcd

2023-12-01 0 446
目录
  • docker部署etcd集群
    • 如何执行
    • 测试一下成功没有
  • Etcd集群搭建实验
    • 实验环境
    • 下载与安装 etcd
    • 修改配置文件
    • 服务启动与查看
    • 报错与解决
  • 总结

    docker部署etcd集群

    优秀的文章应该一来就先上代码(不接受杠精反驳)

    注意这是sh代码,liunx批处理脚本

    #!/bin/bash
    #设置网络名
    network_name=etcd_network
    #创建网络
    docker network create –driver bridge –subnet=10.3.36.0/16 –gateway=10.3.1.1 ${network_name}
    #设置结点名
    node1=etcd_node1
    node1_ip=10.3.36.1
    node2=etcd_node2
    node2_ip=10.3.36.2
    node3=etcd_node3
    node3_ip=10.3.36.3
    #设置集群口令
    cluster_token=etcd_cluster
    #创建节点1
    docker run -d –name ${node1} \\
    –network ${network_name} \\
    –publish 12379:2379 \\
    –publish 12380:2380 \\
    –ip ${node1_ip} \\
    –env ALLOW_NONE_AUTHENTICATION=yes \\
    –env ETCD_NAME=${node1} \\
    –env ETCD_ADVERTISE_CLIENT_URLS=http://${node1_ip}:2379 \\
    –env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node1_ip}:2380 \\
    –env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \\
    –env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \\
    –env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \\
    –env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \\
    –env ETCD_INITIAL_CLUSTER_STATE=new \\
    bitnami/etcd:latest
    #创建节点2
    docker run -d –name ${node2} \\
    –network ${network_name} \\
    –publish 22379:2379 \\
    –publish 22380:2380 \\
    –ip ${node2_ip} \\
    –env ALLOW_NONE_AUTHENTICATION=yes \\
    –env ETCD_NAME=${node2} \\
    –env ETCD_ADVERTISE_CLIENT_URLS=http://${node2_ip}:2379 \\
    –env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node2_ip}:2380 \\
    –env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \\
    –env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \\
    –env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \\
    –env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \\
    –env ETCD_INITIAL_CLUSTER_STATE=new \\
    bitnami/etcd:latest
    #创建节点3
    docker run -d –name ${node3} \\
    –network ${network_name} \\
    –publish 32379:2379 \\
    –publish 32380:2380 \\
    –ip ${node3_ip} \\
    –env ALLOW_NONE_AUTHENTICATION=yes \\
    –env ETCD_NAME=${node3} \\
    –env ETCD_ADVERTISE_CLIENT_URLS=http://${node3_ip}:2379 \\
    –env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node3_ip}:2380 \\
    –env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \\
    –env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \\
    –env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \\
    –env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \\
    –env ETCD_INITIAL_CLUSTER_STATE=new \\
    bitnami/etcd:latest

    如何执行

    sh xxx.sh
    # xxx填写你的shell文件名

    注意

    如果你在执行的时候遇到这个错误

    line 2: $'\\r': command not found

    麻烦安装一下这个东西(不要问为什么?)

    yum -y install dos2unix*
    dos2unix *.*

    这里说一下配置参数情况

    #docker网络名
    –network 
    #端口号可以这样写-p
    –publish
    –env ALLOW_NONE_AUTHENTICATION
    #设置成员节点的别名
    –env ETCD_NAME
    #广播到集群中本成员的监听客户端请求的地址
    –env ETCD_ADVERTISE_CLIENT_URLS
    #广播到集群中本成员的Peer监听通信地址
    –env ETCD_INITIAL_ADVERTISE_PEER_URLS
    #客户端请求的监听地址列表
    –env ETCD_LISTEN_CLIENT_URLS
    #Peer消息的监听服务地址列表
    –env ETCD_LISTEN_PEER_URLS
    #启动集群的时候指定集群口令,只有相同token的才能加入到同一集群
    –env ETCD_INITIAL_CLUSTER_TOKEN
    #所有集群节点的地址列表
    –env ETCD_INITIAL_CLUSTER

    测试一下成功没有

    $docker ps
    CONTAINER ID   IMAGE                 COMMAND                 CREATED          STATUS          PORTS                                              NAMES
    13aad2124d35   bitnami/etcd:latest   \”/entrypoint.sh etcd\”   11 minutes ago   Up 11 minutes   0.0.0.0:32379->2379/tcp, 0.0.0.0:32380->2380/tcp   etcd_node3
    03e368e9658e   bitnami/etcd:latest   \”/entrypoint.sh etcd\”   11 minutes ago   Up 11 minutes   0.0.0.0:22379->2379/tcp, 0.0.0.0:22380->2380/tcp   etcd_node2
    2781e87d368d   bitnami/etcd:latest   \”/entrypoint.sh etcd\”   11 minutes ago   Up 11 minutes   0.0.0.0:12379->2379/tcp, 0.0.0.0:12380->2380/tcp   etcd_node1
    #测试命令
    $docker exec -it 2781e87d368d etcdctl member list

    Etcd集群搭建实验

    实验环境

    实验环境非常简单,2 台服务器, etcd01 主 etcd02 从。

    etcd01etcd02192.168.1.103192.168.1.104

    下载与安装 etcd

    首先从 Yum 源上安装

    [root@bogon ~]# yum -y install etcd

    查看一下版本

    [root@bogon ~]# etcd –version
    etcd Version: 3.3.11
    Git SHA: 2cf9e51
    Go Version: go1.10.3
    Go OS/Arch: linux/amd64

    修改配置文件

    编辑配置文件 /etc/etcd/etcd.conf ,可以通过如下命令查看文件内容,主节点如下。

    [root@bogon ~]# egrep -v \”^$|^#\” /etc/etcd/etcd.conf
    ETCD_DATA_DIR=\”/var/lib/etcd/default.etcd\”
    ETCD_LISTEN_PEER_URLS=\”http://192.168.1.103:2380\”
    ETCD_LISTEN_CLIENT_URLS=\”http://0.0.0.0:2379\”
    ETCD_NAME=\”etcd01\”
    ETCD_INITIAL_ADVERTISE_PEER_URLS=\”http://192.168.1.103:2380\”
    ETCD_ADVERTISE_CLIENT_URLS=\”http://0.0.0.0:2379\”
    ETCD_INITIAL_CLUSTER=\”etcd01=http://192.168.1.103:2380,etcd02=http://192.168.1.104:2380\”
    ETCD_INITIAL_CLUSTER_TOKEN=\”etcd-cluster\”
    ETCD_INITIAL_CLUSTER_STATE=\”new\”
    [root@bogon ~]#

    从节点如下。

    [root@bogon ~]# egrep -v \”^$|^#\” /etc/etcd/etcd.conf
    ETCD_DATA_DIR=\”/var/lib/etcd/default.etcd\”
    ETCD_LISTEN_PEER_URLS=\”http://192.168.1.104:2380\”
    ETCD_LISTEN_CLIENT_URLS=\”http://0.0.0.0:2379\”
    ETCD_NAME=\”etcd02\”
    ETCD_INITIAL_ADVERTISE_PEER_URLS=\”http://192.168.1.104:2380\”
    ETCD_ADVERTISE_CLIENT_URLS=\”http://0.0.0.0:2379\”
    ETCD_INITIAL_CLUSTER=\”etcd01=http://192.168.1.103:2380,etcd02=http://192.168.1.104:2380\”
    ETCD_INITIAL_CLUSTER_TOKEN=\”etcd-cluster\”
    ETCD_INITIAL_CLUSTER_STATE=\”new\”

    服务启动与查看

    分别在主从节点上执行如下命令启动服务。

    [root@master etcd]# systemctl start etcd
    [root@master etcd]# systemctl status etcd

    使用如下命令查看网络进程。

    [root@bogon ~]# netstat -ntlp | grep etcd
    tcp 0 0 192.168.1.104:2380 0.0.0.0:* LISTEN 22061/etcd
    tcp6 0 0 :::2379 :::* LISTEN 22061/etcd

    查看集群节点

    [root@bogon ~]# etcdctl member list
    4490eae103912db6: name=etcd01 peerURLs=http://192.168.1.103:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
    5038ecd3b2f796d0: name=etcd02 peerURLs=http://192.168.1.104:2380 clientURLs=http://0.0.0.0:2379 isLeader=true

    查看健康状态

    [root@bogon ~]# etcdctl cluster-health
    member 4490eae103912db6 is healthy: got healthy result from http://0.0.0.0:2379
    member 5038ecd3b2f796d0 is healthy: got healthy result from http://0.0.0.0:2379
    cluster is healthy

    报错与解决

    1.cluster ID mismatch

    报错如下

    request sent was ignored (cluster ID mismatch: remote[4xxx6]=6xxxb, local=9xxxb)

    解决方法

    需要把master和node节点的/var/lib/etcd/目录下的缓存都删除一遍,然后重启etcd。

    2.cannot understand the cluster version

    报错如下

    cannot understand the cluster version of member 4xxx6 (not_decided is not in dotted-tri format) incompatible with current running cluster

    解决方法

    可能是因为配置文件中的

    ETCD_INITIAL_CLUSTER_STATE=\”exist\”

    将其改为

    ETCD_INITIAL_CLUSTER_STATE=\”new\”

    3.permission denied

    报错如下

    etcdmain: cannot access data directory: open /var/lib/etcd/default.etcd/.touch: permission denied

    解决方法

    关掉SElinux安全,通过执行命令关闭,这样重启之后会恢复状态。

    setenforce 0

    或者在在 /etc/selinux/config 中将 SELINUX=enforcing 设置成 disabled ,然后 reboot 。

    systemd 默认是以 etcd 用户执行的,这里需要修改 default.etcd 文件夹权限

    chown etcd:etcd -R /var/lib/etcd/default.etcd

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持悠久资源网。

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 Linux服务器 docker搭建etcd集群方式 bitnami/etcd https://www.u-9.cn/server/linux/2541.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务