精彩回顾
mongo
1. sql和nosql区别
2. 应用常见
- 用户评论
- 游戏装备
- 问卷调查
- 日志
3. mongo特点
4. 安装部署
5. 配置文件
6. CURD增删改查
7. 用户授权
- agmin root 角色
- 自定义 read write 角色
8. 副本集
- 创建目录
- 修改配置
- 启动所有节点
- 初始化副本集配置参数
- 测试主从复制是否正常
- 模拟故障转移
- 扩容和收缩
- 权重调整和主库降级
- 仲裁节点
9. 备份恢复
- 全备
- oplog备份
- mysql导出csv,导入到mongo
10. 模拟误删除操作
- 全备
- 模拟误删除
- 备份oplog
- 切换到local下,查找误删除语句的时间点
- 处理备份文件
- 恢复到误操作时间点以前
- 检验数据是否恢复成功
《Elasticsearch》
1. 什么是搜索
- 百度
- 淘宝、京东
2. 如果用数据库做搜索会怎么样
- 天气
- 关键词
- 全表扫描(扫描) 例:老男孩教育 ---> 老%%教育 、 老教育%
3. 什么是全文检索,倒排索引和Lucene
- 根据匹配的优先级顺序推送搜索的数据信息
4. 什么是Elasticsearch
- 分布式搜索分析引擎,它被用作全文检索、结构化搜索、分析以及这三个功能的组合
- Java 开发语言
- 底层是 Lucene 引擎
5. Elasticsearch 功能
(1)分布式的搜索引擎和数据分析引擎
搜索:站内搜索,商城商品的检索
数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站:最近1个月访问量排名前3的新闻板块
(2)全文检索,结构化检索,数据分析
全文检索:
(3)对海量数据进行实时的处理
6. Elasticsearch应用场景
- 网页搜索
- 新闻搜索
- 商品标签
- 日志收集分析展示
高亮、推荐搜索
Stack Overflow(国外的程序员常讨论论坛),IT问题,程序的报错,提交上去,有人会给你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案
GitHub(开源代码管理),搜索上千亿行代码
7. Elasticsearch特点
- 适合搜索
- 全文检索
- 分析数据
- 处理海量数据PB
- 高可用性能分布式搜索引擎数据库
8. Elasticsearch数据格式
9. 安装部署
9.1 下载安装软件
# mkdir -p /data/es_soft/
# cd /data/es_soft/
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
yum install elasticsearch-6.6.0.rpm -y
# rpm -ivh elasticsearch-6.6.0.rpm
9.2 配置启动
[root@db01 /data/soft]# systemctl daemon-reload
[root@db01 /data/soft]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@db01 /data/soft]# systemctl start elasticsearch.service
[root@db01 /data/soft]# systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-07-09 10:07:45 CST; 6s ago
Docs: http://www.elastic.co
Main PID: 2172 (java)
CGroup: /system.slice/elasticsearch.service
├─2172 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSIn...
└─2227 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux...
Jul 09 10:07:45 db01 systemd[1]: Started Elasticsearch.
Jul 09 10:07:45 db01 systemd[1]: Starting Elasticsearch...
Jul 09 10:07:45 db01 elasticsearch[2172]: OpenJDK 64-Bit Server VM warning...N
Hint: Some lines were ellipsized, use -l to show in full.
[root@db01 /data/soft]# systemctl is-active elasticsearch.service
active
9.3 检查是否启动成功
ps -ef|grep elastic
[root@db01 /data/soft]# lsof -i:9200
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2172 elasticsearch 190u IPv6 32647 0t0 TCP localhost:wap-wsp (LISTEN)
java 2172 elasticsearch 191u IPv6 32648 0t0 TCP localhost:wap-wsp (LISTEN)
[root@db01 /data/soft]# curl localhost:9200
{
"name" : "Hb7dC06",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "G-HeEmHjTw6i--lH_qPJhA",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
9.4 查看配置文件位置
[root@db01 /data/soft]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml # 主配置文件
/etc/elasticsearch/jvm.options # java虚拟机配置
/etc/init.d/elasticsearch # init.d启动脚本
/etc/sysconfig/elasticsearch # 环境变量相关信息,不需要动
/usr/lib/sysctl.d/elasticsearch.conf # 环境变量相关
/usr/lib/systemd/system/elasticsearch.service # systemd启动脚本
9.5 调整配置
[root@db01 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g
1.不要超过30G
官网 https://www.elastic.co/cn/
9.6 调整elasticsearch 配置
> 配置文件调整后参数信息
[root@db01 ~]# grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml
node.name: node-1
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51
http.port: 9200
> 创建目录并授权
mkdir /data/elasticsearch/ -p
chown -R elasticsearch:elasticsearch /data/elasticsearch/
> 重新启动
systemctl stop elasticsearch
systemctl start elasticsearch
> 连接报错
[root@db01 ~]# curl 10.0.0.51:9200
curl: (7) Failed connect to 10.0.0.51:9200; Connection refused
> 查看日志报错信息:(内存锁定)
[root@db01 ~]# tail -f /var//log/elasticsearch/elasticsearch.log
[2019-07-09T11:26:31,187][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
> 解决办法:(参考 https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setting-system-settings.html#systemd)
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
systemctl daemon-reload
systemctl stop elasticsearch
systemctl start elasticsearch
> 重新检查:OK
[root@db01 ~]# curl 10.0.0.51:9200
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "jH94pzHNTSqbFdOYFSDvgw",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
============= 启动报错总结:=============
1.配置文件没有任何修改
2.配置文件没有修改IP地址
3.系统内存只有1个G,启动失败
4.配置文件参数拼写错误,启动失败
5.忘记修改内存锁定,启动失败
9.7 es-head安装部署
[root@db01 ~]# yum install nodejs npm openssl screen -y
[root@db01 ~]# node -v
v6.17.1
[root@db01 ~]# npm -v
3.10.10
# npm install -g cnpm --registry=https://registry.npm.taobao.org
[root@db01 ~]# tar zxvf elasticsearch-head.tar.gz -C /opt/
cd /opt/elasticsearch-head
npm run start &
修改es配置文件
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
重启es
systemctl stop elasticsearch
systemctl start elasticsearch
网页打开
10.0.0.51:9100
输入
http://10.0.0.51:9200
![Q51M@S$7)LPPK8[([
QCN.png
副本 补齐
分片 补齐
《Kibana 安装》
1. 配置启动文件
[root@db01 ~]# grep "^[a-Z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.51"
server.name: "db01"
elasticsearch.hosts: ["http://localhost:9200"]
2.启动
[root@db01 ~]# systemctl start kibana
检查端口
[root@db01 ~]# netstat -lnp|grep 5601
tcp 0 0 10.0.0.51:5601 0.0.0.0:* LISTEN 2362/node
3. 连接
《中文分词器安装》
1.版本要对应
2.所有的ES节点都需要安装
3.所有es节点都需要重启
安装(有几个els节点安装几个)
[root@db01 ~]# cd /usr/share/elasticsearch/bin
[root@db01 /usr/share/elasticsearch/bin]# ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y #按 y 确认
-> Installed analysis-ik
重启 elasticsearch
[root@db01 ~]# systemctl restart elasticsearch
分词器测试
创建索引:
curl -XPUT http://localhost:9200/index
创建映射:
curl -XPOST http://localhost:9200/index/fulltext/_mapping -H 'Content-Type:application/json' -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}'
创建一些文档:
curl -XPOST http://localhost:9200/index/fulltext/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/fulltext/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/fulltext/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/fulltext/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
查询:
curl -XPOST http://localhost:9200/index/fulltext/_search?pretty -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["", ""],
"post_tags" : [" ", ""],
"fields" : {
"content" : {}
}
}
}
'
《elasticsearch》学习回顾
1. 什么叫搜索
2. 为什么mysql不适合全文检索
3. 什么是全文检索倒排索引打分
4. es的应用场景
5. es特点
- 分布式、高可用、搜索分析
6. es安装部署
- java环境
- 内存不能小于1G
- 磁盘空间充足
- 配置文件开启内存锁定
- jvm虚拟机最大最小内存都一样
- 绑定内网IP和本地IP(工作场景只需要绑定内网IP)
7. 解决内存锁定
- 配置文件增加允许内存锁定参数
- 重启es
8. 测试
- ps -ef | grep elasticearch
- ss -lnp | grep 9200
- netstat -lnp | grep 9200
9. 开放防火墙端口
- 9200
- 9300(通信端口)
10. 安装 es-head 插件
- 安装包 npm
- chrome 浏览器插件
- 先压缩,再解压
11. 概念
- index ---> 库
- type ---> 表
- doc ---> 行数据
- fields ---> 字段
- shards ---> 分片,分库分表
12. 操作命令 CRUD
- put get post delete
13. 集群配置(生产环境的标配)
cluster.name: linux58 / 集群模式,必须打开,同一个进群要全部一样
node.name: node-1 / 节点名称,每个节点都不一样
path.data: /data/elasticsearch / 如果你更换了目录,要授权给es用户和组
path.logs: /var/log/elasticsearch / 如果是集群模式,日志名为{集群名.log}
bootstrap.memory_lock: true / 内存锁定,一定要打开,然后修改system配置
network.host: 10.0.0.51,127.0.0.1 / 绑定内网IP,本地IP可以选择不做
http.port: 9200 / 默认9200,还有一个隐藏的通信端口 9300
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52","10.0.0.53"] / 集群发现地址,只要包含自己和集群内任意一个节点就可以
discovery.zen.minimum_master_nodes: 1 / 选举相关参数,多数节点数量 node/2 + 1
http.cors.enabled: true / 为了让es-head 可以访问es,同下
http.cors.allow-origin: "*" / 为了让es-head 可以访问es,同上
14. 介绍集群的相关重要信息
- 分片数和副本数
- 默认创建索引为5分片,1副本
- 分片一旦创建好就不能更改了
- 副本数可以随时动态调整
- 集群健康状态
-- red ---> 有数据不完整了
-- yellow ---> 数据都完整,但是有索引的副本或者分片状态不正常
-- green ---> 数据都完整,副本也符合条件 - 监控节点数量
15.模拟故障现象
- 停掉服务器,观察集群状态
- 要注意,不能短时间内连续坏多台
- 要注意,不饿能短时间关闭重启多个回合
- 如果是0副本,数据所在的哪台机器,不能坏掉,不然数据会丢失
16. kibana 管理 es 集群
- 打开监控功能
- DevTools 可以方便执行命令
17. 中文分词器
- 所有es节点都安装
- 所有es节点安装完成后要重启才能生效
- 先创建索引
- 在创建映射关系(类似于mysql建表语句)
- 然后指定使用中文分词器
- 搜索测试
错误记录1
[2019-07-10T11:03:08,175][INFO ][o.e.c.r.a.DiskThresholdMonitor] [node-2] low disk watermark [85%] exceeded on [ctv1Dy7oTNybMQKL3DLiGQ][node-1][/data/elasticsearchdes/0] free: 709mb[13.8%], replicas will not be assigned to this node
[2019-07-10T11:03:38,181][INFO ][o.e.c.r.a.DiskThresholdMonitor] [node-2] low disk watermark [85%] exceeded on [ctv1Dy7oTNybMQKL3DLiGQ][node-1][/data/elasticsearchdes/0] free: 709mb[13.8%], replicas will not be assigned to this node
[2019-07-10T11:04:08,192][INFO ][o.e.c.r.a.DiskThresholdMonitor] [node-2] low disk watermark [85%] exceeded on [ctv1Dy7oTNybMQKL3DLiGQ][node-1][/data/elasticsearchdes/0] free: 709mb[13.8%], replicas will not be assigned to this node
解决方法:
磁盘空间不足,删除一部分数据