自动化shell脚本部署elasticsearch

readme.txt内容:
1、这里将繁琐的if判断给去掉了。适合快速部署测试环境。线上环境还是根据实际情况定。
2、这里需要先创建启动es的用户,该系列博客中有创建用户和免秘钥登录。
3、在同步文件到其他机器上,这里不用输密码是,因为root已经免秘钥到其他机器,否则需要手动输入其他机器密码,前面博客有写到创建用户和免秘钥登录,也可以写到将多个脚本函数写到一个脚本中。

#启动es的用户和密码,如果之前部署其他大数据组件已经创建了某个用户,则这里不需要再创建。
USER='hadoop'
PASSWORD='hadoop'


#es安装的集群机器主机名
host_name=(
wyl01
wyl02
wyl03
)

#es安装的集群机器ip
host_ip=(
10.10.252.151
10.10.252.101
10.10.252.117
)

SOFTWARE_PATH='/opt/software'               #es二进制安装包存放路径
ES_VERSION='elasticsearch-5.2.2'            #es的版本,注意这里不.tar.gz
ES_INSTALL_PATH='/opt'                      #es的安装路径

data_path='\/opt\/elasticsearch\/data'      #es的数据存放路径
logs_path='\/opt\/elasticsearch\/log'       #es日志存放路径

#1 步骤输出 紫色
#2 正确输出 绿色
#3 错误输出 红色
#4 提示输出 蓝色
#5 警告输出 黄色
function echo_fun(){
  if [ $# -ge 2 ];then
     params_num=$1
     shift 1
     params_mes=$@
  else
    echo_fun 3 请至少输入两个参数 echo_fun ..
    exit
  fi
  case $params_num in
        1)
        echo -e "\033[35;40;1m ****************************** ${params_mes} ******************************\033[0m\r\n"
        ;;
        2)
        echo -e "\033[32;40;1m ${params_mes}\033[0m\r\n"
        ;;
        3)
        echo -e "\033[31;40;1m ${params_mes}\033[0m\r\n"
        ;;
        4)
        echo -e "\033[36;40;1m ${params_mes}\033[0m\r\n"
        ;;
        5)
        echo -e "\033[33;40;1m ${params_mes} \033[0m\r\n"
        ;;
        *)
        echo_fun 3 参数异常第一个参数应为1,2,3,4,5
        ;;
   esac
}


#解压es的二进制包,并设置软连接,和改变其属组属性。
function extract_tar(){

echo_fun 1 es的部署安装
cd $SOFTWARE_PATH
sleep 1s

echo_fun 4 解压es二进制包,并创建软连接
tar -xf ${ES_VERSION}.tar.gz  -C  ${ES_INSTALL_PATH}
ln -s ${ES_INSTALL_PATH}/${ES_VERSION}   ${ES_INSTALL_PATH}/elasticsearch

cd ${ES_INSTALL_PATH}
chown -R ${USER}:${USER} ${ES_INSTALL_PATH}/elasticsearch*
sleep 1s
}


#定义修改es配置文件

