一键部署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
原文地址:https://www.cnblogs.com/Tempted/p/7690691.html