今天我们来安装一下elasticsearch,我们采用RPM包安装的方式来,版本为6.5.4。系统为centos7.5版本。
1、首先设置系统环境
1)编辑/etc/sysctl.conf文件添加下面一行内容
vm.max_map_count=262144
这个参数会影响java线程数量,用于限制一个进程可以拥有的虚拟内存区域的大小。系统默认是65530,可以修改更高的值
添加内容完成后使用命令立即并永久生效
sysctl -p
2)编辑/etc/security/limits.conf文件添加一下内容:
#修改最大文件描述符
* soft nofile 65535
* hard nofile 65535
#修改最大线程数
* soft nproc 4096
* hard nproc 4096
#最大锁定内存地址空间
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
2、安装java环境
1)下载jdk。至少1.7版本以上,这里使用jdk1.8版本。可以选择使用oracle JDK或者Open JDK
2)我们这里直接使用yum一键安装来完成
yum install java-1.8.0-openjdk.x86_64
5)最后执行java -version命令看看是否立即生效:
[root@: /usr/local]#java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
3、安装elasticsearch的RPM包
[root@:vg_adn_tidbCkhsTest /usr/local/src]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@:vg_adn_tidbCkhsTest /usr/local/src]#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm
--2019-01-14 14:57:17-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.239.197, 54.225.214.74, 54.225.221.128, ...
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.239.197|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 113304673 (108M) [application/octet-stream]
Saving to: ‘elasticsearch-6.5.4.rpm’ 100%[=================================================================================================>] 113,304,673 73.5MB/s in 1.5s 2019-01-14 14:57:19 (73.5 MB/s) - ‘elasticsearch-6.5.4.rpm’ saved [113304673/113304673] [root@:vg_adn_tidbCkhsTest /usr/local/src]#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm.sha512
--2019-01-14 14:57:26-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm.sha512
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.237.188, 107.21.239.197, 54.225.214.74, ...
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.237.188|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 153 [application/octet-stream]
Saving to: ‘elasticsearch-6.5.4.rpm.sha512’ 100%[=================================================================================================>] 153 --.-K/s in 0s 2019-01-14 14:57:26 (29.0 MB/s) - ‘elasticsearch-6.5.4.rpm.sha512’ saved [153/153] [root@:vg_adn_tidbCkhsTest /usr/local/src]#sha512sum -c elasticsearch-6.5.4.rpm.sha512
elasticsearch-6.5.4.rpm: OK
[root@:vg_adn_tidbCkhsTest /usr/local/src]#rpm -ivh elasticsearch-6.5.4.rpm
Preparing... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Updating / installing...
1:elasticsearch-0:6.5.4-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch
到最好一部我们看到已经安装成功了。
4、配置elasticsearch服务配置文件
1)修改/etc/sysconfig/elasticsearch文件内容
ES_JAVA_OPTS="-Xms4g -Xmx4g"
MAX_LOCKED_MEMORY=unlimited
替换4g为总内存的一半(Elasticsearch官方建议是主机总内存的一半)
2)使用命令systemctl edit elasticsearch,此时会进入编辑模式,输入一下内容后保存
[Service]
LimitMEMLOCK=infinity
5、配置elasticsearch文件,在/etc/elasticsearch目录下。
# cat /etc/elasticsearch/elasticsearch.yml cluster.name: mylab #集群名称,只有cluster.name相同时,节点才能加入集群。请设置为具有描述性的名字。不建议在不同环境中使用相同的集群名。
node.name: mylabb01 #节点描述名称,默认情况下,Elasticsearch将使用随机生成的UUID的前7个字符作为节点id。设为服务器的主机名 node.name: ${HOSTNAME}
node.attr.rack: r1 #指定节点的部落属性,机架位置,比集群范围更大。
path.data: /var/lib/elasticsearch #Elasticsearch的数据文件存放目录 如果是默认位置,在将Elasticsearch升级到新版本时,很可能会把数据删除。
path.logs: /var/log/elasticsearch #日志目录
bootstrap.memory_lock: true #启动后锁定内存,禁用swap交换,提高ES性能。
network.host: 0.0.0.0 #指定监听的地址
http.port: 9200 #监听的WEB端口
discovery.zen.ping.unicast.hosts: ["IP:9300"]: #默认网络配置中,Elasticsearch将绑定到回环地址,并扫描9300-9305端口,试图连接同一台服务器上的其他节点,可以自动发现并加入集群。
- 10.0.0.46:9300 #此端口为TCP传输端口,用于集群内节点发现、节点间信息传输、ES Java API也是通过此端口传输数据,transport.tcp.port定义。9200为HTTP端口。
- host1.vtlab.io
discovery.zen.minimum_master_nodes: 2 #为防止数据丢失,discovery.zen.minimum_master_nodes设置至关重要,主节点的最小选举数。避免脑裂,应将此值设为(master_eligible_nodes / 2) + 1,换言之,如果有3个节点,(3/2)+1 or 2
#以下选项仅在完全重启集群时生效
#本地网关模块在整个群集重新启动时存储群集状态和分片数据。
#以下静态设置必须在每个主节点上设置,控制新选择的主节点在试图恢复集群状态和集群数据之前应该等待多长时间:
gateway.expected_nodes: 0 #集群中预期的(数据或主)节点数量。一旦加入集群的节点数量达到预期,本地碎片的恢复就会开始。默认值为0
gateway.expected_master_nodes: 0 #集群中预期的主节点数量。一旦加入集群的主节点数量达到预期,本地碎片的恢复就会开始。默认值为0
gateway.expected_data_nodes: 0 #集群中预期的数据节点数量。一旦预期的数据节点数量加入集群,本地碎片的恢复就会开始。默认值为0
gateway.recover_after_time: 5 #如果没有达到预期的节点数量,则恢复过程将等待配置的时间量,然后再尝试恢复。如果配置了一个expected_nodes设置,则默认值为5m。
gateway.recover_after_nodes: 1 #只要有这么多数据或主节点加入集群,就可以恢复。
gateway.recover_after_master_nodes: 1 #只要有这么多主节点加入集群,就可以恢复。
gateway.recover_after_data_nodes: 1 #只要有这么多数据节点加入集群,就可以恢复。
action.destructive_requires_name: true #禁用通过api以通配符删除所有索引。删除索引时需要指定被删除的索引名称。
6、载入服务
systemtl daemon-reload
7、启动节点
systemctl start elasticsearch
8、检查是否启动成功
[root@:vg_adn_tidbCkhsTest /etc/elasticsearch]#curl http://172.31.26.133:9200
{
"name" : "node-1",
"cluster_name" : "my-application",
"cluster_uuid" : "dc6CndO5TzS8T1GcBXiQKg",
"version" : {
"number" : "6.5.4",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "d2ef93d",
"build_date" : "2018-12-17T21:17:40.758843Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
额外补充,我们对配置文件进行解析:
(1)cluster.name: esbigdata
配置elasticsearch集群名称,默认是elasticsearch。这里修改为esbigdata,elasticsearch会自动发现在同一网段下的集群名为esbigdata的主机,如果在同一网段下有多个集群,就可以通过这个属性来区分不同的集群。线上生产环境时建议更改。
(2)node.name: server1
节点名,任意指定一个即可,这里是server1,我们这个集群环境中有三个节点,分别是server1、server2和server3,记得根据主机的不同,要修改相应的节点名称。
(3)node.master: true
指定该节点是否有资格被选举成为master,默认是true,elasticsearch集群中默认第一台启动的机器为master角色,如果这台服务器宕机就会重新选举新的master。我们这个集群环境中,定义了server1和server3两个master节点,因此这两个节点上node.master的值要设置为true。
(4)node.data: true
指定该节点是否存储索引数据,默认为true,表示数据存储节点,如果节点配置node.master:false并且node.data:<br/>false,则该节点就是client node。这个client node类似于一个“路由器”,负责将集群层面的请求转发到主节点,将数据相关的请求转发到数据节点。在我们这个集群环境中,定义了server1、server2和server3均为数据存储节点,因此这三个节点上node.data的值要设置为true。
(5)path.data:/data1/elasticsearch, /data2/elasticsearch
设置索引数据的存储路径,默认是elasticsearch根目录下的data文件夹,这里自定义了两个路径,可以设置多个存储路径,用逗号隔开。
(6)path.logs: /usr/local/elasticsearch/logs
设置日志文件的存储路径,默认是elasticsearch根目录下的logs文件夹
(7)bootstrap.memory_lock: true
此配置项一般设置为true用来锁住物理内存。在linux下物理内存的执行效率要远远高于虚拟内存(swap)的执行效率,因此,当JVM开始使用swap内存时elasticsearch的执行效率会降低很多,所以要保证它不使用swap,保证机器有足够的物理内存分配给elasticsearch。同时也要允许elasticsearch的进程可以锁住物理内存,linux下可以通过“ulimit -l”命令查看最大锁定内存地址空间(memlock)是不是unlimited,这个参数在之前系统调优的时候已经设置过了。
(8)network.host: 0.0.0.0
此配置项是network.publish_host和network.bind_host两个配置项的集合,network.bind_host用来设置elasticsearch提供服务的IP地址,默认值为0.0.0.0,此默认配置不太安全,因为如果服务器有多块网卡(可设置多个IP,可能有内网IP,也可能有外网IP),那么就可以通过外网IP来访问elasticsearch提供的服务,显然,elasticsearch集群在外网访问的话将非常不安全,因此,建议将network.bind_host设置为内网IP地址比较好。
network.publish_host用来设置elasticsearch集群中该节点和其它节点间交互通信的IP地址,一般设置为该节点所在的内网IP地址即可。需要保证可以和集群中其它节点进行通信。
在elasticsearch新版本中,增加了network.host配置项,此配置项用来同时设置bind_host和publish_host上面两个参数,根据上面的介绍,此值设置为服务器的内网IP地址即可。也就是设置bind_host和publish_host为同一个IP地址。
(9)http.port: 9200
设置elasticsearch对外提供服务的http端口,默认为9200。其实,还有一个端口配置选项transport.tcp.port,此配置项用来设置节点间交互通信的TCP端口,默认是9300
(10)discovery.zen.minimum_master_nodes: 1
配置当前集群中最少的master节点数,默认为1,也就是说,elasticsearch集群中master节点数不能低于此值,如果低于此值,elasticsearch集群将停止运行。在三个以上节点的集群环境中,建议配置大一点的值,推荐2至4个为好。
(11)discovery.zen.ping.unicast.hosts:[172.16.213.37:9300,172.16.213.78:9300]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。这里需要注意,master节点初始列表中对应的端口是9300。即为集群交互通信端口。
------------------------------------------------------------更新----------------------------------------------------------------
1)启动报错:
$/usr/local/elasticsearch/bin/elasticsearch -d
Java HotSpot(TM) -Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied
这是因为elasticsearch的logs目录下的一个日志文件没有权限所致,这个日志文件不知ES的访问、错误配置,而是在ES的安装目录下的一个logs目录,里面的gc.log没有权限所致,默认应该是“-rw-rw-r--”,所以解决问题最简单的方法是删除了,然后重启es集群即可,这个日志文件ES会自动创建。