Elasticsearch
开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
RESTFUL特点包括:
1、每一个URI代表1种资源;
2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、通过操作资源的表现形式来操作资源;
4、资源的表现形式是XML或者HTML;
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
官方网站: https://www.elastic.co中文社区: https://elasticsearch.cn官方参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setup-configuration-memory.html下载地址: https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.6.0/elasticsearch-6.6.0.rpm 存储nosql非关系型数据库filebeat-6.6.0-x86_64.rpm 从nginx服务日志中读取数据并发送给rediskibana-6.6.0-x86_64.rpm 以图形化方式展示logstash-6.6.0.rpm 负责将redis缓存中的数据收集并提交给elasticsearchredis负责缓存数据库
前提条件
拓扑图如下:
前提环境:jdk-1.8.0
硬件要求:
主机 |
IP |
内存 |
网络 |
node-1 |
192.168.8.1 |
4G |
NAT |
node-2 |
192.168.8.2 |
2/4G |
NAT |
node-3 |
192.168.8.3 |
2/4G |
NAT |
部署elasticsearch
- 安装elasticsearch:
[root@node-1 ~]# rpm -ivh /media/elk-6.6/elasticsearch-6.6.0.rpm
- elasticsearch目录和文件
/etc/elasticsearch/elasticsearch.yml #配置文件/etc/elasticsearch/jvm.options #java虚拟机/etc/init.d/elasticsearch #服务启动脚本/etc/sysconfig/elasticsearch #elasticsearch服务变量/usr/lib/sysctl.d/elasticsearch.conf #设置elasticsearch用户使用的内存大小/usr/lib/systemd/system/elasticsearch.service #添加系统服务文件/var/log/elasticsearch/elasticsearch.log #日志文件路径
- 修改配置文件:
1. [root@node-1 ~]# vim /etc/elasticsearch/elasticsearch.yml 2. node.name: node-1 #群集中本机节点名 3. path.data: /data/elasticsearch #数据目录 4. path.logs: /var/log/elasticsearch #日志目录 5. bootstrap.memory_lock: true #锁定内存,需要和/etc/elasticsearch/jvm.options关联 6. network.host: 192.168.8.1,127.0.0.1 #监听的ip地址 7. http.port: 9200 #端口号
- 创建数据目录,并修改权限
1. [root@node-1 ~]# mkdir -p /data/elasticsearch 2. [root@node-1 ~]# chown -R elasticsearch.elasticsearch /data/elasticsearch/
- 分配锁定内存:
实验环境一般默认就是1g,所以就不需要更改。
1. [root@node-1 ~]# vim /etc/elasticsearch/jvm.options 2. -Xms1g #分配最小内存 3. -Xmx1g #分配最大内存,官方推荐为物理内存的一半,但最大为32G
- 修改锁定内存后,无法重启,解决方法如下
1. [root@node-1 ~]# systemctl edit elasticsearch 2. [Service] 3. LimitMEMLOCK=infinity 4. 按键F2保存退出 5. [root@node-1 ~]# systemctl daemon-reload 6. [root@node-1 ~]# systemctl restart elasticsearch 7. 启动后稍等一会,需要启动时间,查看端口打开就完成了。 8. [root@node-1 ~]# netstat -anpt | grep 9200 9. tcp6 0 0 192.168.8.1:9200 :::* LISTEN 105678/java 10. tcp6 0 0 127.0.0.1:9200 :::* LISTEN 105678/java
- 查看主机
- 查看单主机
- 查看群集健康状态
http://192.168.8.1:9200/_cluster/health?pretty
查看整个群集状态信息
http://192.168.8.1:9200/_cluster/state?pretty
- 下载es-head插件
- 插件下载地址
https://github.com/mobz/elasticsearch-head
- 下载后,解压,复制crx目录下es-head.crx到桌面改名es-head.crx为es-head.crx.zip。
- 解压es-head.crx.zip到es-head.crx目录,把目录es-head.crx,上传到谷歌浏览器更多工具→扩展程序。
- 勾选开发者模式→加载已解压的扩展程序→选择刚解压的文件即可。
- 打开后修改左上角的IP为本机IP,连接成功即可图形化的显示集群状态,后面配置好集群后就可以查看整个集群的图形化状态。
- 创建索引:vipinfo,类型:users,序号:1,数据部分:...
[root@node-1 ~]# curl -XPUT '192.168.8.1:9200/vipinfo/users/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"name": "guofucheng","age": "45","job": "mingxing"}'
选项说明:
XPUT 创建
XDELETE 删除
扩展内容
curl命令是个功能强大的网络工具,可用来模拟客户端请求,抓取网页、网络监控等。
curl常见用法
get请求:curl urlpost请求:curl -d ‘xxx’ -X POST $urlproxy使用:curl -x ‘ http://127.0.0.1:8080’ $url :指定 HTTP 请求通过 http://127.0.0.1:8080
具体参数
-H: “Content-type: application/json” 添加 HTTP 请求头 curl -H 'Content-type: application/json' $url-G: 把data数据当成get请求的参数发送,用来构造 URL 的查询字符串,与–data-urlencode结合使用-X:指定 HTTP 请求的方法 curl -X POST $url-d: 发送post请求数据,@file表示来自于文件--data-urlencode:发送post请求数据,会对内容进行url编码-u: username:password用户认证-o: 写文件,将服务器的响应保存成文件-v: verbose,打印更详细日志-s, --silent: 关闭一些提示输出,不输出错误和进度信息。-S:只输出错误信息-k:使用SSL时允许不安全的服务器连接-L:跟随跳转链接
XML与YAML
YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用。
YAML的语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于数据结构方面的表达,所以 YAML 更多应用于编写配置文件,其文件一般以 .yml 为后缀。
一、 json与xml的相同点
1. json与xml是一种远程数据传输交换格式。
2. json是轻量级的,xml标记电子文件具有结构性的语言。
二、json与xml的不同点
1.xml缺点:xml是远程数据传输,交换格式数据庞大,比较占宽带,解析异常复杂,不易于维护,同时在不同服务器中的解析格式不同,造成大量数据重复。
2. json优点:因为文件格式压缩,格式简单,占宽带小,易于维护
实例比较
XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
- XML
用XML表示中国部分省市数据如下:
1. <?xml version="1.0" encoding="utf-8"?> 2. <country> 3. <name>中国</name> 4. <province> 5. <name>黑龙江</name> 6. <cities> 7. <city>哈尔滨</city> 8. <city>大庆</city> 9. </cities> 10. </province> 11. <province> 12. <name>广东</name> 13. <cities> 14. <city>广州</city> 15. <city>深圳</city> 16. <city>珠海</city> 17. </cities> 18. </province> 19. <province> 20. <name>台湾</name> 21. <cities> 22. <city>台北</city> 23. <city>高雄</city> 24. </cities> 25. </province> 26. <province> 27. <name>新疆</name> 28. <cities> 29. <city>乌鲁木齐</city> 30. </cities> 31. </province> 32. </country>
- JSON
1. { 2. "name": "中国", 3. "province": [{ 4. "name": "黑龙江", 5. "cities": { 6. "city": ["哈尔滨", "大庆"] 7. } 8. }, { 9. "name": "广东", 10. "cities": { 11. "city": ["广州", "深圳", "珠海"] 12. } 13. }, { 14. "name": "台湾", 15. "cities": { 16. "city": ["台北", "高雄"] 17. } 18. }, { 19. "name": "新疆", 20. "cities": { 21. "city": ["乌鲁木齐"] 22. } 23. }] 24. }