Docker安装elasticsearch
启动注意2点,1是内存,2是线程数(此处进行简单安装,后面会详细补充es文档)
1 1 [root@topcheer ~]# docker images 2 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 3 elasticsearch latest 874179f19603 12 days ago 771 MB 4 4 springbootdemo4docker latest cd13bc7f56a0 2 weeks ago 678 MB 5 5 docker.io/tomcat latest ee48881b3e82 4 weeks ago 506 MB 6 6 docker.io/rabbitmq latest a00bc560660a 4 weeks ago 147 MB 7 7 docker.io/centos latest 67fa590cfc1c 7 weeks ago 202 MB 8 8 docker.io/redis latest f7302e4ab3a8 8 weeks ago 98.2 MB 9 9 docker.io/rabbitmq 3.7.16-management 3f92e6354d11 2 months ago 177 MB 1010 docker.io/elasticsearch 6.8.0 d0b291d7093b 4 months ago 895 MB 1111 docker.io/hello-world latest fce289e99eb9 9 months ago 1.84 kB 1212 docker.io/java 8 d23bdf5b1b1b 2 years ago 643 MB 1313 [root@topcheer ~]# docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name myES d0b291d7093b 1414 5c4e5ffac1630f57260f739d200050535daf3ab10b1256441400a04fef70434b 1515 [root@topcheer ~]# docker ps -l 1616 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1717 5c4e5ffac163 d0b291d7093b "/usr/local/bin/do..." 6 seconds ago Up 5 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp myES 1818 [root@topcheer ~]# docker ps -l 1919 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2020 5c4e5ffac163 d0b291d7093b "/usr/local/bin/do..." About a minute ago Exited (78) 34 seconds ago myES 2121 [root@topcheer ~]# docker logs -tf --tail 200 5c4e5ffac163 2222 2019-10-11T15:33:21.335717000Z OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. 23 24
发现ES容器停止了
11 2019-10-11T15:34:04.379276000Z [2019-10-11T15:34:04,372][INFO ][o.e.t.TransportService ] [om43m7F] publish_address {172.17.0.4:9300}, bound_addresses {[::]:9300} 22 2019-10-11T15:34:04.432432000Z [2019-10-11T15:34:04,393][INFO ][o.e.b.BootstrapChecks ] [om43m7F] bound or publishing to a non-loopback address, enforcing bootstrap checks 33 2019-10-11T15:34:04.441501000Z ERROR: [1] bootstrap checks failed 44 2019-10-11T15:34:04.441844000Z [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 55 2019-10-11T15:34:04.497725000Z [2019-10-11T15:34:04,454][INFO ][o.e.n.Node ] [om43m7F] stopping ... 66 2019-10-11T15:34:04.559075000Z [2019-10-11T15:34:04,557][INFO ][o.e.n.Node ] [om43m7F] stopped 77 2019-10-11T15:34:04.559461000Z [2019-10-11T15:34:04,557][INFO ][o.e.n.Node ] [om43m7F] closing ... 88 2019-10-11T15:34:04.580693000Z [2019-10-11T15:34:04,577][INFO ][o.e.n.Node ] [om43m7F] closed 99 2019-10-11T15:34:04.584525000Z [2019-10-11T15:34:04,581][INFO ][o.e.x.m.p.NativeController] [om43m7F] Native controller process has stopped - no new native processes can be started
解决:
在宿主机执行:
sysctl -w vm.max_map_count=262144
原因:
vm.max_map_count参数,是允许一个进程在VMAs拥有最大数量(VMA:虚拟内存地址, 一个连续的虚拟地址空间),当进程占用内存超过时, 直接OOM。
elasticsearch占用内存较高。官方要求max_map_count需要配置到最小262144。
重新启动:
1http://192.168.180.113:9200/_cat/health?v 2epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 31570808429 15:40:29 docker-cluster green 1 1 0 0 0 0 0 0 - 100.0%

Springboot整合
pom.xml
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 4 </dependency>
配置文件
11 spring 22 data: 33 elasticsearch: 44 cluster-nodes: 192.168.180.113:9300 55 cluster-name: docker-cluster
启动类(采用第二种)
1 1 /** 2 2 * SpringBoot默认支持两种技术来和ES交互; 3 3 * 1、Jest(默认不生效) 4 4 * 需要导入jest的工具包(io.searchbox.client.JestClient) 5 5 * 2、SpringData ElasticSearch【ES版本有可能不合适】 6 6 * 版本适配说明:https://github.com/spring-projects/spring-data-elasticsearch 7 7 * 如果版本不适配:2.4.6 8 8 * 1)、升级SpringBoot版本 9 9 * 2)、安装对应版本的ES 1010 * 1111 * 1)、Client 节点信息clusterNodes;clusterName 1212 * 2)、ElasticsearchTemplate 操作es 1313 * 3)、编写一个 ElasticsearchRepository 的子接口来操作ES; 1414 * 两种用法:https://github.com/spring-projects/spring-data-elasticsearch 1515 * 1)、编写一个 ElasticsearchRepository 1616 */ 1717 @SpringBootApplication 1818 public class Springboot03ElasticApplication { 1919 2020 public static void main(String[] args) { 2121 SpringApplication.run(Springboot03ElasticApplication.class, args); 2222 } 2323 }
发现启动项目报错:
nested exception is java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
我网上查询了一下,有人是是因为整合了Redis的原因。但是我把Redis相关的配置去掉后,问题还是没有解决,最后有人说是因为netty冲突的问题。 也有人给出了解决方式就是在项目初始化钱设置一下一个属性。在初始化之前加上System.setProperty("es.set.netty.runtime.available.processors", "false");
11 @Configuration 22 public class ElasticSearchConfig { 33 @PostConstruct 44 void init() { 55 System.setProperty("es.set.netty.runtime.available.processors", "false"); 66 } 77 }
Bo类
1 1 @Document(indexName = "topcheer",type = "book" ) 2 2 @Slf4j 3 3 @Data 4 4 @Builder 5 5 public class Book implements Serializable { 6 6 7 7 private Integer id; 8 8 private String name; 9 9 private String author; 1010 1111 public Book(String name, String author) { 1212 this.name = name; 1313 this.author = author; 1414 } 1515 1616 public Book(Integer id, String name, String author) { 1717 this.id = id; 1818 this.name = name; 1919 this.author = author; 2020 } 2121 2222 public Book() { 2323 } 2424 }
Repository类
11 public interface BookRepository extends ElasticsearchRepository<Book,Integer> { 22 33 //参照 44 // https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/ 55 public List<Book> findByNameLike(String name); 66 77 }
测试类:
1 1 @Autowired 2 2 BookRepository bookRepository; 3 3 4 4 @Test 5 5 public void test02() { 6 6 Book book = new Book(); 7 7 book.setId(1); 8 8 book.setName("西游记"); 9 9 book.setAuthor("吴承恩"); 1010 bookRepository.index(book); 1111 1212 1313 for (Book book1 : bookRepository.findByNameLike("游")) { 1414 System.out.println(book1); 1515 }; 1616 1717 }
结果:
11 2019-10-12 00:27:03.827 INFO --- [ main] Oss6ApplicationTests : Started Oss6ApplicationTests in 17.532 seconds (JVM running for 19.428) 22 2019-10-12 00:27:03.829 DEBUG --- [ main] ls.restart.Restarter : Creating new Restarter for thread Thread[main,5,main] 33 Book(id=1, name=西游记, author=吴承恩) 44 2019-10-12 00:27:04.851 DEBUG --- [ Thread-3] ebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@20f5281c, started on Sat Oct 12 00:26:47 CST 2019 55 2019-10-12 00:27:04.859 INFO --- [ Thread-3] ageListenerContainer : Waiting for workers to finish. 66 http://192.168.180.113:9200/topcheer/book/_search 77 {"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"topcheer","_type":"book","_id":"1","_score":1.0,"_source":{"id":1,"name":"西游记","author":"吴承恩"}}]}}