elasticSearch

    xiaoxiao2022-07-03  154

    官网https://www.elastic.co/cn/

    linux上安装: 1.安装jdk 2.安装elasticSearch

    上传压缩包解压进入,注意不能用root账户操作elastic 添加分组 groupadd esgroup(组名) 添加用户 useradd esuser(用户名) -g esgrouop(指定用户组) -p 123456(指定密码) 切换为新用户su esuser,同时需要用root用户给当前用户授权可以操作es目录 chown -R esuser:esgroup elasticsearch-6.2.4 后台运行:解压目录下的/bin/下执行./elasticsearch -d 测试连接:curl 127.0.0.1:9200 实现远程访问: 需要对config/elasticsearch.yml进行 配置network.host为es服务器的ip地址和port 会出现3个错误 问题一:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 原因:普通用户执行问题 解决:切换到root用户,编辑/etc/security/limits.conf //文件最后加入 esuser就是上面添加的用户名 esuser soft nofile 65536 esuser hard nofile 65536 esuser soft nproc 4096 esuser hard nproc 4096 问题二:max number of threads [1024] for user [elk] is too low, increase to at least [2048] 原因:普通用户执行操作数低 vim /etc/security/limits.d/20-nproc.conf 修改为 esuser soft nproc 4096 问题三: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 原因:操作系统的vm.max_map_count参数设置太小导致的 解决:切换超级用户,编辑/etc/sysctl.conf 添加 vm.max_map_count=655360 保存退出,执行 sysctl -p 再次启动如果还是失败需要重启电脑或者虚拟机再重启

    安装Head插件

    Head是elasticsearch的集群管理工具,可以用于数据的浏览和查询

    (1)elasticsearch-head是一款开源软件,被托管在github上面,所以如果我们要使用它,必须先安装git,通过git获取elasticsearch-head

    1.查看系统是否已经安装git git --version 2.CentOS7 yum 安装git yum install -y git

    (2)运行elasticsearch-head会用到grunt,而grunt需要npm包管理器,所以nodejs是必须要安装的

    通过安装包安装,可以使用 先下载安装包到 /usr/local路径下 wget https://npm.taobao.org/mirrors/node/v8.0.0/node-v8.0.0-linux-x64.tar.xz 下载完成后解压 tar -xvf node-v8.0.0-linux-x64.tar.xz 重命名为node mv node-v8.1.4-linux-x64 node 配置环境变量 vim /etc/profile 在文件的最后添加 #set for nodejs export NODE_HOME=/usr/local/node export PATH=$NODE_HOME/bin:$PATH 保存退出后执行更新命令 source /etc/profile 如果不生效,重启系统就可以 检测node和npm是否安装成功 node -v npm -v

    (3)elasticsearch5.0之后,elasticsearch-head不做为插件放在其plugins目录下了。

    使用git拷贝elasticsearch-head到本地 cd /usr/local/ git clone git://github.com/mobz/elasticsearch-head.git

    (4)安装elasticsearch-head依赖包 //安装grunt [root@localhost local]# npm install -g grunt-cli

    [root@localhost _site]# cd /usr/local/elasticsearch-head/

    使用淘宝的npm镜像cnpm 因为下载都是国外服务器很慢会掉线,我们需要使用淘宝的npm镜像cnpm。 执行命令: npm install -g cnpm --registry=https://registry.npm.taobao.org 启用淘宝的npm镜像cnpm,注意:启用后当我们要输入npm命令时,就需要输入cnpm 这个过程很慢,慢慢等吧。

    //安装依赖包 [root@localhost elasticsearch-head]# cnpm install

    如果有这个报错信息,找到报错的根源: at Timeout._onTimeout (/nodejs/lib/node_modules/cnpm/node_modules/urllib/lib/urllib.js:849:15) at ontimeout (timers.js:498:11) at tryOnTimeout (timers.js:323:5) at Timer.listOnTimeout (timers.js:290:5) 然后找到报错根源:/nodejs/lib/node_modules/cnpm/node_modules/urllib/lib/urllib.js 修改掉文件里面的常量 TIMEOUT、TIMEOUTS 的 5s 为 10s

    (5)修改Gruntfile.js

    [root@localhost _site]# cd /usr/local/elasticsearch-head/ [root@localhost elasticsearch-head]# vi Gruntfile.js 在connect-->server-->options下面添加:hostname:’*’,允许所有IP可以访问

    (6)修改elasticsearch-head默认连接地址

    [root@localhost elasticsearch-head]# cd /usr/local/elasticsearch-head/_site/ [root@localhost _site]# vi app.js 将this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";中的localhost修改成你es的服务器地址

    (7)配置elasticsearch允许跨域访问

    打开elasticsearch的配置文件elasticsearch.yml,在文件末尾追加下面两行代码即可: http.cors.enabled: true http.cors.allow-origin: "*"

    (8)打开9100端口

    [root@localhost elasticsearch-head]# firewall-cmd --zone=public --add-port=9100/tcp --permanent 重启防火墙 [root@localhost elasticsearch-head]# firewall-cmd --reload

    (9)启动elasticsearch

    (10)启动elasticsearch-head

    [root@localhost _site]# cd /usr/local/elasticsearch-head/ [root@localhost elasticsearch-head]# node_modules/grunt/bin/grunt server

    (11)访问elasticsearch-head

    ip地址:9100

    安装Kibana ——-比较常用的es客户端

    Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据

    (1)下载Kibana

    https://www.elastic.co/downloads/kibana

    (2)解压缩,并把解压后的目录命名为kibana

    (3)编辑kibana配置文件kibana下的config下的kibana.yml

    将server.host,elasticsearch.url修改成所在服务器的ip地址

    (4)开启5601端口

    firewall-cmd --permanent --zone=public --add-port=5601/tcp firewall-cmd –-reload

    (5)启动Kibana

    [root@localhost /]# /usr/local/kibana/bin/kibana 浏览器访问:http://ip:5601

    安装中文分词器

    (1)下载中文分词器

    https://github.com/medcl/elasticsearch-analysis-ik 下载elasticsearch-analysis-ik-master.zip

    (2)解压elasticsearch-analysis-ik-master.zip

    unzip elasticsearch-analysis-ik-master.zip

    (3)进入elasticsearch-analysis-ik-master,编译源码

    mvn clean install -Dmaven.test.skip=true 因为使用maven编译所以要先装maven centos 7 安装maven 下载地址 http://maven.apache.org/download.cgi 版本 apache-maven-3.3.9 -bin.tar.gz tar -xvf apache-maven-3.3.9-bin.tar.gz mv apache-maven-3.3.9 /usr/local/apache-maven 文件存放好之后,设置环境变量,打开etc/profile,在文件中加入下边的代码: 写入环境变量 vi /etc/profile 最后一行加入 这个前提是安装了java1.8 export JAVA_HOME=/usr/local/jdk1.8 export MAVEN_HOME=/usr/local/apache-maven export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH 再执行 source /etc/profile

    (4)在es的plugins文件夹下创建目录ik

    (5)将编译后生成的elasticsearch-analysis-ik-版本.zip移动到ik下,并解压

    (6)解压后的内容移动到ik目录下 多了一层目录所有要把解压后的文件移出到ik下.

    单机版es推荐创建索引设置 因为只有一台服务器所以没有备用,挂了数据全部丢失重新导入数据 PUT /lib/ {

    “settings”:{ “index”:{ “number_of_shards”: 1, “number_of_replicas”: 0 } } } 集群版es配置需要修改配置文件(最少两台,最好3台) #集群的名称 cluster.name: my-application #节点名称,不能重复 node.name: node-1 #指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂 了就会重新选举master node.master: true #本机的es服务地址 network.host: 192.168.88.100 #设置对外服务的http端口,默认为9200 http.port: 9200

    设置节点间交互的tcp端口,默认是9300

    transport.tcp.port: 9300 #Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。 #这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host #(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。 #请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1] discovery.zen.ping.unicast.hosts: [“192.168.88.100:9300”,“192.168.88.111:9300”] #允许跨域访问 http.cors.enabled: true http.cors.allow-origin: “*” #允许该节点存储数据(默认开启) node.data: true #设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap. 什么时候会swapping呢?一般普通硬盘每秒大概90次,实际业务每秒2千多次了就可能出现内存交换到磁盘。这里需要额外设置下系统配置文件 需要切换到root用户:(以下1.2.3.不在此文件内操作 1,修改/etc/security/limits.conf

    soft nofile 65536hard nofile 65536soft nproc 32000hard nproc 32000hard memlock unlimitedsoft memlock unlimited 2,修改/etc/systemd/system.conf 修改下面几项 DefaultLimitNOFILE=65536 DefaultLimitNPROC=32000 DefaultLimitMEMLOCK=infinity 3,最后 /bin/systemctl daemon-reload 执行下即可 ) bootstrap.memory_lock: true #如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 -为了避免脑裂, 集群节点数最少为 半数+1 #意思是当节点1是master的时候如果访问量大可能会出现无反应的情况,集群以为他死了就把节点2升级为master,结果过了一段时间后节点1正常了此时就会出现两个master,所以一般需要3台服务器,设置更换master的时候需要两台以上确定.如果是两台服务器把下面这行注释掉 discovery.zen.minimum_master_nodes: 2 这里再说几点对于小系统应用es的优化和建议:

    第一:建议用SSD,提高性能; 第二:新建索引的时候 分片设置成1,备份设置成0,能有效的降低IOPS;(分片多,备份多了,一直在进行磁盘操作,以及内存也紧张,弄不好,服务器配置低的话,直接炸了);

    最新回复(0)