Elasticsearch

一、Elasticsearch 简介

  • Elasticsearch 是一个基于 Lucene 的分布式搜索引擎,提供全文检索、结构化搜索、聚合分析等功能。

  • 它是 ELK(Elasticsearch + Logstash + Kibana)技术栈的核心组件。

  • 适合用于:日志分析、网站搜索引擎、指标分析、数据监控等。

二、安装

###我这里准备了三台机器

####java环境

yum install -y java-11-openjdk java-11-openjdk-devel
java -version

1、单点部署

配置repos

cd /etc/yum.repos.d/
vim elasticsearch.repo

[elasticsearch]
name=Elasticsearch repository for 9.x packages
baseurl=https://artifacts.elastic.co/packages/9.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
sudo yum install --enablerepo=elasticsearch elasticsearch

sudo dnf install --enablerepo=elasticsearch elasticsearch

1.1、配置文件

# 修改es的配置文件
vim /etc/elasticsearch/elasticsearch.yml 

# ES服务监听对外暴露服务的地址
network.host: 0.0.0.0

# 指定ES集群的节点IP
discovery.seed_hosts: ["192.168.200.201"]

# 指定参与master选举的节点
cluster.initial_master_nodes: ["192.168.200.201"]

# 启动ES服务
systemctl enable --now elasticsearch

# 验证节点是否正常工作
[root@elk101.xiao.com ~]# ss -ntl
...
LISTEN      0      128                                             [::]:9200                                                        [::]:*                  
LISTEN      0      128                                             [::]:9300                                                        [::]:*   

- 9200端口作用:
      对ES集群外部提供http/https服务。可以理解为对客户端提供服务。

  9300端口作用:    

  ​      对ES集群内部进行数据通信传输端口。走的时候tcp协议

######如果遇到集群的uuid为"_na_"情况时,可以执行如下操作:######

