1、单机安装
首先创建安装路径,并解压安装包到该路径下:
[root@myhost usr]# mkdir elasticsearch
[root@myhost elasticsearch]# tar -zxvf /soft/elasticsearch-5.0.0.tar.gz
由于elasticsearch不能从root用户启动,因此首先需要创建一个用户用于elasticsearch。
[root@myhost /]# groupadd elk
[root@myhost /]# useradd es -g elk -p elasticsearch
[root@myhost /]# passwd es
然后为该路径赋予可普通用户的读写权限:
[root@myhost usr]# chmod -R 777 elasticsearch/
修改config/elasticsearch.yml 用于配置绑定的主机地址和端口号,以便其他机器可以访问。
# ---------------------------------- Network -----------------------------------
network.host: 192.168.9.33
http.port: 9200
然后开放端口号9200:
# firewall-cmd --permanent --zone=public --add-port=9200/tcp
问题解决:
1、解决“max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]”错误
修改打开文件/etc/secuity/limits.conf并在文件末尾添加:
es hard nofile 65536
es soft nofile 65536
其中es是用户名。
2、解决“max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]”错误
需要修改系统内核参数,在“/etc/sysctl.conf”文件中追加如下内容:
vm.max_map_count=262144
然后执行如下命令使内核修改马上生效:
[root@myhost usr]# sysctl -p
vm.max_map_count=262144
然后切换到es用户下直接启动:
[es@myhost bin]$ ./elasticsearch
当出现如下内容,代表成功启动:
[2016-11-05T15:32:52,063][INFO ][o.e.n.Node ] [] initializing ...
[2016-11-05T15:32:52,165][INFO ][o.e.e.NodeEnvironment ] [Ss79CYj] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [190.3gb], net total_space [191.7gb], spins? [unknown], types [rootfs]
[2016-11-05T15:32:52,165][INFO ][o.e.e.NodeEnvironment ] [Ss79CYj] heap size [1.9gb], compressed ordinary object pointers [true]
[2016-11-05T15:32:52,167][INFO ][o.e.n.Node ] [Ss79CYj] node name [Ss79CYj] derived from node ID; set [node.name] to override
[2016-11-05T15:32:52,169][INFO ][o.e.n.Node ] [Ss79CYj] version[5.0.0], pid[18145], build[253032b/2016-10-26T04:37:51.531Z], OS[Linux/3.10.0-327.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_102/25.102-b14]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [aggs-matrix-stats]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [ingest-common]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [lang-expression]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [lang-groovy]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [lang-mustache]
[2016-11-05T15:32:53,560][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [lang-painless]
[2016-11-05T15:32:53,561][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [percolator]
[2016-11-05T15:32:53,561][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [reindex]
[2016-11-05T15:32:53,561][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [transport-netty3]
[2016-11-05T15:32:53,561][INFO ][o.e.p.PluginsService ] [Ss79CYj] loaded module [transport-netty4]
[2016-11-05T15:32:53,562][INFO ][o.e.p.PluginsService ] [Ss79CYj] no plugins loaded
[2016-11-05T15:32:55,810][INFO ][o.e.n.Node ] [Ss79CYj] initialized
[2016-11-05T15:32:55,811][INFO ][o.e.n.Node ] [Ss79CYj] starting ...
[2016-11-05T15:32:56,252][INFO ][o.e.t.TransportService ] [Ss79CYj] publish_address {192.168.8.33:9300}, bound_addresses {192.168.8.33:9300}
[2016-11-05T15:32:56,258][INFO ][o.e.b.BootstrapCheck ] [Ss79CYj] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2016-11-05T15:32:59,549][INFO ][o.e.c.s.ClusterService ] [Ss79CYj] new_master {Ss79CYj}{Ss79CYjUSveOkQMYseQn2Q}{rb_l_uyySHK0wNHoF7tYSw}{192.168.8.33}{192.168.8.33:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2016-11-05T15:32:59,621][INFO ][o.e.h.HttpServer ] [Ss79CYj] publish_address {192.168.8.33:9200}, bound_addresses {192.168.8.33:9200}
[2016-11-05T15:32:59,621][INFO ][o.e.n.Node ] [Ss79CYj] started
[2016-11-05T15:32:59,658][INFO ][o.e.g.GatewayService ] [Ss79CYj] recovered [0] indices into cluster_state
可以从浏览器中访问:http://hostname:9200/
特别说明:ES5.0版本还不支持plugin安装。
2、集群配置
通过如下配置,将可以实现最基本的集群功能,集群的性能提升还需要参考性能调优一节。
Elasticsearch组成集群时,需要的节点数应该是奇数。
首先需要开放每一台安装Elasticsearch节点的端口号9300:
# firewall-cmd --permanent --zone=public --add-port=9300/tcp
然后配置每一个终端节点的配置文件“/config/elasticsearch.yml”,如下所示
cluster.name: elkCluster
node.name: node-33
bootstrap.memory_lock: false
discovery.zen.ping.unicast.hosts: ["192.168.9.32", "192.168.9.33","192.168.9.34"]
discovery.zen.minimum_master_nodes: 1
参数说明:
1、cluster.name
当前es的集群名称,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
2、node.name
当前节点名称,默认会随机自动指定一个名称,可以修改此名称作为当前节点的名称
3、bootstrap.memory_lock
组建集群时,需要将锁定内存功能关闭。
此参数设置为true时,用于锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。
同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
4、discovery.zen.ping.unicast.hosts
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点格式为:
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
5、discovery.zen.minimum_master_nodes
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1(推荐),对于大的集群来说,可以设置大一点的值(2-4),对于三五台节点的集群,必须设为1 。
3、性能调优
通过配置每一个终端节点的配置文件“/config/elasticsearch.yml”,可以实现ES环境的性能提升。
3.1、路径配置
1、path.data
path.data:/path/to/data
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:path.data:/path/to/data1,/path/to/data2
2、path.logs
path.logs:/path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹
3、path.conf
path.conf: /path/to/conf
设置配置文件的存储路径,默认是es根目录下的config文件夹。
4、path.work
path.work: /path/to/work
设置临时文件的存储路径,默认是es根目录下的work文件夹。
5、path.plugins
path.plugins: /path/to/plugins
设置插件的存放路径,默认是es根目录下的plugins文件夹
3.2、节点配置
1、node.master
node.master: true
指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
2、node.data
node.data: true
指定该节点是否存储索引数据,默认为true。
3.3、分片配置
1、index.number_of_shards
index.number_of_shards: 5
设置默认索引分片个数,默认为5片。
2、index.number_of_replicas
index.number_of_replicas: 1
设置默认索引副本个数,默认为1个副本。
3.4、网络配置
1、network.bind_host
network.bind_host: 192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
2、network.publish_host
network.publish_host: 192.168.0.1
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
3、network.host
network.host: 192.168.0.1
这个参数是用来同时设置bind_host和publish_host上面两个参数。
4、transport.tcp.port
transport.tcp.port: 9300
设置节点间交互的tcp端口,默认是9300。
5、transport.tcp.compress
transport.tcp.compress: true
设置是否压缩tcp传输时的数据,默认为false,不压缩。
6、http.port
http.port: 9200
设置对外服务的http端口,默认为9200。
7、http.max_content_length
http.max_content_length: 100mb
设置内容的最大容量,默认100mb
8、http.enabled
http.enabled: false
是否使用http协议对外提供服务,默认为true,开启。
3.5、网关配置
1、gateway.type
gateway.type: local
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。
2、gateway.recover_after_nodes
gateway.recover_after_nodes: 1
设置集群中N个节点启动时进行数据恢复,默认为1。
3、gateway.recover_after_time
gateway.recover_after_time: 5m
设置初始化数据恢复进程的超时时间,默认是5分钟。
4、gateway.expected_nodes
gateway.expected_nodes: 2
设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
3.6、数据恢复配置
1、cluster.routing.allocation.node_initial_primaries_recoveries
cluster.routing.allocation.node_initial_primaries_recoveries: 4
初始化数据恢复时,并发恢复线程的个数,默认为4。
2、cluster.routing.allocation.node_concurrent_recoveries
cluster.routing.allocation.node_concurrent_recoveries: 2
添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
3、indices.recovery.max_size_per_sec
indices.recovery.max_size_per_sec: 0
设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
4、indices.recovery.concurrent_streams
indices.recovery.concurrent_streams: 5
设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
3.7、节点发现配置
1、discovery.zen.ping.timeout
discovery.zen.ping.timeout: 3s
设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
2、discovery.zen.ping.multicast.enabled
discovery.zen.ping.multicast.enabled: false
设置是否打开多播发现节点,默认是true。
3.8、慢查询配置
下面是一些查询时的慢日志参数设置:
index.search.slowlog.level: TRACE
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug:500ms
index.search.slowlog.threshold.fetch.trace: 200ms