zoukankan      html  css  js  c++  java
  • 一键部署ETCD集群脚本

    #!/bin/bash
    set -x
    set -e
     
    #更改这里的IP, 只支持部署3个节点etcd集群
    declare -A NODE_MAP=(["etcd0"]="192.168.0.153" ["etcd1"]="192.168.0.154" ["etcd2"]="192.168.0.164")
     
    etcddownload()
    {
        ETCD_VER=v3.2.9    #指定要安装的版本号
        DOWNLOAD_URL=https://github.com/coreos/etcd/releases/download
        [ -f ${PWD}/temp-etcd/etcd ]  && return
        curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o ${PWD}/etcd-${ETCD_VER}-linux-amd64.tar.gz
        mkdir -p ${PWD}/temp-etcd && tar -zxf ${PWD}/etcd-${ETCD_VER}-linux-amd64.tar.gz -C ${PWD}/temp-etcd --strip-components=1
    }
     
    etcdconfig()
    {
        local node_index=$1
     
    cat <<EOF >${PWD}/${node_index}.conf
    ETCD_NAME=${node_index}
    ETCD_DATA_DIR="/var/lib/etcd"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${NODE_MAP[${node_index}]}:2380"
    ETCD_LISTEN_PEER_URLS="http://${NODE_MAP[${node_index}]}:2380"
    ETCD_LISTEN_CLIENT_URLS="http://${NODE_MAP[${node_index}]}:2379,http://127.0.0.1:2379"
    ETCD_ADVERTISE_CLIENT_URLS="http://${NODE_MAP[${node_index}]}:2379"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-378"
    ETCD_INITIAL_CLUSTER="etcd0=http://${NODE_MAP['etcd0']}:2380,etcd1=http://${NODE_MAP['etcd1']}:2380,etcd2=http://${NODE_MAP['etcd2']}:2380"
    ETCD_INITIAL_CLUSTER_STATE="new"
    # ETCD_DISCOVERY=""
    # ETCD_DISCOVERY_SRV=""
    # ETCD_DISCOVERY_FALLBACK="proxy"
    # ETCD_DISCOVERY_PROXY=""
    #
    # ETCD_CA_FILE=""
    # ETCD_CERT_FILE=""
    # ETCD_KEY_FILE=""
    # ETCD_PEER_CA_FILE=""
    # ETCD_PEER_CERT_FILE=""
    # ETCD_PEER_KEY_FILE=""
    EOF
    }
     
    etcdgen_unit()
    {
    cat <<EOF >${PWD}/etcd.service
    [Unit]
    Description=Etcd Server
    After=network.target
     
    [Service]
    Type=notify
    WorkingDirectory=/var/lib/etcd
    EnvironmentFile=-/etc/etcd/10-etcd.conf
    ExecStart=/usr/bin/etcd
    Restart=always
    RestartSec=8s
    LimitNOFILE=40000
     
    [Install]
    WantedBy=multi-user.target
    EOF
    }
     
    SSH_OPTS="-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oLogLevel=ERROR -C"
    etcdscp()
    {
      local host="$1"
      local src=($2)
      local dst="$3"
      scp -r ${SSH_OPTS} ${src[*]} "${host}:${dst}"
    }
    etcdssh()
    {
      local host="$1"
      shift
      ssh ${SSH_OPTS} -t "${host}" "$@" >/dev/null 2>&1
    }
    etcdssh_nowait()
    {
      local host="$1"
      shift
      ssh ${SSH_OPTS} -t "${host}" "nohup $@" >/dev/null 2>&1 &
    }
     
    etcddeploy()
    {
        for key in ${!NODE_MAP[@]}
        do
            etcdconfig $key
            etcdssh "root@${NODE_MAP[$key]}" "mkdir -p /var/lib/etcd /etc/etcd"
            etcdscp "root@${NODE_MAP[$key]}" "${key}.conf" "/etc/etcd/10-etcd.conf"
            etcdscp "root@${NODE_MAP[$key]}" "etcd.service" "/usr/lib/systemd/system"
            etcdscp "root@${NODE_MAP[$key]}" "${PWD}/temp-etcd/etcd ${PWD}/temp-etcd/etcd" "/usr/bin"
            etcdscp "root@${NODE_MAP[$key]}" "${PWD}/temp-etcd/etcd ${PWD}/temp-etcd/etcdctl" "/usr/bin"
            etcdssh "root@${NODE_MAP[$key]}" "chmod 755 /usr/bin/etcd*"
            etcdssh_nowait "root@${NODE_MAP[$key]}" "systemctl daemon-reload && systemctl enable etcd && nohup systemctl start etcd"
        done
     
    }
     
    etcdclean()
    {
      for key in ${!NODE_MAP[@]}
      do
        rm -f ${PWD}/${key}.conf
      done
      rm -f ${PWD}/etcd.service
    }
     
     
    #etcddownload
    etcdgen_unit
    etcddeploy
    etcdclean
     
    echo -e "33[32m 部署完毕! 执行 etcdctl cluster-health,检测是否OK。33[0m"

    1、准备三台机器,系统为centos7

    yum install -y epel-release vim bash-c* net-tools lrzsz

    2、关闭防火墙和selinux

    # systemctl stop firewalld && systemctl disable firewalld
    
    # vim /etc/selinux/config
    
    SELINUX=disabled
    
    # setenforce 0

    3、校对时间

    yum install -y ntp ntpdate && ntpdate pool.ntp.org

    4、设置ssh互信

    5、执行脚本即可。

    # bash deploy-etcd.sh

    原地址:http://www.cnblogs.com/keithtt/p/6649951.html
  • 相关阅读:
    json不支持中文写入的问题解决
    include(thinkphp常用内置标签)
    php如何设置编码格式
    模板替换
    获取网页内容之后图片不显示
    远程调用数据文件内容
    文件上传
    getError自动验证
    php文档编码设置
    获取网页内容时的乱码问题
  • 原文地址:https://www.cnblogs.com/Tempted/p/7690691.html
Copyright © 2011-2022 走看看