【运维知识大神篇】两种方法,一键部署ElasticSearch集群(Shell+Ansible自动化部署)

news2024/11/15 17:27:03

本篇文章给大家介绍一下用Shell和Ansible两种方式,去一键部署ES(ElasticSearch)集群,实现在集群部署中的批量化操作,享受自动化部署的魅力。

准备主机

主机名IPcpudiskmemory
Ansible10.0.0.612C20G2G
ELK10410.0.0.1042C20G2G
ELK10510.0.0.1052C20G2G
ELK10610.0.0.1062C20G2G

Shell一键部署

我们在Ansible上准备好所需文件(无JDK的ES安装包和oracle的JDK),在Ansible编写Shell脚本,实现ES集群的一键部署,其实脚本编写的思路有很多,这里我使用先做免密钥,做完后写for循环,里面进行单点部署,也可以直接部署出来一个节点后进行拷贝

如果想修改目录的话需要修改脚本,elasticsearch.yml、es7.service里的文件,所以配置文件都打包放在了文末。

[root@Ansible ~]# cat deploy_ES.sh
#!/bin/bash
#1、先做免密钥,方便文件的推送以及远程执行命令
if [ -f /root/.ssh/id_rsa.pub ];then
	echo "公钥已经存在"
else
	ssh-keygen -t rsa
	echo "公钥不存在,自动创建公钥"
fi

hosts=(
10.0.0.104
10.0.0.105
10.0.0.106
)

for i in ${hosts[*]}
do
	expect <<EOF
      set timeout 10
      spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i
      expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "1\n" }
      }
      expect "password" { send "1\n" }
EOF
done

#2、准备配置文件



# 拼接IP字符串
ip_str=$(printf '", "%s' "${hosts[@]}")
ip_str=${ip_str:3}

# 替换文件中的IP地址
sed -i 's#^discovery.*#discovery.seed_hosts: \['"$ip_str"'"\]#g' elasticsearch.yml

sed -i 's#^cluster.initial_master_nodes.*#cluster.initial_master_nodes: \['"$ip_str"'"\]#g' elasticsearch.yml


#3、搭建ES集群

for q in ${hosts[*]}
do
	scp -r elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz jdk-8u291-linux-x64.tar.gz elasticsearch.yml es7.service jvm.options jdk.sh $q:/root/
	ssh $q "mkdir -p /koten/{softwares,data,logs}"
	ssh $q "tar xf /root/elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz -C /koten/softwares/"
	ssh $q "useradd koten"
	ssh $q "chown koten:koten /koten/softwares/elasticsearch-7.17.5/ -R"
	ssh $q "cat > /etc/security/limits.d/es.conf <<EOF
*          soft    nofile     65535
*          hard    nofile     131070
EOF
"	
	ssh $q "cat > /etc/sysctl.d/es.conf <<EOF
vm.max_map_count=262144
EOF"
	ssh $q "sysctl -f /etc/sysctl.d/es.conf"
	ssh $q "tar xf /root/jdk-8u291-linux-x64.tar.gz -C /koten/softwares/"
	ssh $q "\cp /root/elasticsearch.yml  /koten/softwares/elasticsearch-7.17.5/config/"
	ssh $q "\cp /root/es7.service /usr/lib/systemd/system/"
	ssh $q "\cp /root/jvm.options /koten/softwares/elasticsearch-7.17.5/config/"
	ssh $q "\cp /root/jdk.sh /etc/profile.d/"
	ssh $q "source  /etc/profile.d/jdk.sh"
	ssh $q "install -d /koten/{data,logs}/es7 -o koten -g koten"
done

#3、都部署好后再启动,防止脑裂
for e in ${hosts[*]}
do
	ssh $e "systemctl enable --now es7"
	if [ `ss -ntl | grep 19|wc -l` != 0 ];then
		echo "$e 主机ES启动成功!"
	fi	
done

[root@Ansible ~]# sh deploy_ES.sh
......
Created symlink from /etc/systemd/system/multi-user.target.wants/es7.service to /usr/lib/systemd/system/es7.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/es7.service to /usr/lib/systemd/system/es7.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/es7.service to /usr/lib/systemd/system/es7.service.

