相关文章推荐

公司最近有个需求要做SAAS电商平台,想用es来做数据库,于是就让我们运维搭建es集群,还要搭建kibana和apm-server作为es的辅助工具,另外业务到时候也是要上生产,所以需要有一套监控告警系统支撑。

什么是elasticsearch?

引用官方的一段话如下:

Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
功能主要是用来做数据的分析和检索

我们都知道一般用来做数据库的都是用mysql,为啥还要用elasticsearch呢?

mysql当然也能实现数据的搜索和分析 例如求年龄的平均值 avg 分组group by 等等 但是我们说术业有专攻,mysql专攻于持久化的存储与管理,而es专门用来做检索和数据分析,要是数据量达到百万级别的话,用mysql去查询到我们想要的信息会比较慢,就例如我们在淘宝搜索一下想要的产品时,是需要秒级别的数据响应的速度的,如果用mysql来做承受不了那么大的压力,而elasticsearch正符合我们的要求。

elasticsearch的基本概念

Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎,Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档,是一个文档型数据库,在与传统的关系型数据库上,存在着一定的差异。下面将ES里面涉及到的元素与关系型数据库进行一一对应

1、Index(索引)

动词,相当于mysql中的insert

名词,相当于mysql的Database

2、Type(类型)7.0废弃

在index(索引)中,可以定义一个或多个类型,类似于mysql中的 table,同一种类型的数据放在一起

3、 Document(文档)

保存在某个索引(Index)下、某种类型(Type)的一个数据(Document),文档是json格式的数据,Document1相当于mysql中某个table数据

搭建elasticsearch集群

1.部署基本信息

cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.17.3 packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
4.安装es
yum install elasticsearch-7.17.3* -y
节点prod_es_db1配置
#ELK 的集群名称,名称相同即属于是同一个集群
cluster.name: es-cluster
#当前节点在集群内的节点名称
node.name: prod_es_db1
#ES 数据保存目录
path.data: /Data/App-Data/elastic/elasticsearch-7.17.3/data
#ES 日志保存目
path.logs:  /Data/App-Data/elastic/elasticsearch-7.17.3/log
#服务启动的时候锁定足够的内存,防止数据写入swap
bootstrap.memory_lock: true
#监听 IP
network.host: 0.0.0.0
#监听端口
http.port: 9200
#集群中 node 节点发现列表
discovery.seed_hosts: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
# 设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要显式指定索引库名称,生���环境建议设置为 true,删除索引库的时候必须指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
#关闭geoip
ingest.geoip.downloader.enabled: false
# 证书认证相关配置
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/config/elastic-certificates.p12
节点prod_es_db2配置
#ELK 的集群名称,名称相同即属于是同一个集群
cluster.name: es-cluster
#当前节点在集群内的节点名称
node.name: prod_es_db2
#ES 数据保存目录
path.data: /Data/App-Data/elastic/elasticsearch-7.17.3/data
#ES 日志保存目
path.logs:  /Data/App-Data/elastic/elasticsearch-7.17.3/log
#服务启动的时候锁定足够的内存,防止数据写入swap
bootstrap.memory_lock: true
#监听 IP
network.host: 0.0.0.0
#监听端口
http.port: 9200
#集群中 node 节点发现列表
discovery.seed_hosts: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
# 设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要显式指定索引库名称,生���环境建议设置为 true,删除索引库的时候必须指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
#关闭geoip
ingest.geoip.downloader.enabled: false
# 证书认证相关配置
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/config/elastic-certificates.p12
节点prod_es_db3配置
ELK 的集群名称,名称相同即属于是同一个集群
cluster.name: es-cluster
#当前节点在集群内的节点名称
node.name: prod_es_db3
#ES 数据保存目录
path.data: /Data/App-Data/elastic/elasticsearch-7.17.3/data
#ES 日志保存目
path.logs:  /Data/App-Data/elastic/elasticsearch-7.17.3/log
#服务启动的时候锁定足够的内存,防止数据写入swap
bootstrap.memory_lock: true
#监听 IP
network.host: 0.0.0.0
#监听端口
http.port: 9200
#集群中 node 节点发现列表
discovery.seed_hosts: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: ["192.168.100.91", "192.168.100.92","192.168.100.93"]
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
# 设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要显式指定索引库名称,生���环境建议设置为 true,删除索引库的时候必须指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
#关闭geoip
ingest.geoip.downloader.enabled: false
# 证书认证相关配置
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/config/elastic-certificates.p12
创建相关目录
mkdir /Data/App-Data/elastic/elasticsearch-7.17.3/{data,log} -pv
修改jvm参数
[root@prod_es_db1 ~]# cat /etc/elasticsearch/jvm.options |grep -E "Xms|Xmx"
-Xms6g
-Xmx6g
创建证书(在节点prod_es_db1执行)
chown elasticsearch:elasticsearch /Data/App-Data/ -R
chmod 755 -R /Data/App-Data/
/usr/share/elasticsearch/bin/elasticsearch-certutil cert -out /etc/elasticsearch/config/elastic-certificates.p12 -pass ""
chown  elasticsearch:elasticsearch /etc/elasticsearch/config/elastic-certificates.p12
chmod 644 /etc/elasticsearch/config/elastic-certificates.p12
把节点prod_es_db1的证书复制到各个节点并授权
scp -r /etc/elasticsearch/config/ SuperAdmin@192.168.100.92:/etc/elasticsearch/
scp -r /etc/elasticsearch/config/ SuperAdmin@192.168.100.93:/etc/elasticsearch/
chown elasticsearch:elasticsearch /Data/App-Data/ -R
chmod 755 -R /Data/App-Data/
chown  elasticsearch:elasticsearch /etc/elasticsearch/config/elastic-certificates.p12
chmod 644 /etc/elasticsearch/config/elastic-certificates.p12
为每个节点配置启动es时不启用内存锁限制
[root@prod_es_db1 bin]# cat /usr/lib/systemd/system/elasticsearch.service |grep LimitMEMLOCK=infinity
在各个节点启动es
systemctl daemon-reload && systemctl start elasticsearch && systemctl status elasticsearch && systemctl enable elasticsearch
等待集群节点加入集群后设置es密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
安装分时器插件
/usr/share/elasticsearch/bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.3/elasticsearch-analysis-ik-7.17.3.zip
查看节点健康状况
[root@prod_es_db1 ~]# curl -u username:passowrd http://localhost:9200/_cat/health?v
epoch      timestamp cluster    status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1660039195 09:59:55  es-cluster green           3         3     30  15    0    0        0             0                  -                100.0%
出现上面结果说明集群搭建完成  
常用的es命令  
单独查看节点健康状况  
curl http://192.168.100.91:9200/_cat/health
curl http://192.168.100.92:9200/_cat/health
curl http://192.168.100.93:9200/_cat/health
查看master节点  
http://192.168.100.93:9200/_cat/master
修改es密码  
curl -XPOST -u elastic 'http://localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type:application/json" -d '{ "password" : "123456" }'  
5.安装搭建kibana和apm-server
yum install kibana-7.17.3 -y
yum install apm-server-7.17.3-1 -y
[root@prod-es-db-kibana ~]# cat /etc/apm-server/apm-server.yml|egrep -v "^$|#"
apm-server:
  host: "192.168.100.90:8200"
  kibana:
    enabled: true
    host: "192.168.100.90:5601"
    protocol: "http"
    username: "elastic"
    password: "xxxx"
setup.ilm.enabled: false
output.elasticsearch:
  hosts: ["192.168.100.91:9200","192.168.100.92","192.168.100.93"]
  username: "elastic"
  password: "xxxx"
[root@prod-es-db-kibana ~]#  cat /etc/kibana/kibana.yml|egrep -v "^$|#"
server.port: 5601
server.host: "192.168.100.90"
server.publicBaseUrl: "http://192.168.100.90:5601"
server.name: "prod-kibana"
elasticsearch.hosts: ["http://192.168.100.91:9200","http://192.168.100.92:9200","http://192.168.100.93:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "xxxxx"
elasticsearch.requestTimeout: 30000
i18n.locale: "zh-CN"
systemctl start apm-server && systemctl status apm-server && systemctl enable apm-server
systemctl start kibana && systemctl status kibana && systemctl enable kibana
 
推荐文章