docker-compose 安装ES集群 使用ik分词器,并支持本地文件扩展热词和mysql热更新
在Dictionary.java 中新增如下代码。我们ik文件夹最终的文件是这样的。将下列配置信息写入配置文件。在字典初始化方法中新增代码。
·
1 安装docker-compose
## 下载docker-compose
wget https://github.com/docker/compose/releases/download/v2.34.0/docker-compose-linux-x86_64
## 移动到自己习惯的路径
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
## 授权
chmod +x /usr/bin/docker-compose
## 检查是否安装成功
docker-compose version

2 准备工作
## 创建所需文件夹
mkdir -p /opt/es-cluster/node-{1..5}/{config,plugins,data,log}
## 文件赋权
chmod 777 /opt/es-cluster/node-{1..5}/{config,plugins,data,log}
## 创建kibana挂载目录并赋权
mkdir -p /opt/kibana/config/
chmod 777 /opt/kibana/config/
## 修改linux句柄数
vim /etc/sysctl.conf
## 添加如下内容
vm.max_map_count=655360
## 创建大量线程
vim /etc/security/limits.conf
## 修改或添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
## 重启
reboot
3 获取ik 分词器 并设置ik分词器进行本地文件热更和mysql热更
3.1 找到对应版本的ik 分词器
3.2 将文件上传到ik(我的文件都存在/home中)
## 上传压缩包
mkdir ik && cd ik
rz elasticsearch-analysis-ik-7.17.28.zip
## 解压当前文件
unzip elasticsearch-analysis-ik-7.17.28.zip
## 删除 压缩包
rm -rf elasticsearch-analysis-ik-7.17.28.zip
3.3 创建本地热词和配置
## 创建扩展热词文件
mkdir -p /opt/es-cluster/common/custom && cd /opt/es-cluster/common/custom
vi extend.dic
## 修改ik配置文件
vim /home/ik/config/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典。如果是多个用;分开 -->
<entry key="ext_dict">custom/extend.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
3.4 基于ik分词器 根据mysql 进行热更新
3.4.1 下载源码
3.4.2 新增配置文件

将下列配置信息写入配置文件
jdbc.url=jdbc:mysql://*.*.*.*:3306/es_hot_word?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
jdbc.user=root
jdbc.password=********
jdbc.reload.sql=select word from hot_words
jdbc.reload.stopword.sql=select stopword as word from hot_stopwords
3.4.3 在plugin.xml配置文件中新增mysql驱动配置

<dependencySet>
<outputDirectory/>
<useProjectArtifact>true</useProjectArtifact>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>mysql:mysql-connector-java</include>
</includes>
</dependencySet>
3.4.4 在pom中新增mysql驱动依,并根据ik分词器的版本修改版本号


## 修改版本号
<elasticsearch.version>7.17.28</elasticsearch.version>
## 新增依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
3.4.5 修改源码
在Dictionary.java 中新增如下代码
private static Properties prop = new Properties();
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
logger.error("MySQL驱动加载异常:", e);
}
}
所有词
/**
* 所有词
*/
public void mysqlRemoteExtDict(){
this.loadMySQLStopwordDict();
this.loadMySQLExtDict();
}
热词更新
/**
* 热词更新
*/
private void loadMySQLExtDict() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Path file = PathUtils.get(getDictRoot(), "jdbc-reload.properties");
prop.load(new FileInputStream(file.toFile()));
logger.info("jdbc-reload.properties");
for(Object key : prop.keySet()) {
logger.info(key + "=" + prop.getProperty(String.valueOf(key)));
}
logger.info("query hot word dict from mysql, " + prop.getProperty("jdbc.reload.sql") + "......");
conn = DriverManager.getConnection(
prop.getProperty("jdbc.url"),
prop.getProperty("jdbc.user"),
prop.getProperty("jdbc.password"));
stmt = conn.createStatement();
rs = stmt.executeQuery(prop.getProperty("jdbc.reload.sql"));
while(rs.next()) {
String theWord = rs.getString("word");
logger.info("hot word from mysql: " + theWord);
_MainDict.fillSegment(theWord.trim().toCharArray());
}
} catch (Exception e) {
logger.error("erorr", e);
} finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
}
}
/**
* 停用词
*/
private void loadMySQLStopwordDict() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Path file = PathUtils.get(getDictRoot(), "jdbc-reload.properties");
prop.load(new FileInputStream(file.toFile()));
logger.info("jdbc-reload.properties");
for(Object key : prop.keySet()) {
logger.info(key + "=" + prop.getProperty(String.valueOf(key)));
}
logger.info("query hot stopword dict from mysql, " + prop.getProperty("jdbc.reload.stopword.sql") + "......");
conn = DriverManager.getConnection(
prop.getProperty("jdbc.url"),
prop.getProperty("jdbc.user"),
prop.getProperty("jdbc.password"));
stmt = conn.createStatement();
rs = stmt.executeQuery(prop.getProperty("jdbc.reload.stopword.sql"));
while(rs.next()) {
String theWord = rs.getString("word");
logger.info("hot stopword from mysql: " + theWord);
_StopWords.fillSegment(theWord.trim().toCharArray());
}
} catch (Exception e) {
logger.error("erorr", e);
} finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
logger.error("error", e);
}
}
}
}
新增本地线程
public class MySQLDictReloadThread implements Runnable{
private static final Logger logger = ESPluginLoggerFactory.getLogger(MySQLDictReloadThread.class.getName());
@Override
public void run() {
logger.info("reloading hot_word and stop_word dict from mysql");
Dictionary.getSingleton().mysqlRemoteExtDict();
}
}
在字典初始化方法中新增代码