[root@ELK104 ~]# netstat -tnulp|grep 19
tcp6       0      0 :::19200                :::*                    LISTEN      2252/java           
tcp6       0      0 :::19300                :::*                    LISTEN      2252/java 

 

Ansible批量部署

1、初始化roles目录

[root@Ansible roles]# ansible-galaxy init es
- Role es was created successfully
[root@Ansible roles]# cd es 
[root@Ansible es]# pwd
/ansible/roles/es
[root@Ansible es]# ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars

2、编写给10.0.0.104、10.0.0.105、10.0.0.106做免密钥的playbook

[root@Ansible es]# cat /etc/ansible/hosts | tail -4 
[es_group]
es104 ansible_ssh_host=10.0.0.104 ansible_ssh_user='root' ansible_ssh_pass='1'
es105 ansible_ssh_host=10.0.0.105 ansible_ssh_user='root' ansible_ssh_pass='1'
es106 ansible_ssh_host=10.0.0.106 ansible_ssh_user='root' ansible_ssh_pass='1'

[root@Ansible es]# cat ssh.yaml 
---
- hosts: es_group
  gather_facts: no
 
  tasks:
  - name: install ssh key
    authorized_key: user=root
                    key="{{ lookup('file','/root/.ssh/id_rsa.pub')}}"
                    state=present

[root@Ansible es]# ansible-playbook ssh.yaml 

PLAY [es_group] ****************************************************************************************

TASK [install ssh key] *********************************************************************************
changed: [es106]
changed: [es105]
changed: [es104]

PLAY RECAP *********************************************************************************************
es104                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
es105                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
es106                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

3、编写数据推送和配置的playbook

如果需要修改主机,不仅要修改hosts文件,还需要修改elasticsearch.yml

[root@Ansible roles]# cat hosts | tail -4
[es_group]
10.0.0.104
10.0.0.105
10.0.0.106

[root@Ansible roles]# cat site.yml
- hosts: es_group
  roles:
    - role: es

[root@Ansible roles]# ls es/files/
elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz  es7.service                 jdk.sh
elasticsearch.yml                                jdk-8u291-linux-x64.tar.gz  jvm.options

[root@Ansible roles]# cat es/tasks/main.yml 
- name: mkdir /koten/softwares /koten/data /koten/logs
  file: 
    path: "{{ item }}"
    state: directory
  with_items:
    - /koten/softwares
    - /koten/data
    - /koten/logs

- name: tar xf elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz jdk-8u291-linux-x64.tar.gz
  unarchive: 
    src: "{{ item }}"
    dest: /koten/softwares
  with_items:
    - elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz
    - jdk-8u291-linux-x64.tar.gz

- name: Create koten Group
  group:
    name: koten

- name: Create koten User
  user:
    name: koten

- name: chown -R koten.koten /koten/softwares/elasticsearch-7.17.5/
  file:
    path: /koten/softwares/elasticsearch-7.17.5/
    owner: koten
    group: koten
    recurse: yes

- name: copy content to /etc/security/limits.d/es.conf
  copy:
    content: | 
      *          soft    nofile     65535
      *          hard    nofile     131070
    dest: /etc/security/limits.d/es.conf

- name: copy test content to /etc/sysctl.d/es.conf
  copy:
    content: |
      vm.max_map_count=262144
    dest: /etc/sysctl.d/es.conf

- name: sysctl -f /etc/sysctl.d/es.conf
  command: sysctl -f /etc/sysctl.d/es.conf

- name: push es7.service to /usr/lib/systemd/system/
  copy: 
    src: es7.service
    dest: /usr/lib/systemd/system/

- name: push jvm.options to /koten/softwares/elasticsearch-7.17.5/config/
  copy:
    src: jvm.options
    dest: /koten/softwares/elasticsearch-7.17.5/config/

- name: push elasticsearch.yml to /koten/softwares/elasticsearch-7.17.5/config/
  copy:
    src: elasticsearch.yml
    dest: /koten/softwares/elasticsearch-7.17.5/config/elasticsearch.yml

