参考资料
说明
- 一个服务器,三个es服务节点,一个kibana容器,一个elasticsearch-head服务节点。
- es版本为7.17.5。
- 服务器地址:192.168.127.142。
- elasticsearch 不建议使用docker,容器部署不适合有状态服务。这里是为了学习方便。
安装流程
- 安装docker
- 安装docker-compose
- 打开https://github.com/docker/compose/releases/tag/v2.14.1 页面找到docker-compose-linux-x86_64
- 上传到
/usr/local/bin
目录下,改名为docker-compose
。 - 使用
docker-compose --version
命令测试。
- 安装docker-compose
- 初始化环境
- 虚拟机新建虚拟服务器,名称elasticsearch。
- 防火墙初始化
- 修改Liunx句柄数
- 查看最大句柄
sysctl -a | grep vm.max_map_count
- 修改句柄数
在末尾添加vi /etc/sysctl.conf
vm.max_map_count=262144
- 让系统读取这个新的配置
sysctl -p
- 检查,如果返回值为
vm.max_map_count = 262144
证明修改成功。
sysctl vm.max_map_count
- 句柄就是用户可以同时打开的文件句柄(包括文件、套接字等)的数量。
- 修改最大线程数
vi /etc/security/limits.conf
# 添加以下内容 * soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 4096
limits.conf
用于设置系统资源限制的配置文件。它可以帮助管理员限制用户或进程能够使用的系统资源量。- 每一行表示对一个用户或用户组的限制,格式为
<domain> <type> <item> <value>
。其中domain:限制的对象,用户/用户组(@groupname)/所有用户(*);type表示限制类型,如soft(软限制)、hard(硬限制)和 -(不设置限制)等;item表示限制的资源;value表示限制的具体数量。 - 软限制是超过会提示,硬限制是超过会阻塞等待。
- 第一行和第二行表示:限制系统中所有用户可以最多打开的文件数为65536。
- 第三行和第四行表示:限制所有用户可以最多启动的进程数为4096。
- 每一行表示对一个用户或用户组的限制,格式为
- 重新启动服务
reboot
- 创建挂载目录
- 创建ES节点配置目录
mkdir -p /etc/es/elasticsearch/node-{1..3}/{config,plugins}
- 创建ES节点数据目录
mkdir -p /home/es/elasticsearch/node-{1..3}/{data,log}
- 创建kibana配置目录
mkdir -p /etc/es/kibana/config
- 目录授权
chmod 777 /etc/es/elasticsearch/node-{1..3}/{config,plugins}
chmod 777 /home/es/elasticsearch/node-{1..3}/{data,log}
chmod 777 /etc/es/kibana/config
- 下载分词器
- 打开下载页面,地址 https://github.com/medcl/elasticsearch-analysis-ik/releases,下载7.17.5版本分词器。
- 切换上传目录
mkdir -p /home/download/es/ik/ && cd /home/download/es/ik/
- 上传
- 解压
unzip elasticsearch-analysis-ik-7.17.5.zip
- 删除zip压缩包,并返回上级
rm -rf elasticsearch-analysis-ik-7.17.5.zip && cd ../
- 复制到对应目录
cp -R ik/ /etc/es/elasticsearch/node-1/plugins/
cp -R ik/ /etc/es/elasticsearch/node-2/plugins/
cp -R ik/ /etc/es/elasticsearch/node-3/plugins/
- 编写配置文件
- node-1
vi /etc/es/elasticsearch/node-1/config/elasticsearch.yml
#集群名称 cluster.name: elastic #当前该节点的名称 node.name: node-1 #是不是有资格竞选主节点 node.master: true #是否存储数据 node.data: true #最大集群节点数 node.max_local_storage_nodes: 3 #给当前节点自定义属性(可以省略) #node.attr.rack: r1 #数据存档位置 path.data: /usr/share/elasticsearch/data #日志存放位置 path.logs: /usr/share/elasticsearch/log #是否开启时锁定内存(默认为是) #bootstrap.memory_lock: true #设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址, #然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0 network.host: 0.0.0.0 #设置映射端口 http.port: 9200 #内部节点之间沟通端口 transport.tcp.port: 9300 # 寻找集群中的主节点,默认值为127.0.0.1:9300,也就是自己。如果要发现已存在的群集需要填写对应集群的服务节点信息,如果单节点可以忽略。es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,建议把所有的节点都写上。 discovery.seed_hosts: ["node-1","node-2","node-3"] #当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了, #其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者, #如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上 cluster.initial_master_nodes: ["node-1","node-2","node-3"] #在群集完全重新启动后阻止初始恢复,直到启动N个节点 #简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用 gateway.recover_after_nodes: 2 #删除索引是是否需要显示其名称,默认为显示 #action.destructive_requires_name: true #禁用安全配置,否则查询的时候会提示警告 xpack.security.enabled: false #配置允许跨域访问 http.cors.enabled: true http.cors.allow-origin: "*"
- node-2
vi /etc/es/elasticsearch/node-2/config/elasticsearch.yml
#集群名称 cluster.name: elastic #当前该节点的名称 node.name: node-2 #是不是有资格竞选主节点 node.master: true #是否存储数据 node.data: true #最大集群节点数 node.max_local_storage_nodes: 3 #给当前节点自定义属性(可以省略) #node.attr.rack: r1 #数据存档位置 path.data: /usr/share/elasticsearch/data #日志存放位置 path.logs: /usr/share/elasticsearch/log #是否开启时锁定内存(默认为是) #bootstrap.memory_lock: true #设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址, #然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0 network.host: 0.0.0.0 #设置映射端口 http.port: 9200 #内部节点之间沟通端口 transport.tcp.port: 9300 #寻找集群中的主节点,默认值为127.0.0.1:9300,也就是自己。如果要发现已存在的群集需要填写对应集群的服务节点信息,如果单节点可以忽略。es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,建议把所有的节点都写上。 discovery.seed_hosts: ["node-1","node-2","node-3"] #当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了, #其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者, #如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上 cluster.initial_master_nodes: ["node-1","node-2","node-3"] #在群集完全重新启动后阻止初始恢复,直到启动N个节点 #简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用 gateway.recover_after_nodes: 2 #删除索引是是否需要显示其名称,默认为显示 #action.destructive_requires_name: true #禁用安全配置,否则查询的时候会提示警告 xpack.security.enabled: false #配置允许跨域访问 http.cors.enabled: true http.cors.allow-origin: "*"
- node-3
vi /etc/es/elasticsearch/node-3/config/elasticsearch.yml
#集群名称 cluster.name: elastic #当前该节点的名称 node.name: node-3 #是不是有资格竞选主节点 node.master: true #是否存储数据 node.data: true #最大集群节点数 node.max_local_storage_nodes: 3 #给当前节点自定义属性(可以省略) #node.attr.rack: r1 #数据存档位置 path.data: /usr/share/elasticsearch/data #日志存放位置 path.logs: /usr/share/elasticsearch/log #是否开启时锁定内存(默认为是) #bootstrap.memory_lock: true #设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址, #然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0 network.host: 0.0.0.0 #设置映射端口 http.port: 9200 #内部节点之间沟通端口 transport.tcp.port: 9300 #寻找集群中的主节点,默认值为127.0.0.1:9300,也就是自己。如果要发现已存在的群集需要填写对应集群的服务节点信息,如果单节点可以忽略。es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,建议把所有的节点都写上。 discovery.seed_hosts: ["node-1","node-2","node-3"] #当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了, #其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者, #如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上 cluster.initial_master_nodes: ["node-1","node-2","node-3"] #在群集完全重新启动后阻止初始恢复,直到启动N个节点 #简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用 gateway.recover_after_nodes: 2 #删除索引是是否需要显示其名称,默认为显示 #action.destructive_requires_name: true #禁用安全配置,否则查询的时候会提示警告 xpack.security.enabled: false #配置允许跨域访问 http.cors.enabled: true http.cors.allow-origin: "*"
- kibana
vi /etc/es/kibana/config/kibana.yml
server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://node-1:9200","http://node-2:9200","http://node-3:9200"] #下面两项,需要开启RBAC时需要打开配合es使用 #elasticsearch.username: "user" #elasticsearch.password: "pass" # 设置中文 i18n.locale: "zh-CN"
- node-1
- 创建docker-compose文件
- 创建目录并打开
mkdir -p /opt/docker/es && vi /opt/docker/es/docker-compose.yaml
- 编写文件
version: "3" services: node-1: image: elasticsearch:7.17.5 container_name: node-1 environment: - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" - "TZ=Asia/Shanghai" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - "9200:9200" logging: driver: "json-file" options: max-size: "50m" volumes: - /etc/es/elasticsearch/node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /etc/es/elasticsearch/node-1/plugins:/usr/share/elasticsearch/plugins - /home/es/elasticsearch/node-1/data:/usr/share/elasticsearch/data - /home/es/elasticsearch/node-1/log:/usr/share/elasticsearch/log networks: - elastic node-2: image: elasticsearch:7.17.5 container_name: node-2 environment: - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" - "TZ=Asia/Shanghai" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - "9201:9200" logging: driver: "json-file" options: max-size: "50m" volumes: - /etc/es/elasticsearch/node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /etc/es/elasticsearch/node-2/plugins:/usr/share/elasticsearch/plugins - /home/es/elasticsearch/node-2/data:/usr/share/elasticsearch/data - /home/es/elasticsearch/node-2/log:/usr/share/elasticsearch/log networks: - elastic node-3: image: elasticsearch:7.17.5 container_name: node-3 environment: - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" - "TZ=Asia/Shanghai" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - "9202:9200" logging: driver: "json-file" options: max-size: "50m" volumes: - /etc/es/elasticsearch/node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /etc/es/elasticsearch/node-3/plugins:/usr/share/elasticsearch/plugins - /home/es/elasticsearch/node-3/data:/usr/share/elasticsearch/data - /home/es/elasticsearch/node-3/log:/usr/share/elasticsearch/log networks: - elastic kibana: container_name: kibana image: kibana:7.17.5 volumes: - /etc/es/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml ports: - 5601:5601 networks: - elastic elasticsearch-head: image: wallbase/elasticsearch-head:6-alpine container_name: elasticsearch-head environment: TZ: 'Asia/Shanghai' ports: - '9100:9100' networks: - elastic networks: elastic: driver: bridge
- 创建目录并打开
- 启动
docker-compose up -d
- 验证
- 查看docker容器
docker-compose ps
- 查看kibana,打开:http://192.168.127.142:5601
- 查看es,打开:http://192.168.127.142:9200
- 查看docker容器