Shell脚本自动化搭建ElasticSearch集群

本文提供了一种适用于7台主机以下ElasticSearch集群的自动化Shell脚本方案,通过脚本简化集群搭建过程。文中提及,对于更大规模的集群,建议添加if判断以实现节点的个性化配置。此外,作者还推荐了两篇相关博文,分别介绍ElasticSearch集群的详细搭建步骤和启动中可能遇到的问题及解决方法。
摘要由CSDN通过智能技术生成

/ 前言 /

       该脚本适用于7台主机以下的集群, 如果是大集群需要为节点进行个性化配置可以加一些if判断来根据ip修改节点的属性
       如需了解ElasticSearch集群搭建流程请看我的另一篇博文ElasticSearch集群搭建图文解析
       如需了解ElasticSearch启动常见异常及解决方案请看我的另一篇博文ElasticSearch常见启动异常及解决方案

/ 自动化Shell脚本 /

# !/bin/bash

# es集群节点名称
NAME_LIST=(
node-1
node-2
node-3
)

# es集群IP地址
IP_LIST=(
192.168.0.1
192.168.0.2
192.168.0.3
)

unicast_hosts="[\"192.168.0.1:9310\",\"192.168.0.2:9310\",\"192.168.0.3:9310\"]"
initial_hosts="[\"192.168.0.1\",\"192.168.0.2\",\"192.168.0.3\"]"