- name: push jdk.sh to /etc/profile.d/
  copy:
    src: jdk.sh
    dest: /etc/profile.d/

- name: source /etc/profile.d/jdk.sh
  command: bash -c 'source /etc/profile.d/jdk.sh'

- name: mkdir /koten/data/es7 /koten/logs/es7
  file: 
    path: "{{ item }}"
    state: directory
    owner: koten
    group: koten
  with_items:
    - /koten/data/es7
    - /koten/logs/es7

- name: systemctl enable --now es7
  systemd:
    name: es7
    state: started
    enabled: yes

4、执行数据推送和配置的playbook,部署es集群

[root@Ansible roles]# ansible-playbook site.yml 

PLAY [es_group] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [es105]
ok: [es106]
ok: [es104]

TASK [mkdir /koten/softwares /koten/data /koten/logs] **************************
changed: [es105] => (item=/koten/softwares)
changed: [es104] => (item=/koten/softwares)
changed: [es106] => (item=/koten/softwares)
changed: [es106] => (item=/koten/data)
changed: [es104] => (item=/koten/data)
changed: [es105] => (item=/koten/data)
changed: [es106] => (item=/koten/logs)
changed: [es105] => (item=/koten/logs)
changed: [es104] => (item=/koten/logs)

TASK [es : tar xf elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz jdk-8u291-linux-x64.tar.gz] ***
changed: [es105] => (item=elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz)
changed: [es104] => (item=elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz)
changed: [es106] => (item=elasticsearch-7.17.5-no-jdk-linux-x86_64.tar.gz)
changed: [es105] => (item=jdk-8u291-linux-x64.tar.gz)
changed: [es106] => (item=jdk-8u291-linux-x64.tar.gz)
changed: [es104] => (item=jdk-8u291-linux-x64.tar.gz)

TASK [es : Create koten Group] *************************************************
changed: [es105]
changed: [es106]
changed: [es104]

TASK [es : Create koten User] **************************************************
changed: [es104]
changed: [es105]
changed: [es106]

TASK [chown -R koten.koten /koten/softwares/elasticsearch-7.17.5/] *************
changed: [es104]
changed: [es105]
changed: [es106]

TASK [copy content to /etc/security/limits.d/es.conf] **************************
changed: [es104]
changed: [es106]
changed: [es105]

TASK [copy test content to /etc/sysctl.d/es.conf] ******************************
changed: [es106]
changed: [es104]
changed: [es105]

TASK [sysctl -f /etc/sysctl.d/es.conf] *****************************************
changed: [es106]
changed: [es104]
changed: [es105]

TASK [push es7.service to /usr/lib/systemd/system/] ****************************
changed: [es104]
changed: [es105]
changed: [es106]

TASK [push jvm.options to /koten/softwares/elasticsearch-7.17.5/config/] *******
changed: [es104]
changed: [es105]
changed: [es106]

TASK [push elasticsearch.yml to /koten/softwares/elasticsearch-7.17.5/config/] ***
changed: [es104]
changed: [es106]
changed: [es105]

TASK [es : push jdk.sh to /etc/profile.d/] *************************************
changed: [es104]
changed: [es105]
changed: [es106]

TASK [es : source /etc/profile.d/jdk.sh] ***************************************
changed: [es104]
changed: [es106]
changed: [es105]

TASK [mkdir /koten/data/es7 /koten/logs/es7] ***********************************
changed: [es104] => (item=/koten/data/es7)
changed: [es105] => (item=/koten/data/es7)
changed: [es106] => (item=/koten/data/es7)
changed: [es105] => (item=/koten/logs/es7)
changed: [es104] => (item=/koten/logs/es7)
changed: [es106] => (item=/koten/logs/es7)

TASK [systemctl enable --now es7] **********************************************
changed: [es106]
changed: [es104]
changed: [es105]

PLAY RECAP *********************************************************************
es104                      : ok=16   changed=15   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
es105                      : ok=16   changed=15   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
es106                      : ok=16   changed=15   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   