function alter_es_config(){

echo_fun 4 修改es配置文件内容
sleep 1s
cd ${ES_INSTALL_PATH}/elasticsearch/config

echo_fun 5 '请输入es集群名字'
read cluster_name
data_path='\/opt\/elasticsearch\/data'
logs_path='\/opt\/elasticsearch\/log'
sed -i 's/#cluster.name: my-application/cluster.name: '"${cluster_name}"'/g' elasticsearch.yml
sed -i 's/#node.name: node-1/node.name: '"${host_name[0]}"'/g' elasticsearch.yml
sed -i 's/#path.data: \/path\/to\/data/path.data: '"${data_path}"'/g' elasticsearch.yml
sed -i 's/#path.logs: \/path\/to\/logs/path.logs: '"${logs_path}"'/g' elasticsearch.yml
sed -i 's/#network.host: 192.168.0.1/network.host: '"${host_ip[0]}"'/g' elasticsearch.yml
sed -i '/#http.port: 9200/a\transport.tcp.port: 9300' elasticsearch.yml
sed -i 's/#http.port: 9200/http.port: 9200/g' elasticsearch.yml
sed -i 's/\["host1", "host2"\]//' elasticsearch.yml
sed -i 's/#discovery.zen.ping.unicast.hosts:/discovery.zen.ping.unicast.hosts:/g' elasticsearch.yml
for ((i=${#host_name[*]};i>0;i--))
do
   sed -i '/discovery.zen.ping.unicast.hosts/a\               - '"${host_name[i-1]}"':9300' elasticsearch.yml
done
sed -i 's/#discovery.zen.minimum_master_nodes: 3/discovery.zen.minimum_master_nodes: 1/g' elasticsearch.yml
sed -i '/#action.destructive_requires_name/a\bootstrap.system_call_filter: false' elasticsearch.yml
sed -i '/#action.destructive_requires_name/a\http.cors.allow-origin: "*"' elasticsearch.yml
sed -i '/#action.destructive_requires_name/a\http.cors.enabled: true' elasticsearch.yml
sed -i '/#action.destructive_requires_name/a\node.data: true' elasticsearch.yml
sed -i '/#action.destructive_requires_name/a\node.master: true' elasticsearch.yml
}


#同步es安装包和软连接到其他的集群机器上并修改配置内容
function rsync_tar(){
echo_fun 4 同步es安装包和软连接到其他的集群机器上并修改配置内容
sleep 1s
cd ${ES_INSTALL_PATH}
for ((i=1;i<${#host_name[*]};i++))
do
rsync -av elasticsearch  ${ES_VERSION} ${host_name[i]}:/opt
 ssh -Tq ${host_name[i]} <<remotessh
cd ${ES_INSTALL_PATH}/elasticsearch/config
sed -i 's/node.name: '"${host_name[0]}"'/node.name: '"${host_name[i]}"'/g' elasticsearch.yml
sed -i 's/network.host: '"${host_ip[0]}"'/network.host: '"${host_ip[i]}"'/g' elasticsearch.yml
sed -i 's/node.master: true/node.master: false/g' elasticsearch.yml
exit
remotessh
done
  echo_fun 2 修改成功
}

#配置环境变量
function etc_profile(){
for ((i=0;i<${#host_name[*]};i++))
do
echo_fun 4 配置${host_name[i]}机器上的环境变量
ssh -Tq root@${host_name[i]} <<remotessh
echo -e '\nexport ES_HOME=${ES_INSTALL_PATH}/elasticsearch\nexport PATH=\${ES_HOME}/bin:\$PATH'>> /etc/profile
source /etc/profile
exit
remotessh
done
}

function limits_config(){
for ((i=0;i<${#host_name[*]};i++))
do
echo_fun 4  修改${host_name[i]}机器上的es启动用户的最大打开进程数和文件数
ssh -Tq root@${host_name[i]} <<remotessh
echo 'vm.max_map_count = 262144' >>/etc/sysctl.conf
sysctl -p
echo 'hadoop        hard  nproc    102400' >>/etc/security/limits.conf
echo 'hadoop        soft  nproc    102400' >>/etc/security/limits.conf
echo 'hadoop        hard  nofile   102400' >>/etc/security/limits.conf
echo 'hadoop        soft  nofile   102400' >>/etc/security/limits.conf
exit
remotessh
done
}
function start_es(){
for ((i=0;i<${#host_name[*]};i++))
do
ssh -Tq root@${host_name[i]} <<remotessh
su - hadoop <<EOF
cd ${ES_INSTALL_PATH}/elasticsearch
nohup ./bin/elasticsearch -d &
if [ $? -eq 0 ];then
  echo -e "\033[32;40;1m ${host_name[i]}机器上的 es has started....\033[0m\r\n" 
fi
EOF
exit
remotessh
done
}
extract_tar
alter_es_config
rsync_tar
etc_profile
limits_config
start_es

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
我们看第二个机器上的es配置内容已经发生改变了,所以其他集群机器也修改了。
这里写图片描述
我们在浏览器中访问如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值