准备环境
- 启动4个centos容器, 并暴露相对应端口 (我的本机ip为172.16.1.236,以下涉及到的地方需要修改为自己的ip)
node_name | ip | http port | transport port |
---|---|---|---|
es01 | docker宿主机ip | 9205:9200 | 9305: 9300 |
es02 | docker宿主机ip | 9206:9200 | 9306: 9300 |
es03 | docker宿主机ip | 9207:9200 | 9307: 9300 |
kibana : 5601:5601
- 执行以下命令启动centos容器并暴露相应端口(使用-p 来对外映射docker容器端口)
docker run -tid --name centos1 -p 9205:9200 -p9305:9300 --privileged=true centos:latest /sbin/init
docker run -tid --name centos2 -p 9206:9200 -p9306:9300 --privileged=true centos:latest /sbin/init
docker run -tid --name centos3 -p 9207:9200 -p9307:9300 --privileged=true centos:latest /sbin/init
#centos4用于kibana安装
docker run -tid --name centos4 -p 5601:5601 --privileged=true centos:latest /sbin/init
- 注意:如果使用shell工具连接,增加 -p22:22 参数
- 参考es快速启动准备es安装包等数据
配置修改
修改system.conf配置 /etc/systemd/system.conf
sed -i "s/#DefaultLimitMEMLOCK=/DefaultLimitMEMLOCK=infinity/g" /etc/systemd/system.conf
修改limits.cong配置 /etc/security/limits.conf
- 修改如下
# nofile 最大打开文件描述符数
# nproc 最大进程数
# memlock 最大内存锁定
echo "* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
* soft memlock unlimited
* hard memlock unlimited" >> /etc/security/limits.conf
修改sysctl配置 /etc/sysctl.conf
- 修改如下
echo "vm.max_map_count = 262145" >> /etc/sysctl.conf
#生效
sysctl -p
修改es占用内存 /opt/es/config/jvm.options
sed -i "s/-Xms1g/-Xms"800m"/g" /opt/es/config/jvm.options
sed -i "s/-Xmx1g/-Xmx"800m"/g" /opt/es/config/jvm.options
开启ES内存锁定 /opt/es/config/elasticsearch.yml
- 增加如下配置
bootstrap.memory_lock: true
ES配置文件详解
节点类型
- 主节点
候选主节点的设置方法是设置node.mater为true,默认情况下,node.mater和node.data的值都为true,即该节点既可以做候选主节点也可以做数据节点。由于数据节点承载了数据的操作,负载通常都很高,所以随着集群的扩大,建议将二者分离,设置专用的候选主节点。当我们设置node.data为false,就将节点设置为专用的候选主节点了。
node.master: true
node.data: false
- 数据节点
数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。
node.master: false
node.data: true
- client节点
即不会被选作主节点,也不会存储任何索引数据。该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。
node.master = false
node.data = false
配置集群名称
- 不同的节点配置同一个cluster.name可组成同一个集群,确保不同的集群使用不同的cluster.name
- 配置如下 :
cluster.name: es-cluster-test
配置ES节点名称
- node.name表示集群节点的名称,集群中节点进行区分,如果不配置则默认为主机名
- 配置如下
node.name: es01
配置ES节点监听地址
- 如果不配置,默认是监听在127.0.0.1 和 [::1]