# 查看es的状态
[root@ELK104 ~]# systemctl status es7.service 
● es7.service - es7
   Loaded: loaded (/usr/lib/systemd/system/es7.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-10-27 14:01:54 CST; 42s ago
 Main PID: 3578 (java)
   CGroup: /system.slice/es7.service
           ├─3578 /koten/softwares/jdk1.8.0_291/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=6...
           └─3711 /koten/softwares/elasticsearch-7.17.5/modules/x-pack-ml/platform/linux-x86_64/bin/c...

Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,716][INFO ][o.e.p.PluginsService ...wn]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,716][INFO ][o.e.p.PluginsService ...ql]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,716][INFO ][o.e.p.PluginsService ...ck]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,717][INFO ][o.e.p.PluginsService ...re]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,717][INFO ][o.e.p.PluginsService ...de]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,749][INFO ][o.e.p.PluginsService ...er]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,750][INFO ][o.e.p.PluginsService ...ded
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,958][INFO ][o.e.e.NodeEnvironment...fs]
Oct 27 14:02:19 ELK104 elasticsearch[3578]: [2023-10-27T14:02:19,959][INFO ][o.e.e.NodeEnvironment...ue]
Oct 27 14:02:20 ELK104 elasticsearch[3578]: [2023-10-27T14:02:20,074][INFO ][o.e.n.Node           ...st]
Hint: Some lines were ellipsized, use -l to show in full.

 


deploy_es_shell打包文件下载链接:https://pan.baidu.com/s/1l22I0aSB-50NXlh4lYZArw?pwd=umbm

deploy_es_ansible打包文件下载链接:https://pan.baidu.com/s/1lIfYWMnhsg7yoyzgkBSEDA?pwd=8hpl

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux必备技能:掌握的必会命令

1 rpm查看程序配置文件 rpm -qc httpd2 rpm查看系统已经安装的相关的包 rpm -qa | grep httpd3 netstat查看服务支持的端口 netstat -anltupe | grep httpd

初识HTML超文本标记语言

文章目录 前端简介引入前端三剑客什么是HTML&#xff1f;超文本传输协议前戏HTTP超文本传输协议1.什么是HTTP协议2.四大特性3.数据格式4.响应状态码 基于HTTP协议搭建HTMLHTML简介 前端简介 引入 前端&#xff1a;与用户直接打交道的操作界面都可以称之为前端(那些炫酷的页面)…

自动化工具-文件清单对比

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 背景代码使用 背景 最近的工作中&#xff0c;领导需要比较指定两个文…

太古妖皇诀攻略,太古妖皇诀什么职业厉害

感受国风手游的魅力&#xff0c;畅游于以山海经为背景的太古妖皇诀。游戏地图广阔&#xff0c;洪荒异兽众多&#xff0c;技能配置酷炫&#xff0c;带来成吨伤害的打击感。与山海经中的精怪为伴&#xff0c;踏上修真之路。此外&#xff0c;万人在线竞技&#xff0c;让您尽情享受…

UG\NX二次开发 清除所有对象高亮

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 qq419469101 订阅本专栏,非常感谢。 简介 UG\NX二次开发 清除所有对象高亮 效果 代码 #include "me.hpp" extern DllExport void ufusr(char* p…

服务网络基础

服务网络基础 目录 前言 从今天开始我们将进入服务网格的学习&#xff0c;服务网格是微服务架构中的一种重要的技术&#xff0c;它可以解决微服务架构中的一些问题&#xff0c;比如服务发现、服务治理、服务监控等等&#xff0c;我们将从服务网格的基础开始&#xff0c;逐步深…

图像特征Vol.1:计算机视觉特征度量【纹理区域特征】

一、前言 &#x1f34a;什么是计算机视觉特征&#xff1f; 简单来说就是图像特征&#xff0c;对于我们来说&#xff0c;看到一张图片&#xff0c;能很自然的说出和描述图像中的一些特征&#xff0c;但是同样的图片&#xff0c;丢给计算机&#xff0c;只是一个二维矩阵&#xf…

场效应管器件

