安装docker 以及 docker-compose
参考文章https://developer.aliyun.com/article/708974
下载镜像
这里以6.7.1版本为例 实际生产请按生产具体版本号
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.7.1
安装docker集群
目前三台虚拟机 ip 10.211.55.7,10.211.55.8,10.211.55.10
-
首先在10.22.55.7创建配置文件夹
mkdir /docker/es/config mkdir /docker/es/data
-
然后在config目录下创建docker配置文件
vim es.yml
node.name: es-node1 network.host: 0.0.0.0 network.publish_host: 10.211.55.7 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["10.211.55.7:9300","10.211.55.8:9300","10.211.55.10:9300"] discovery.zen.minimum_master_nodes: 2
具体参数解释
ES_JAVA_OPTS 配置ES JVM heap内存限制 cluster.name 集群名称 node.name 节点名称 node.master 节点角色配置,true表示可以成为主节点,false不能成为主节点 node.data 节点角色配置,true表示可以成为数据节点,false不能成为数据节点 node.ingest 节点角色配置,true表示可以成为协调节点,false不能成为协调节点(简单解释,请以官方为准) node.attr.rack 节点服务器所在的机柜信息,可能在数据分布中起到指导作用 discovery.zen.ping.unicast.hosts 配置自动发现IP列表 discovery.zen.minimum_master_nodes 防止脑裂,这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量(我们的情况是3,因此这个参数设置为2,但对于只有2个节点的情况,设置为2就有些问题了,一个节点DOWN掉后,你肯定连不上2台服务器了,这点需要注意)。 gateway.recover_after_nodes 控制集群在达到多少个节点之后才会开始数据恢复,通过这个设置可以避免集群自动相互发现的初期,shard分片不全的问题,假如es集群内一共有5个节点,就可以设置为5,那么这个集群必须有5个节点启动后才会开始数据分片,如果设置为3,就有可能另外两个节点没存储数据分片 network.host 绑定服务的IP地址 transport.tcp.port 内部通信端口 http.port 对外服务端口 path.data 数据存放目录 bootstrap.memory_lock 锁住内存,确保ES不使用swap bootstrap.system_call_filter 系统调用过滤器,建议禁用该项检查,因为很多检查项需要Linux 3.5以上的内核,否则会报错。
创建jvm的配置文件
vim jvm.options
## JVM configuration ################################################################ ## IMPORTANT: JVM heap size ################################################################ ## ## You should always set the min and max JVM heap ## size to the same value. For example, to set ## the heap to 4 GB, set: ## ## -Xms4g ## -Xmx4g ## ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html ## for more information ## ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms512m -Xmx512m ################################################################ ## Expert settings ################################################################ ## ## All settings below this section are considered ## expert settings. Don't tamper with them unless ## you understand what you are doing ## ################################################################ ## GC configuration 8-13:-XX:+UseConcMarkSweepGC 8-13:-XX:CMSInitiatingOccupancyFraction=75 8-13:-XX:+UseCMSInitiatingOccupancyOnly ## G1GC Configuration # NOTE: G1 GC is only supported on JDK version 10 or later # to use G1GC, uncomment the next two lines and update the version on the # following three lines to your version of the JDK # 10-13:-XX:-UseConcMarkSweepGC # 10-13:-XX:-UseCMSInitiatingOccupancyOnly 14-:-XX:+UseG1GC 14-:-XX:G1ReservePercent=25 14-:-XX:InitiatingHeapOccupancyPercent=30 ## JVM temporary directory -Djava.io.tmpdir=${ES_TMPDIR} -Dlog4j2.disable.jmx=true ## heap dumps # generate a heap dump when an allocation from the Java heap fails # heap dumps are created in the working directory of the JVM -XX:+HeapDumpOnOutOfMemoryError # specify an alternative path for heap dumps; ensure the directory exists and # has sufficient space -XX:HeapDumpPath=data # specify an alternative path for JVM fatal error logs -XX:ErrorFile=logs/hs_err_pid%p.log ## JDK 8 GC logging 8:-XX:+PrintGCDetails 8:-XX:+PrintGCDateStamps 8:-XX:+PrintTenuringDistribution 8:-XX:+PrintGCApplicationStoppedTime 8:-Xloggc:logs/gc.log 8:-XX:+UseGCLogFileRotation 8:-XX:NumberOfGCLogFiles=32 8:-XX:GCLogFileSize=64m # JDK 9+ GC logging 9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
其中启动内存建议是服务器内存的一半,比如服务器内存16g 就设置-Xms8g
-Xmx8g -
编写docker compose文件
vi docker-compose.yml
version: '2.2' services: elasticsearch: image: elasticsearch:6.7.1 restart: always container_name: es-node1 privileged: true network_mode: host volumes: - /docker/es/data:/usr/share/elasticsearch/data - /docker/es/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /docker/es/config/jvm.options:/usr/share/elasticsearch/config/jvm.options environment: - bootstrap.memory_lock=true - xpack.security.enabled=false - xpack.monitoring.enabled=false ports: - 9200:9200 - 9300:9300 ulimits: memlock: soft: -1 hard: -1
记得给文件夹授予权限
chmod 777 /docker/es -R
-
启动es
docker-compose up -d
然后用docker ps 查看是否启动进程
如果遇到启动失败,可以用
docker logs 容器id
来查看日志比如
docker logs 4d92f5249b81
然后可以访问服务器ip:9200来访问es,请确保9200 9300端口已开放
其他两台电脑依次部署 具体配置文件请看附件
部署完成
可以用http://ip:9200/_nodes 来查看集群信息
可以看到已经有三个节点
部署出现的问题
-
没有访问路径的权限
解决方案:授予权限
chmod 777 /docker/es -R
-
es占用内存空间太小
解决方案
https://www.jianshu.com/p/90ec54cd4b10
-
es从节点无法连城集群
解决方案
https://discuss.elastic.co/t/failed-add-node/187715/2
清空data下的数据