###可能是ip或自己解析的域名错误
- ​    systemctl stop elasticsearch.service
- ​    rm -rf /var/lib/elasticsearch/* /var/log/elasticsearch/* /tmp/*
- ​    systemctl start elasticsearch.service
- ​    curl 192.168.200.201:9200

2、集群部署

####二进制部署

(1)elk201配置集群免密登录及同步脚本
#修改主机列表
cat >> /etc/hosts <<'EOF'
192.168.200.201 elk201.com
192.168.200.202 elk202.com
192.168.200.203 elk203.com
EOF

# elk201节点上生成密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q
##################################################################
ssh-keygen	SSH 密钥生成工具
-t rsa	指定密钥类型为 RSA(现在常用的是 ed25519,但 RSA 依然广泛支持)
-P ''	设置私钥的密码为空密码(-P 是 passphrase 的意思)
-f ~/.ssh/id_rsa	指定生成的密钥文件保存位置:
~/.ssh/id_rsa 是私钥,
~/.ssh/id_rsa.pub 是对应的公钥
-q	静默模式,不显示提示信息(quiet 模式)
####################################################################

# elk101配置所有集群节点的免密登录
for ((host_id=201;host_id<=203;host_id++));do ssh-copy-id elk${host_id}.com ;done

# 链接测试
ssh 'elk201.com'
ssh 'elk202.com'
ssh 'elk203.com'

# 所有节点安装rsync数据同步工具
yum -y install rsync

# 编写同步脚本
cat > /usr/local/sbin/data_rsync.sh <<'EOF'
#!/bin/bash
if  [ $# -ne 1 ];then
   echo "Usage: $0 /path/to/file(绝对路径)"
   exit
fi 
# 判断文件是否存在
if [ ! -e $1 ];then
    echo "[ $1 ] dir or file not find!"
    exit
fi
# 获取父路径
fullpath=`dirname $1`
# 获取子路径
basename=`basename $1`
# 进入到父路径
cd $fullpath
for ((host_id=202;host_id<=203;host_id++))
  do
    # 使得终端输出变为绿色
    tput setaf 2
    echo ===== rsyncing elk${host_id}.com: $basename =====
    # 使得终端恢复原来的颜色
    tput setaf 7
    # 将数据同步到其他两个节点
    rsync -apz $basename  `whoami`@elk${host_id}.com:$fullpath
    if [ $? -eq 0 ];then
      echo "命令执行成功!"
    fi
done
EOF


# 给脚本授权
chmod +x /usr/local/sbin/data_rsync.sh
	
#(2)elk201下载ES软件包
curl -o elasticsearch-7.17.5-linux-x86_64.tar.gz z
	
	
#(3)所有节点创建运行ES服务的用户
useradd -u 2025 xiao
	
#(4)elk201创建ElasticSearch的工作目录

# 可以如下操作
mkdir -pv /xiao/{data,logs,softwares}/es7
chown xiao:xiao -R /xiao/{softwares,data,logs}/es7/
ll /xiao/{data,logs,softwares}/es7 -d

# 也可以如下操作(推荐)
install -d /xiao/{data,logs,softwares}/es7 -o xiao -g xiao
 
# elk101解压软件包
tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /xiao/softwares/es7/
chown -R xiao:xiao /xiao/softwares/es7/elasticsearch-7.17.5   # 加权限

# elk101修改配置文件
[root@elk101.xiao.com ~]# yy /xiao/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml 

cluster.name: xiao-linux85-binary
path.data: /xiao/data/es7
path.logs: /xiao/logs/es7
network.host: 0.0.0.0
discovery.seed_hosts: ["elk101.com","elk102.com","elk103.com"]
cluster.initial_master_nodes: ["elk101.com","elk102.com","elk103.com"]
[root@elk101.xiao.com ~]# 

# elk101同步程序目录
[root@elk101.xiao.com ~]# data_rsync.sh  /xiao

# elk101节点针对ES基础调优
# 修改文件打开数量上线,修改后需要断开会话
[root@elk101.xiao.com ~]# cat /etc/security/limits.d/es7.conf
*	soft	nofile	65535
*	hard	nofile	131070
*	hard	nproc	8192

[root@elk101.xiao.com ~]# ulimit -Sn
65535

[root@elk101.xiao.com ~]# ulimit -Hn
131070


# 调大内核虚拟内存映射值
[root@elk101.xiao.com ~]# cat  /etc/sysctl.d/es.conf
vm.max_map_count=524288

[root@elk101.xiao.com ~]# sysctl -q vm.max_map_count
vm.max_map_count = 65530

[root@elk101.xiao.com ~]# sysctl -f  /etc/sysctl.d/es.conf
vm.max_map_count = 524288

[root@elk101.xiao.com ~]# sysctl -q vm.max_map_count
vm.max_map_count = 524288

# 同步调优文件
[root@elk101.xiao.com ~]# data_rsync.sh  /etc/sysctl.d/es.conf
[root@elk101.xiao.com ~]# data_rsync.sh  /etc/security/limits.d/es7.conf 
[root@elk101.xiao.com ~]# data_rsync.sh /etc/hosts
	
#所有节点启动服务
# 先断开连接
让文件打开数量上限生效。

#  使得内核参数生效
sysctl -f  /etc/sysctl.d/es.conf

# 后台启动es服务
su xiao -c '/xiao/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch -d'

# 验证服务是否正常
[root@elk1 ~]# curl 192.168.200.201:9200
[root@elk1 config]# curl 192.168.200.201:9200
{
  "name" : "elk201.com",
  "cluster_name" : "xiaop",
  "cluster_uuid" : "D3J7tGzoRe-4yuJRKWOzNQ",
  "version" : {
    "number" : "7.17.5",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
    "build_date" : "2022-06-23T21:57:28.736740635Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}


[root@elk1 config]#  curl 192.168.200.201:9200/_cat/nodes
192.168.200.202 34 96 23 1.31 0.68 0.38 cdfhilmrstw - elk202.com
192.168.200.203 40 96 26 0.66 0.45 0.31 cdfhilmrstw * elk203.com
192.168.200.201 40 95 21 0.43 0.30 0.26 cdfhilmrstw - elk201.com
[root@elk1 config]# 

若集群UUID出现"na"状态时,做如下动作,所有节点操作: pkill java rm -rf /xiao/data/es7/* /xiao/logs/es7/* /tmp/*

  1. 如果不对,检查名字、网段,ip

三、使用systemctl管理ES服务

   #1.elk101停止ES服务
pkill java

	#2.elk101编写ES启动脚本
cat > /usr/lib/systemd/system/es7.service <<EOF
[Unit]
Description=xiao-es7
After=network.target

[Service]
Type=simple
ExecStart=/xiao/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch
User=xiao
LimitNOFILE=131070

[Install]
WantedBy=multi-user.target
EOF

	#3.elk101加载脚本
systemctl daemon-reload

	#4.elk101设置开机自启动
systemctl enable --now es7

	#5.elk101查看服务是否正常运行
systemctl status es7
ss -ntl
curl 192.168.200.201:9200/_cat/nodes


	#6.其他节点使用脚本
data_rsync.sh /usr/lib/systemd/system/es7.service


	#7.其他节点使用脚本管理
pkill java
systemctl enable --now es7
systemctl status es7

四、ES集群的常见术语

1、使用Postman软件

1.1、查看索引

查看所有的索引

curl -X GET 192.168.200.201:9200/_cat/indices

1.2、创建索引(相当于数据库)

创建默认索引,默认是一个分片和一个副本

curl -X PUT "192.168.200.201:9200/my-index"

1.3、修改索引

_settings


(1)修改副本
curl -XPUT 192.168.200.201:9200/xiaop/_settings
{
    "number_of_replicas": 1
}

(2)修改分片,不能修改

curl -X  PUT 192.168.200.201:9200/xiaop/_settings
{
    "number_of_shards": 10
}

1.4删除索引

(1)删除单个索引
curl -X  DELETE 192.168.200.201:9200/xiaop-003

(2)基于通配符删除多个索引

curl -X DELETE 192.168.200.201:9200/xiaop-*

delete

1.5索引别名

(1)添加索引别名
POST http://192.168.200.201:9200/_aliases
{
    "actions": [
        {
            "add": {
                "index": "xiaop",
                "alias": "xiaoptx"
            }
        }

​       ]

}

_aliases

(2)查看索引别名

  GET http://192.168.200.201:9200/_aliases

1.6、删除索引别名

 POST http://192.168.200.201:9200/_aliases

  {
      "actions": [
          {
              "remove": {
                  "index": "xiaop",
                  "alias": "xiaoptx"
              }
          }
      ]
  }

1.7、修改索引别名

{
      "actions": [
          {
              "remove": {
                  "index": "xiaop",
                  "alias": "xiaoptx"
              }
          },
           {
              "add": {
                  "index": "xiaop",
                  "alias": "数据库运维工程师"
                }
            }
        ]
}

1.8、关闭索引

1.9、打开索引

#####还有很多语句。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值