在面试硬件方面的工作时&#xff0c;我们通常会被提问模电方面的知识。 场效应管简称FET,有三级&#xff1a;源极(S)、漏极(D)、栅极&#xff08;G&#xff09;&#xff1b;可以实现电压控制电流源&#xff1b;“源极和漏极之间的漏极电流Id&#xff0c;由栅极的负电压进行控制…

Nerfies:可变形神经辐射场

Park K, Sinha U, Barron J T, et al. Nerfies: Deformable neural radiance fields[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5865-5874. Nerfies 是 Keunhong Park 在 Google 实习时基于 NeRF 模型开发的 可变形神经辐射场 (Def…

Qt界面实现中英文切换

要实现的效果&#xff0c;是下拉列表切换中文和English实现按钮文本中英文内容切换。 实现步骤&#xff1a; 1.在VS中鼠标对Translation Files文件右击&#xff0c;选择“添加”--->“模块”. 在弹窗的窗口中选择“Qt”--->“Qt Translation File”。 添加Translation_e…

操作系统(02326)考试题库

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 单选题多选题主观题 单选题 把并发进程中与共享变量有关的程序段称为…

DoLa:对比层解码提高大型语言模型的事实性

DoLa&#xff1a;对比层解码提高大型语言模型的事实性 摘要1 引言2 方法2.1 事实知识在不同层级上演化2.2 动态早期层选择2.3 预测对比 3 实验3.1 任务3.2 实验设置3.3 多项选择3.3.1 TruthfulQA&#xff1a;多项选择3.3.2 FACTOR&#xff1a;维基、新闻 3.4 开放式文本生成3.4…

polyloss详解

1、常见的泰勒展开公式 2、polyloss引入动机 2.1、polyloss定义 polyloss通过泰勒展开来逼近损失函数的简单框架&#xff0c;将损失函数设计为多项式函数的线性组合 2.2、polyloss主要贡献 提出了一个新的框架来理解和设计损失函数 PolyLoss可以让多项式基根据目标任务和数…

JVM虚拟机:Java对象的头信息有什么?

本文重点 在前面的课程中,我们学习了对象头,其中对象头包含Mark Word和class pointer,当然数组还会有一个数组长度。本文主要分析Mark Work中包含的信息。 Mark Word 以下两张图是一个意思: 32位 32位 64位 以上就是Mark Word会存储的信息,这个意思是说Java对象在不同…

如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码

环境&#xff1a; Win10 专业版 远程解锁 蓝牙解锁小程序 问题描述&#xff1a; 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样&#xff0c;蓝牙接近了电脑&#xff0c;电脑自动解锁无需输入开机密码 手机不需要拿出来&#xff0c;在口袋里就可以自动解锁&#xff…

「林曦的亲子美育」讲讲关于阅读的那些事儿

「林曦的亲子美育」是“林曦的小世界”2023年策划的一档新栏目。林曦老师作为一个“小男生的妈妈”,在这些年分享了许多关于亲子教育的心得&#xff1a;以“美”作为连接和最高标准&#xff0c;会护持着小朋友的选择和人生。教育是一个生活的过程。做一餐饭、读一本书、看一张画…

存储器概述

一、存储系统基本概念

vector容器初始化和对象

&#xff08;1&#xff09;a.assign(b.begin(), b.begin()3); //b为向量&#xff0c;将b的0~2个元素构成的向量赋给a &#xff08;2&#xff09;a.assign(4,2); //是a只含4个元素&#xff0c;且每个元素为2 &#xff08;3&#xff09;a.back(); //返回a的最后一个元素 &#xf…

Python入口顶部人体检测统计进出人数

程序示例精选 Python入口顶部人体检测统计进出人数 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python入口顶部人体检测统计进出人数》编写代码&#xff0c;代码整洁&#xff0c;规则&a…

【OpenCV实现平滑图像形态学变化】

文章目录 概要目标腐蚀膨胀开运算结构元素&#xff08;内核&#xff09;小结 概要 形态学变化是一组简单的图像操作&#xff0c;主要用于处理二值图像&#xff0c;即只包含黑和白两种颜色的图像。这些操作通常需要两个输入&#xff0c;原始图像和一个内核&#xff08;kernel&a…