一、ElasticSearch
1.1准备工作
安装Centos7、建议内存2G以上、安装java1.8环境
1.2ElasticSerach单机安装
后续会涉及到集群的部署,但这里先不考虑,所以修改ip地址我就省略先了。
1>先上传到服务器上面,最好不要直接放在根目录下面,创建一个文件夹最好,我是创建了一个opt的目录,然后直接上传;
2>上传以后,先看看文件是否有权限,如果没有,则用root用户授权
Chmod 777 -R elasticsearch-6.3.1
3>赋权后解压 tar – zxvf elasticsearch-6.3.1.tar.gz
4>然后配置elasticSearch.yml、jvm.Opitons
jvm.Opitons中配置es能够使用jvm内存大小
(这上面默认的是4G,下面默认的是2G,但是在测试的时候或者说公司的需求量没那么大的时候可以不用设置那么大,我设置的是512m)
elasticSearch.yml中配置es的host地址(配成本机地址,允许访问)
这里是重点了,我昨天配的时候像这样正常配置一直会报出一个
org.elasticsearch.bootstrap.StartupException:BindTransportException[Failed to bind to [9300]]; nested: BindException[无法指定被请求的地址];
atorg.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.cli.Command.main(Command.java:88)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)~[elasticsearch-5.4.1.jar:5.4.1]
Caused by:org.elasticsearch.transport.BindTransportException: Failed to bind to [9300]
atorg.elasticsearch.transport.TcpTransport.bindToPort(TcpTransport.java:769)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.transport.TcpTransport.bindServer(TcpTransport.java:734)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:173)~[?:?]
atorg.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.transport.TransportService.doStart(TransportService.java:196)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.node.Node.start(Node.java:686) ~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:277)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:359)~[elasticsearch-5.4.1.jar:5.4.1]
atorg.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123)~[elasticsearch-5.4.1.jar:5.4.1]
...6 more
Caused by: java.net.BindException: 无法指定被请求的地址
atsun.nio.ch.Net.bind0(Native Method) ~[?:?]
atsun.nio.ch.Net.bind(Net.java:433) ~[?:?]
atsun.nio.ch.Net.bind(Net.java:425) ~[?:?]
atsun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)~[?:?]
atio.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)~[?:?]
atio.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554)~[?:?]
atio.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1258)~[?:?]
atio.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)~[?:?]
atio.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)~[?:?]
atio.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:980)~[?:?]
atio.netty.channel.AbstractChannel.bind(AbstractChannel.java:250) ~[?:?]
atio.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:365) ~[?:?]
atio.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)~[?:?]
atio.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)~[?:?]
atio.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462) ~[?:?]
atio.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)~[?:?]
atjava.lang.Thread.run(Thread.java:748) [?:1.8.0_161]
的错误,百度了下只是说需要我把把文件中的这两个地方的IP地址改成ES所在服务器的IP地址即可。但是其实这还是不行,昨天问了一下朋友怎么搭建,终于把它给解决了,如果出现像我这样的问题可以这样修改
network.host: 0.0.0.0(这里这样填)
network.publish_host: xxxxxxx(这里填你对外开放的ip地址)
http.port: 9200(这里前面的#去掉,这是外面访问的ip端口)
transport.tcp.port: 9300(这里我不太确定需要不,但是配上总没错)
discovery.zen.ping.unicast.hosts: [“xxxx(这里填写你上面的对外开放ip):9300”](也可以不用写,按照原来的就好。当时可能配错了,但是能启动我就没在管它了,如果有知道的可以告知一下!)
5>[root@localhost elasticserach]# cd elasticsearch-6.3.1/bin
[root@localhost bin]# ./elasticsearch
如果直接启动,会报错
说启动不能用root用户启动,我们需要改一个非root的用户;
6>adduser xx(自己取一个名字,我的叫es 简单省事),你可以设置密码,也可以授权给某个用户只能干什么,这一般的正规公司都会做的,我由于是小公司,所以我直接全部赋权了,这步应该可以省略了。。。。。
7>再次用es用户来启动,还是出错了:会报错(linux的默认线程数、最大文件数、最大内存数都不够)
8>修改linux的配置(配合es的启动需求)
两处修改
A修改linux的limits配置文件,设置内存线程和文件
nofile - 打开文件的最大数目
noproc - 进程的最大数目
soft 指的是当前系统生效的设置值
hard 表明系统中所能设定的最大值
配置一定要在root用户的权限下配置,要不然是没有权限的
B修改linux的sysctl配置文件,配置系统使用内存
vm.max_map_count=655360,因此缺省配置下,单个jvm能开启的最大线程数为其一半
file-max是设置 系统所有进程一共可以打开的文件数量
9>设置完这些,我们就可以用es用户来启动下了,
然后查看是否成功, curlXXX(配置的对外开放ip)
这个样子就说明成功了,在浏览器上面输入后面的ip地址加端口
也是如此,那么恭喜你,第一步的单机安装已经解决了!
第一次写这个很多头绪没有搞清楚,大家多多包涵,这为了给大家当个错误的表率也希望遇到这些问题的同学能够有所帮助!