linux安装软件
linux环境:
1`elasticsearch-6.8.12.tar.gz
2`elasticsearch-analysis-ik-6.8.12.zip
3`logstash-5.6.0.tar.gz (ex:刚开始做es时候用的es版本7.x,但是linux中安装的jdk是1.8版本的,7.x需要jdk11,后来查询找到es5.x版本支持jdk1.8,就安装的es5.6.0,由此logstash也就安装的5.6.0版本的,之后linux安装,调试没问题了,去做spring boot的配置(下面会说到)。走到这里傻眼了,es5.6.0是不支持ElasticsearchTemplate的配置的(气死),可我就是想用,无奈回头又去下载、安装了es6.8.12版本,ik分词器也要对应的版本.唯一的好消息是logstash5.6.0版本还能接着用。至此浪费了一天的时间)
4`mysql-connector-java-5.1.7-bin.jar
5`es数据查看用的es-head(只在win上装了),安装步骤网上一堆
1·软件安装过程中常见的问题?
基本上能百度到的问题,都会遇到个遍(都不是大问题,根据错误信息很明显),我也是后来搜索问题时看到的,可惜地址没有记下来
1·文件夹写权限问题?
2·不能用root运行运行问题?
3·文件所有者问题?
4·文件没有问题?
5·jdk版本要求问题?
6·linux系统jvm内存问题?
7·忘了
2·es安装?
1·解压tar文件
2·编辑/config/jvm.options
根据系统调整内存大小
3·编辑/config/elasticsearch.yml,配置以下内容
network.host: 0.0.0.0 #本机地址
http.port: 9222 #rest api访问端口/节点端口
transport.tcp.port: 9300 #集群信息交换端口
discovery.type: single-node #配置单一节点(老板穷啊,拢共4g内存,还想要什么)
http.cors.enabled: true
http.cors.allow-origin: "*"
其它配置根据项目实际情况配置
3·es启动?
非root账号运行 /bin/elasticsearch -d
4·ik分词器?
直接一点,在es/plugins新建一个文件夹,ik包解压进去,ok。还有要下zip包哦,不要下源码包
5·数据同步?
刚开始用的elasticsearch-jdbc-2.3.4.1,发现才不到300k,果断换了logstash(其实是会报错,而且项目中需要同步多个表数据,功能可能不完善,最重要的是elk只剩下k没有研究过了)
6·logstash-5.6.0安装?
1· /logstash-5.6.0/data 和 /logstash-5.6.0/logs设置写权限
2· /logstash-5.6.0/bin下新建bin目录,将之前下载的mysql-connector-java-5.1.7-bin.jar 放入/logstash-5.6.0/bin/bin中
3· 根据内存情况调整/logstash-5.6.0/config/jvm.options 中内存参数
4· 修改核心配置文件/logstash-5.6.0/bin/logstash.conf
7`logstash.conf配置?
input {
stdin {
}
jdbc {
type => "live_user"
# mysql 数据库链接,mybatis为数据库名
jdbc_connection_string => "jdbc:mysql://cdb-enpefmum.bj.tencentcdb.com:10119/yuq_live"
# 用户名和密码
jdbc_user => "yuq_dev"
jdbc_password => "[email protected]^l"
# 驱动 修改为mysql连接包位置
jdbc_driver_library => "/usr/src/logstash-5.6.0/bin/bin/mysql-connector-java-5.1.7-bin.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "5000"
# 执行的sql 文件路径+名称
statement => "select * from user"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
}
jdbc {
type => "live_circle"
# mysql 数据库链接,mybatis为数据库名
jdbc_connection_string => "jdbc:mysql://cdb-enpefmum.bj.tencentcdb.com:10119/yuq_live"
# 用户名和密码
jdbc_user => "yuq_dev"
jdbc_password => "[email protected]^l"
# 驱动 修改为mysql连接包位置
jdbc_driver_library => "/usr/src/logstash-5.6.0/bin/bin/mysql-connector-java-5.1.7-bin.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "5000"
# 执行的sql 文件路径+名称
statement => "select * from circle_info"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
}
jdbc {
type => "live_posting"
# mysql 数据库链接,mybatis为数据库名
jdbc_connection_string => "jdbc:mysql://cdb-enpefmum.bj.tencentcdb.com:10119/yuq_live"
# 用户名和密码
jdbc_user => "yuq_dev"
jdbc_password => "[email protected]^l"
# 驱动 修改为mysql连接包位置
jdbc_driver_library => "/usr/src/logstash-5.6.0/bin/bin/mysql-connector-java-5.1.7-bin.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "5000"
# 执行的sql 文件路径+名称
statement => "select * from user_posting_info"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
}
}
output {
if [type]=="live_user" {
elasticsearch {
#ESIP地址与端口
hosts => "0.0.0.0:9222"
#ES索引名称(自己定义的)
index => "dev"
#自增ID编号
document_id => "%{user_id}"
document_type => "user"
}
}
if [type]=="live_circle" {
elasticsearch {
#ESIP地址与端口
hosts => "0.0.0.0:9222"
#ES索引名称(自己定义的)
index => "dev"
#自增ID编号
document_id => "%{id}"
document_type => "circle"
}
}
if [type]=="live_posting" {
elasticsearch {
#ESIP地址与端口
hosts => "0.0.0.0:9222"
#ES索引名称(自己定义的)
index => "dev"
#自增ID编号
document_id => "%{id}"
document_type => "posting"
}
}
stdout {
# JSON格式输出
codec => json_lines
}
}
项目中需要三张表的数据,所以input有三个jdbc,output做一下判断。
8·logstash启动?
启动方式很多,我选最简单的:nohup /usr/src/logstash-5.6.0/bin/logstash -f /usr/src/logstash-5.6.0/bin/logstash.conf -w 10 -l /usr/src/logstash-5.6.0/logs/logstash.log & 。
启动之后每分钟同步一次,linux 时间。
spring boot 配置
项目中boot版本是2.2.6.RELEASE
1·依赖
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
这些版本亲测可用,其他高版本可能有冲突,自行调整。
2·properties文件配置?
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: ip:9300 #数据交换端口
repositories:
enabled: true
elasticsearch:
rest:
uris: ["http://ip:9222"] #rest api访问端口
3·不需要配置类,直接注入ElasticsearchTemplate使用
service查询:
* //示例,查找user_id为5的用户
* // PageRequest pageRequest = PageRequest.of(pageNum, pageSize);
* // BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
* // boolQueryBuilder.should(QueryBuilders.termQuery("user_id", 5));
* // NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withPageable(pageRequest).build();
* // AggregatedPage<EsUserVo> users = elasticsearchTemplate.queryForPage(query, EsUserVo.class);
bean基类:
@Data
@Document(indexName = "user_index",type = "user", shards = 1,replicas = 0, refreshInterval = "-1")
public class EsUserVo
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@Id
private Long user_id;
/** 用户账号 */
@Excel(name = "用户账号")
private String user_code;
}
indexName为数据同步时设置的index,type数据同步时设置的document_type。
4·附加问题?
1·本项目中为db每张表分别创建索引,分别创建type。因为每张表中字段都是不同的。如果字段都是相同的,可以只创建一个索引。
2·type,一般情况下type相当于db中的表
3·一个索引index中,如果有多个type,那么就要求所有type的字段都是一致的