## org.wltea.analyzer.dic.Dictionary#initial 增加定时
pool.scheduleAtFixedRate(new MySQLDictReloadThread(), 10, 60, TimeUnit.SECONDS);
## org.wltea.analyzer.dic.Dictionary#loadMainDict 方法中增加mysql热更
//自定义mysql
this.mysqlRemoteExtDict();
3.4.6 使用maven打包生成elasticsearch-analysis-ik-7.17.28.jar包

3.4.7 删除/home/ik 目录下的elasticsearch-analysis-ik-7.17.28.jar

rm -rf elasticsearch-analysis-ik-7.17.28.jar
3.4.8 上传我们修改好的代码生成的jar包
rz elasticsearch-analysis-ik-7.17.28.jar
3.4.9 因为我们的配置文件没有打在jar包内,所以要将jdbc-reload.properties文件上传到/home/ik/config中
rz jdbc-reload.properties
3.4.10 因为mysql的驱动器,所以要将mysql的驱动也上传到/home/ik目录中
rz mysql-connector-java-8.0.29.jar
我们ik文件夹最终的文件是这样的
3.4.11 新增权限配置(如果不进行此操作,7x版本会有一堆报错)
mkdir -p /opt/es-cluster/common && cd /opt/es-cluster/common
vi java.policy
3.4.12 把下列配置信息写入到文件中
grant {
permission java.net.SocketPermission "*:3306", "connect,resolve";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
permission java.util.PropertyPermission "*", "read,write";
permission javax.security.auth.AuthPermission "getSubject";
permission javax.security.auth.AuthPermission "modifyPrincipals";
permission javax.security.auth.AuthPermission "getLoginConfiguration";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "setContextClassLoader";
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "loadLibrary.jaas_unix";
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.RuntimePermission "createSecurityManager";
permission java.lang.RuntimePermission "closeClassLoader";
permission java.net.SocketPermission "*:3306","connect,resolve";
permission java.security.SecurityPermission "setProperty.networkaddress.cache.ttl";
permission java.security.SecurityPermission "setProperty.networkaddress.cache.negative.ttl";
permission java.lang.RuntimePermission "accessClassInPackage.sun.util.logging";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.logging.log4j.core";
permission java.io.FilePermission "/usr/share/elasticsearch/log/*", "read,write,delete";
permission java.lang.RuntimePermission "getenv.*";
permission java.lang.RuntimePermission "getStackWalkerWithClassReference";
permission java.security.SecurityPermission "setProperty.policy.expandProperties";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.logging.log4j.*";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "setSecurityManager";
permission javax.management.MBeanServerPermission "createMBeanServer";
permission javax.management.MBeanPermission "*", "*";
permission javax.management.MBeanTrustPermission "register";
};
3.4.13 将文件cp到各个plugins中
cp -R ik/ /opt/es-cluster/node-1/plugins/
cp -R ik/ /opt/es-cluster/node-2/plugins/
cp -R ik/ /opt/es-cluster/node-3/plugins/
cp -R ik/ /opt/es-cluster/node-4/plugins/
cp -R ik/ /opt/es-cluster/node-5/plugins/
4 创建各个node的配置文件
vi /opt/es-cluster/node-1/config/elasticsearch.yml
node-1
#集群名称
cluster.name: elastic
#当前该节点的名称
node.name: node-1
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 5
#给当前节点自定义属性(可以省略)
#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","node-4","node-5"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3","node-4","node-5"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 3
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled: false
# 这个配置指定了Elasticsearch HTTP服务监听的IP地址。使用0.0.0.0表示它可以接受来自任何IP地址的请求
http.host: 0.0.0.0
# 这个配置启用了CORS(跨源资源共享)支持
http.cors.enabled: true
# 这个配置定义了哪些域可以跨源访问到Elasticsearch的资源
http.cors.allow-origin: "*"
# 这个配置指定了在跨源请求中允许的HTTP头。X-Requested-With常用于识别Ajax请求,Content-Type用于指示请求中内容的类型,而Content-Length表示请求内容的长度。
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
node-2
vi /opt/es-cluster/node-2/config/elasticsearch.yml
#集群名称
cluster.name: elastic
#当前该节点的名称
node.name: node-2
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 5
#给当前节点自定义属性(可以省略)
#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","node-4","node-5"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3","node-4","node-5"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 3
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled: false
# 这个配置指定了Elasticsearch HTTP服务监听的IP地址。使用0.0.0.0表示它可以接受来自任何IP地址的请求
http.host: 0.0.0.0
# 这个配置启用了CORS(跨源资源共享)支持
http.cors.enabled: true
# 这个配置定义了哪些域可以跨源访问到Elasticsearch的资源
http.cors.allow-origin: "*"
# 这个配置指定了在跨源请求中允许的HTTP头。X-Requested-With常用于识别Ajax请求,Content-Type用于指示请求中内容的类型,而Content-Length表示请求内容的长度。
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
node-3
vi /opt/es-cluster/node-3/config/elasticsearch.yml
#集群名称
cluster.name: elastic
#当前该节点的名称
node.name: node-3
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 5
#给当前节点自定义属性(可以省略)
#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","node-4","node-5"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3","node-4","node-5"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 3
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled: false
# 这个配置指定了Elasticsearch HTTP服务监听的IP地址。使用0.0.0.0表示它可以接受来自任何IP地址的请求
http.host: 0.0.0.0
# 这个配置启用了CORS(跨源资源共享)支持
http.cors.enabled: true
# 这个配置定义了哪些域可以跨源访问到Elasticsearch的资源
http.cors.allow-origin: "*"
# 这个配置指定了在跨源请求中允许的HTTP头。X-Requested-With常用于识别Ajax请求,Content-Type用于指示请求中内容的类型,而Content-Length表示请求内容的长度。
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
node-4
vi /opt/es-cluster/node-4/config/elasticsearch.yml
#集群名称
cluster.name: elastic
#当前该节点的名称
node.name: node-4
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 5
#给当前节点自定义属性(可以省略)
#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","node-4","node-5"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3","node-4","node-5"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 3
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled: false
# 这个配置指定了Elasticsearch HTTP服务监听的IP地址。使用0.0.0.0表示它可以接受来自任何IP地址的请求
http.host: 0.0.0.0
# 这个配置启用了CORS(跨源资源共享)支持
http.cors.enabled: true
# 这个配置定义了哪些域可以跨源访问到Elasticsearch的资源
http.cors.allow-origin: "*"
# 这个配置指定了在跨源请求中允许的HTTP头。X-Requested-With常用于识别Ajax请求,Content-Type用于指示请求中内容的类型,而Content-Length表示请求内容的长度。
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
node-5
vi /opt/es-cluster/node-5/config/elasticsearch.yml
#集群名称
cluster.name: elastic
#当前该节点的名称
node.name: node-5
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 5
#给当前节点自定义属性(可以省略)
#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","node-4","node-5"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3","node-4","node-5"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 3
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled: false
# 这个配置指定了Elasticsearch HTTP服务监听的IP地址。使用0.0.0.0表示它可以接受来自任何IP地址的请求
http.host: 0.0.0.0
# 这个配置启用了CORS(跨源资源共享)支持
http.cors.enabled: true
# 这个配置定义了哪些域可以跨源访问到Elasticsearch的资源
http.cors.allow-origin: "*"
# 这个配置指定了在跨源请求中允许的HTTP头。X-Requested-With常用于识别Ajax请求,Content-Type用于指示请求中内容的类型,而Content-Length表示请求内容的长度。
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
kibana
vi /opt/kibana/config/kibana.yml
server.host: 0.0.0.0
# 监听端口
server.port: 5601
server.name: "kibana"
# kibana访问es服务器的URL,就可以有多个,以逗号","隔开
elasticsearch.hosts: ["http://node-1:9200","http://node-2:9201","http://node-3:9202","http://node-4:9203","http://node-5:9204"]
monitoring.ui.container.elasticsearch.enabled: true
# kibana访问Elasticsearch的账号与密码(如果ElasticSearch设置了的话)
#elasticsearch.username: "kibana"
#elasticsearch.password: "12345"
# kibana日志文件存储路径
logging.dest: stdout
# 此值为true时,禁止所有日志记录输出
logging.silent: false
# 此值为true时,禁止除错误消息之外的所有日志记录输出
logging.quiet: false
# 此值为true时,记录所有事件,包括系统使用信息和所有请求
logging.verbose: false
ops.interval: 5000
# kibana web语言
i18n.locale: "zh-CN"
5 docker-compose.yml 配置
vi /opt/es-cluster/docker-compose.yml
services:
node-1:
image: elasticsearch:7.17.28
container_name: node-1
environment:
## 内存一定要全部保持一致 要不起不来
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m -Djava.security.manager -Djava.security.policy=file:/usr/share/elasticsearch/config/java.policy"
- "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:
- /opt/es-cluster/node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/es-cluster/node-1/plugins:/usr/share/elasticsearch/plugins
- /opt/es-cluster/common/custom:/usr/share/elasticsearch/plugins/ik/config/custom
- /opt/es-cluster/node-1/data:/usr/share/elasticsearch/data
- /opt/es-cluster/node-1/log:/usr/share/elasticsearch/log
- /opt/es-cluster/common/java.policy:/usr/share/elasticsearch/config/java.policy
networks:
- elastic
node-2:
image: elasticsearch:7.17.28
container_name: node-2
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m -Djava.security.manager -Djava.security.policy=file:/usr/share/elasticsearch/config/java.policy"
- "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:
- /opt/es-cluster/node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/es-cluster/node-2/plugins:/usr/share/elasticsearch/plugins
- /opt/es-cluster/common/custom:/usr/share/elasticsearch/plugins/ik/config/custom
- /opt/es-cluster/node-2/data:/usr/share/elasticsearch/data
- /opt/es-cluster/node-2/log:/usr/share/elasticsearch/log
- /opt/es-cluster/common/java.policy:/usr/share/elasticsearch/config/java.policy
networks:
- elastic
node-3:
image: elasticsearch:7.17.28
container_name: node-3
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m -Djava.security.manager -Djava.security.policy=file:/usr/share/elasticsearch/config/java.policy"
- "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:
- /opt/es-cluster/node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/es-cluster/node-3/plugins:/usr/share/elasticsearch/plugins
- /opt/es-cluster/common/custom:/usr/share/elasticsearch/plugins/ik/config/custom
- /opt/es-cluster/node-3/data:/usr/share/elasticsearch/data
- /opt/es-cluster/node-3/log:/usr/share/elasticsearch/log
- /opt/es-cluster/common/java.policy:/usr/share/elasticsearch/config/java.policy
networks:
- elastic
node-4:
image: elasticsearch:7.17.28
container_name: node-4
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m -Djava.security.manager -Djava.security.policy=file:/usr/share/elasticsearch/config/java.policy"
- "TZ=Asia/Shanghai"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
ports:
- "9203:9200"
logging:
driver: "json-file"
options:
max-size: "50m"
volumes:
- /opt/es-cluster/node-4/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/es-cluster/node-4/plugins:/usr/share/elasticsearch/plugins
- /opt/es-cluster/common/custom:/usr/share/elasticsearch/plugins/ik/config/custom
- /opt/es-cluster/node-4/data:/usr/share/elasticsearch/data
- /opt/es-cluster/node-4/log:/usr/share/elasticsearch/log
- /opt/es-cluster/common/java.policy:/usr/share/elasticsearch/config/java.policy
networks:
- elastic
node-5:
image: elasticsearch:7.17.28
container_name: node-5
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m -Djava.security.manager -Djava.security.policy=file:/usr/share/elasticsearch/config/java.policy"
- "TZ=Asia/Shanghai"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
ports:
- "9204:9200"
logging:
driver: "json-file"
options:
max-size: "50m"
volumes:
- /opt/es-cluster/node-5/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/es-cluster/node-5/plugins:/usr/share/elasticsearch/plugins
- /opt/es-cluster/common/custom:/usr/share/elasticsearch/plugins/ik/config/custom
- /opt/es-cluster/node-5/data:/usr/share/elasticsearch/data
- /opt/es-cluster/node-5/log:/usr/share/elasticsearch/log
- /opt/es-cluster/common/java.policy:/usr/share/elasticsearch/config/java.policy
networks:
- elastic
kibana:
container_name: kibana
image: kibana:7.17.28
volumes:
- /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- 5601:5601
networks:
- elastic
networks:
elastic:
driver: bridge
6 启动docker-compose 并验证
## 启动
docker-compose up -d
## 重启命令
docker-compose restart
## 进去kibana
GET /_cluster/health
7 使用
启动状态
kibana执行
日志
mysql
更多推荐


所有评论(0)