# 创建es启动用户
function add_user(){

echo "请注意,在创建用户时会先对该用户进行删除操作以确保脚本运行成功, 如已有该用户请慎重输入用户名!"
read -p "继续请输入 1 ,停止请输入 2. : " IS_CONTINUE
if [ ${IS_CONTINUE} -ne 1 ]; then
  echo "停止运行该脚本!"
fi

read -p "请输入新增用户用户名 : " username

read -p "请输入新增用户密码 : " password

echo -e "\n"
for ((i=0;i<${#IP_LIST[*]};i++))
do

echo "正在为${IP_LIST[i]}机器添加用户, 请输入该机器的root密码"
ssh -Tq ${IP_LIST[i]} <<ADDEOF
userdel -r ${username}
echo "userdel -r ${username}"
useradd -d /home/${username} ${username}
expect -c"
 spawn passwd ${username}
 expect {
     \"*yes/no*\" {send \"yes\r\";exp_continue}
     \"*New password:*\" {send \"${password}\r\";exp_continue}
     \"*Retype new password:*\" {send \"${password}\r\";exp_continue}
}"
exit
ADDEOF
echo -e "\n"
done
}

# 创建秘钥
function create_keygen(){
echo "开始新建免密秘钥"
su - root <<EOF
 expect -c"
    spawn  ssh-keygen -t rsa
      set timeout 30
      expect {
        \"*.ssh/id_rsa*\" {send \"\r\";exp_continue}
        \"*Overwrite*\" {send \"y\r\";exp_continue}
    \"*empty for no passphrase*\" {send \"\r\";exp_continue}
        \"*Enter same passphrase again:*\" {send \"\r\";exp_continue}
      }
  "
EOF
if [ $? -eq 0 ];then
 echo "创建秘钥成功"
else
 echo "创建秘钥失败"
fi
}

# 免密钥到其他机器
function sync_keygen(){
echo "开始同步密钥到其他主机"
for ((i=0;i<${#IP_LIST[*]};i++))
do
su root<<EOF
expect -c"
 spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@${IP_LIST[i]}
 expect {
     \"*yes/no*\" {send \"yes\r\";exp_continue}
     \"*password:*\" {send \"$password\r\";exp_continue}
  }"
EOF
done
if [ $? -eq 0 ];then
  echo "设置免秘钥成功"
else
  echo "设置免秘钥失败"
fi
}

read -p "请输入es安装包位置, 如/opt/down : " FILE_PATH
read -p "请输入安装包的名称, 如elasticsearch-7.7.0-linux-x86_64.tar.gz : " FILE_NAME
read -p "请输入es安装目录, 如/opt : " INSTALL_PATH
read -p "请输入集群名称 : " CLUSTER_NAME
DATA_PATH='\'${INSTALL_PATH}'\/elasticsearch\/data'
LOG_PATH='\'${INSTALL_PATH}'\/elasticsearch\/logs'


#  安装es
function install_es(){

echo "开始安装ES"
cd ${FILE_PATH}
sleep 1s
tar -xf ${FILE_NAME}  -C  ${INSTALL_PATH}
NAME_LENGTH=${#FILE_NAME}
SPLIT_LENGTH=$((${NAME_LENGTH}-7))
FILE_NAME=${FILE_NAME:0:${SPLIT_LENGTH}}
ln -s ${INSTALL_PATH}/${FILE_NAME}   ${INSTALL_PATH}/elasticsearch


sleep 1s
cd ${INSTALL_PATH}
chown -R ${username}:${username} ${INSTALL_PATH}/elasticsearch
echo "chown cmd" "chown -R ${username}:${username} ${INSTALL_PATH}/elasticsearch*"
sleep 1s
}


# 配置es
function config_es(){

echo "开始ES集群化配置"
sleep 1s
cd ${INSTALL_PATH}/elasticsearch/config

cp elasticsearch.yml.master elasticsearch.yml
# 如果是修改没有配置好的elasticsearch.yml使用下面的echo
echo 'cluster.name= '"${CLUSTER_NAME}" >> elasticsearch.yml
echo 'node.name= '"${NAME_LIST[0]}" >> elasticsearch.yml
# ...

# 如果是修改已经配置好的elasticsearch.yml文件使用下面的sed -i
sed -i '/cluster.name/s/:.*/: '"${CLUSTER_NAME}"'/'   elasticsearch.yml
sed -i '/node.name/s/:.*/: '\""${NAME_LIST[0]}"\"'/'   elasticsearch.yml
sed -i '/path.data/s/:.*/: '"${DATA_PATH}"'/'   elasticsearch.yml
sed -i '/path.logs/s/:.*/: '"${LOG_PATH}"'/'   elasticsearch.yml
sed -i '/network.host/s/:.*/: '"${IP_LIST[0]}"'/'   elasticsearch.yml
sed -i '/network.bind_host/s/:.*/: '"${IP_LIST[0]}"'/'   elasticsearch.yml
sed -i '/http.cors.allow-origin/s/:.*/: "http:\/\/'${IP_LIST[0]}':8080"/'   elasticsearch.yml
sed -i '/network.publish_host:/s/:.*/: '"${IP_LIST[0]}"'/'   elasticsearch.yml
sed -i '/cluster.initial_master_nodes:/s/:.*/: '${initial_hosts}'/'   elasticsearch.yml
sed -i '/discovery.zen.ping.unicast.hosts:/s/:.*/: '${unicast_hosts}'/'   elasticsearch.yml
echo 'vm.max_map_count = 262144' >>/etc/sysctl.conf
sysctl -p
echo ''${username}'        hard  nofile   65536' >>/etc/security/limits.conf
echo ''${username}'        soft  nofile   65536' >>/etc/security/limits.conf
echo ''${username}'        hard  nproc    4096' >>/etc/security/limits.conf
echo ''${username}'        soft  nproc    4096' >>/etc/security/limits.conf
}


# 同步es安装包并开始统一修改elasticsearch.yml配置文件
function sync_cfg(){
echo "开始配置集群内其余主机"
sleep 1s
cd ${INSTALL_PATH}
for ((i=1;i<${#IP_LIST[*]};i++))
do

 ssh -Tq ${IP_LIST[i]} <<CONFIG_EOF
chown -R ${username}:${username} ${INSTALL_PATH}/elasticsearch
sleep 1s
cd ${INSTALL_PATH}/elasticsearch
rm -rf ${INSTALL_PATH}/elasticsearch/data
sleep 1s
cd config
sed -i '/node.name/s/:.*/: '"${NAME_LIST[i]}"'/'   elasticsearch.yml
sed -i '/network.host/s/:.*/: '"${IP_LIST[i]}"'/'   elasticsearch.yml
sed -i '/network.bind_host/s/:.*/: '"${IP_LIST[i]}"'/'   elasticsearch.yml
sed -i '/network.publish_host:/s/:.*/: '"${IP_LIST[i]}"'/'   elasticsearch.yml

echo -e '\n export ES_HOME=${INSTALL_PATH}/elasticsearch \n export PATH=${ES_HOME}/bin:$PATH'>> /etc/profile
source /etc/profile

echo 'vm.max_map_count = 262144' >>/etc/sysctl.conf
sysctl -p
echo '${username}        hard  nofile   65536' >>/etc/security/limits.conf
echo '${username}        soft  nofile   65536' >>/etc/security/limits.conf
echo '${username}        hard  nproc    4096' >>/etc/security/limits.conf
echo '${username}        soft  nproc    4096' >>/etc/security/limits.conf
exit
CONFIG_EOF
done
  echo "修改配置文件成功"
}


add_user
create_keygen
sycn_keygen
install_es
config_es
sync_cfg
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值