安装部署
单机部署
-
去Elastic官网 Download Elastic Products | Elastic ,下载页有所有Elastic的产品
-
解压tar包
将tar包上传到Linux服务器 /usr/appdata/ 路径下 tar -zxvf elasticsearch-6.5.4.tar.gz
-
主要配置文件详解
# 存放数据的路径 path.data: /usr/appdata/elasticsearch-6.5.4/data # 日志路径 path.logs: /usr/appdata/elasticsearch-6.5.4/logs # 设置为 0.0.0.0 可以使用外网访问, network.host: 0.0.0.0 # 配置es端口 http.port: 9200 # elasticsearch的集群名称,默认是elasticsearch cluster.name: my-application # 节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理 node.name: node-1 # 集群间通讯端口 transport.tcp.port: 9300 # 指定该节点是否有资格被选举成为master结点,默认是true,如果原来的master宕机会重新选举新的master node.master: true # 是否作为数据结点存储数据,默认为true node.data: true # 设置集群中master节点的初始列表 discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301", "0.0.0.0:9302"] # 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些 discovery.zen.ping.timeout: 3s # 主结点数量的最少值,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2 discovery.zen.minimum_master_nodes: 1 #设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据 bootstrap.memory_lock: true # 单机允许的大存储结点数,通常单机启动一个结点建议设置为1,开发环境如果单机启动多个节点可设置大于1. node.max_local_storage_nodes: 1 #开启cors跨域访问支持 http.cors.enabled: true # 跨域访问允许的域名地址,(以下配置允许所有域名,使用用正则) http.cors.allow-origin: /.*/ 注意:将config/elasticsearch.yml另存为utf-8编码格式
-
修改配置文件
vim /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.yml path.data: /usr/appdata/elasticsearch-6.5.4/data path.logs: /usr/appdata/elasticsearch-6.5.4/logs network.host: 0.0.0.0 http.port: 9200 在Elasticsearch中,如果network.host不是localhost或者127.0.0.1的,就会认为是生产环境,对环境的要求比较高,测试环境不一定能够满足,需要修改2处配置, 1:修改jvm启动参数 (根据自己机器情况修改) vim /usr/appdata/elasticsearch-6.5.4/config/jvm.options -Xms128m -Xmx128m 2:单个进程中的大线程数 vim /etc/sysctl.conf vm.max_map_count=655360 执行命令 sysctl -p 生效
-
创建一个用户(es不能使用root用户启动)
创建用户命令 adduser elsearch passwd airport 给用户授权 cd /usr/appdata/elasticsearch-6.5.4/bin chmod +x elasticsearch chown elsearch /usr/appdata/elasticsearch-6.5.4 -R
-
启动
切换用户 su elsearch cd /usr/local/appdata/elasticsearch-6.5.4/bin/ ./elasticsearch 或 ./elasticsearch -d(后台启动) 访问 http://ip:9200 看到es的相应版本信息就说明启动成功了
-
问题解决
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 意思是说你的进程不够用了 解决方案: 切到root 用户执行命令 vi /etc/security/limits.conf 在文件的末尾添加下面的参数值: * soft nofile 65536 * hard nofile 131072 * soft nproc 65536 * hard nproc 65536 * hard memlock unlimited * soft memlock unlimited 前面的*符号必须带上,然后重新启动就可以了。执行完成后可以使用命令 ulimit -n 查看进程数 [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 需要修改系统变量 单个进程中的大线程数 解决方案:切换到root用户执行命令 vi /etc/sysctl.conf 增加配置值: vm.max_map_count=655360 执行命令 sysctl -p 然后重新启动ES服务 [3]: ERROR: [1] bootstrap checks failed [1]: memory locking requested for elasticsearch process but memory is not locked 修改/etc/systemd/system.conf DefaultLimitNOFILE=65536 DefaultLimitNPROC=32000 DefaultLimitMEMLOCK=infinity 执行以下操作,立即生效 /bin/systemctl daemon-reload [4]: [elsearch@pkx-eureka appdata]$ ./elasticsearch-6.5.4/bin/elasticsearch -d Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied [elsearch@pkx-eureka appdata]$ Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.keystore Likely root cause: java.nio.file.AccessDeniedException: /usr/appdata/elasticsearch-6.5.4/config/elasticsearch.keystore at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) at java.nio.file.Files.newByteChannel(Files.java:361) at java.nio.file.Files.newByteChannel(Files.java:407) at org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77) at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:215) at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:230) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:295) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) 上面的错误表示没有权限 chown elsearch /usr/appdata/elasticsearch-6.5.4 -R the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured ERROR: Elasticsearch did not exit normally - check the logs at /usr/appdata/elasticsearch-7.13.4/logs/elasticsearch.log 配置以下参数 node.name: node-1 cluster.initial_master_nodes: ["node-1"]
关闭防火墙
查看防火墙状态 systemctl status firewalld.service 关闭防火墙 systemctl stop firewalld.service
集群部署
-
集群概念
-
节点
集群由多个节点组成,每台物理服务器为一个节点(一台物理服务器只部署一个es进程)
-
分片
当文档量很大时,为了提高es的处理能力、容错能力、高可用能力,将索引分成若干分片,每个分片放在不同的节点上,这样多台服务器可以同时对外提供索引及搜索服务。一个搜索请求过来,会分别从各各分片去查询,将查询到的数据合并返回给用户
-
副本
为了提高ES的高可用同时也为了提高搜索的吞吐量,我们将分片复制一份或多份存储在其它的服务器,这样即使当 前的服务器挂掉了,拥有副本的服务器照常可以提供服务
-
主节点
一个集群中会有一个或多个主结点,主结点的作用是集群管理,比如增加节点,移除节点等,主结点挂掉后ES会重 新选一个主结点。
-
节点转发
每个结点都知道其它结点的信息,我们可以对任意一个结点发起请求,接收请求的结点会转发给其它结点查询数 据。
-
-
节点的角色
-
主节点(master)
主节点主要用于集群的管理,比如新增结点、分片分配、索引的新增和删除等
-
data节点
data 节点上保存了数据分片,它负责索引和搜索操作
-
client节点
client 节点仅作为请求客户端存在,client的 作用也作为负载均衡器,client 节点不存数据,只是将请求均衡转发到其它结点。
-
-
节点配置
node.master: #是否允许为主结点 node.data: #允许存储数据作为数据结点 node.ingest: #是否允许成为协调节点 四种组合方式: master=true,data=true:即是主结点又是数据结点 master=false,data=true:仅是数据结点 master=true,data=false:仅是主结点,不存储数据 master=false,data=false:即不是主结点也不是数据结点,此时设置ingest为true表示它是一个客户端。
-
集群配置
-
节点1配置(172.16.10.101)
path.data: /usr/local/appdata/elasticsearch-6.5.4/data path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs network.host: 0.0.0.0 http.port: 9200 http.cors.enabled: true http.cors.allow‐origin: /.*/ cluster.name: my-application node.name: node-1 transport.tcp.port: 9300 node.master: true node.data: true node.ingest: true discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"] discovery.zen.minimum_master_nodes: 1 node.max_local_storage_nodes: 1
-
节点2配置(172.16.10.102)
path.data: /usr/local/appdata/elasticsearch-6.5.4/data path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs network.host: 0.0.0.0 http.port: 9200 http.cors.enabled: true http.cors.allow‐origin: /.*/ cluster.name: my-application node.name: node-2 transport.tcp.port: 9300 node.master: true node.data: true node.ingest: true discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"] discovery.zen.minimum_master_nodes: 1 node.max_local_storage_nodes: 1
-
节点3配置(172.16.10.103)
path.data: /usr/local/appdata/elasticsearch-6.5.4/data path.logs: /usr/local/appdata/elasticsearch-6.5.4/logs network.host: 0.0.0.0 http.port: 9200 http.cors.enabled: true http.cors.allow‐origin: /.*/ cluster.name: my-application node.name: node-3 transport.tcp.port: 9300 node.master: true node.data: true node.ingest: true discovery.zen.ping.unicast.hosts: ["172.16.10.101:9300", "172.16.10.102:9300", "172.16.10.103:9300"] discovery.zen.minimum_master_nodes: 1 node.max_local_storage_nodes: 1
-