elasticSearch的安装
本次安装采用官网最新版本6.3.2,虚拟机采用centos7,es需要依赖jdk环境且最低版本要求jdk8最好是8u131以上,这里jdk的安装不再赘述,自己搞定哦。
单节点安装
1.官网下载最新版的安装包elasticSearch-6.3.2.tar.gz。
2.root用户下解压
#解压
tar -xvf elasticsearch-6.3.2.tar.gz
得到解压文件夹elasticsearch-6.3.2这里我们定义为${ES_HOME}
3.创建elasticSearch用户并赋予该用户对${ES_HOME}文件夹的可执行权限
#添加用户
adduser elasticSearch
passwd elasticSearch 根据提示输入两次密码即可
#赋予可执行权限
chown -R elasticSearch@elasticSearch /opt/elasticSearch/
其中后面的路径是我的解压路径
4.su - elasticSearch切换到elasticSearch用户,切换到${ES_HOME}/bin目录下然后执行./elasticsearch命令,若在你的机器配置正常的情况下不会出现任何问题,会看到控制台输出started字样代表启动成功,但是当你Ctrl+C退出当前的session时,服务自动停止,这就是es的前台启动方式。
5.es的后台启动方式
./bin/elasticsearch -d -p pid
其中-d参数代表后台启动,-p参数代表将es的进程id输出到文件pid里面。当我们执行上面的命令时,控制台并没有日志输出。默认的日志输出路径是${ES_HOME}/logs下。我们可以通过查看该目录下的日志文件来查看服务是否启动,或者用jps命令查看是否有es的进程id。
6.es启动遇到的问题
因为我提前配置好了系统参数,所以并没有报错,这里推荐一篇博客es安装过程中常见的问题和处理。下面也贴出我的配置。主要涉及两个文件/etc/security/limits.conf
es - nofile 65536
es - nproc 4096
es - memlock unlimited
和/etc/sysctl.conf
vm.max_map_count=655360
并执行命令sysctl -p
7.注意事项
默认我们启动依赖的配置文件是${ES_HOME}/config/elasticsearch.yml。因为我们刚刚启动的时候没有修改配置文件,es启动都是默认的配置参数,如果我们注意看启动日志会发现两个端口9200和9300这两个端口是es启动时默认分配的,9200是对外服务端口,外部所有的API请求都是通过这个端口和es服务器通信的,9300是集群间的通信端口,集群中的各个节点就是通过这个端口来发现当前节点并组成集群的。默认没有配置的情况下,es绑定的host地址是回环测试地址127.0.0.1所以此时外部机器是无法通过虚拟机ip加端口的方式访问es的。此时我们需要在elasticsearch.yml中配置一个参数network.host: ip,这里的ip就是我们的虚拟机ip,注意冒号和ip之间有一个空格。最后在防火墙开放端口9200,9300和9100(后面安装插件会用到),具体命令如下
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload
此时在你的window机的浏览器上输入ip:9200就可以看到es的节点信息了。
集群安装
前面介绍了单节点的安装,集群安装其实很简单,分别找三天虚拟机,在每台机器上分别按照上面单节点的安装方式安装。这里只贴出其中一个节点的配置:
#集群名字,默认不指定是elasticSearch
cluster.name: my_es_cluster
#节点名字
node.name: es_node1
#是否有成为master的资格
node.master: true
#index数据存放的路径
path.data: /var/elasticSearch/node2/data
#日志输出路径,日志文件以集群名为开始
path.logs: /var/elasticSearch/node2/logs
#启动检查,当我们指定了network.host参数不为回环测试地址而是某一个具体的ip地址时,es集群启动时会认为集群是以production mode模式而非development mode模式启动的,会有引导检查,因为频繁的内存交换会降低es的性能,所以这里是锁住jvm内存,使其不与磁盘发生数据交换,注意指定这个参数时,在config文件夹下还有一个配置文件是jvm.options,用来指定es启动所依赖的jvm环境参数。其中两个参数xms和xmx参数很重要,一定要分配够,官网推荐的最优的是26G最多不超过32G,并且这两个参数的值要相等,防止jvm垃圾回收导致的内存重新分配会使下面的这个参数配置失效
bootstrap.memory_lock: true
#绑定的ip地址,对外服务所依赖
network.host: 192.168.190.131
#api请求服务所依赖的端口
http.port: 9200
#集群内各节点通信端口
transport.tcp.port: 9300
#初始化集群中的节点地址
discovery.zen.ping.unicast.hosts: ["192.168.190.131:9300", "192.168.190.130:9300"]
#这个参数很重要,一般的取值规则是master.node/2+1,可以防止脑裂的情况发生
discovery.zen.minimum_master_nodes: 2
#下面这两个参数提钱贴出,是安装head插件锁需要的
http.cors.enabled: true
http.cors.allow-origin: "*"
按照上面的配置分别配置三个节点,需要注意的是对data和logs文件夹需要root权限授权,配置完成后逐个启动,通过查看es的日志输出可以看到三个节点已经组成了一个集群。也可以通过执行如下命令查看:
curl -X GET "ip:9200/_cat/health?v"
看到输出如下(这里我是采用的2个节点):