1.安装elasticsearch
1.1下载地址
#es下载地址 可以自己选择需要的版本
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
#由于es自带的分词器给中文分词不够准确,不太符合咱们的语意,我这里使用的是ik分词器,
#分词器很多可以根据自己第的需求选择,ik分词器下载地址如下 由于是github所以就需要自己科学上网了
https://github.com/medcl/elasticsearch-analysis-ik/releases
1.2下载elasticsearch
TPS:我这里使用的是7.12.1,具体版本更具自己需求来选择
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gz
1.3安装elasticsearch
1.3.1对elasticsearch下载的压缩包进行解压
tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz
1.3.2安装ik分词器
TPS:在elasticsearch的bin目录下执行以下命令,同时注意ik的版本和es的版本尽量保持一致可以避免版本不一致导致的问题
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
安装过程中会提示一次是否继续安装选y就行
1.3.3修改es的配置文件
修改数据存储路径和日志存储路径
修改前:
修改后:
修改网络相关配置
#我这里改为如下值,开放所有ip,可以根据自己需求进行修改
network.host: 0.0.0.0
修改集群节点,由于没有部署集群所以保留一个节点就好了
#修改如下,可根据自己的节点名称进行修改
cluster.initial_master_nodes: ["node-1"]
修改es的内存
#进入config目录
cd /usr/local/programfiles/elasticsearch-7.12.1/config
#修改jvm.options文件
vim jvm.options
根据自己的需求修改es的内存大小视自己情况而定,config文件夹内
TPS:由于这里使用的是7.x的版本,es默认的大小是4G,我这里改为了2G
1.4启动elasticsearch
TPS:进入bin目录下执行如下命令
#控制台启动
./elasticsearch
#后台运行
./elasticsearch -d
哦嚯~运行后我这里报错了,不知道各位头亮的道友是否也报错了呢
看这个报错的意思是不能使用root账号进行启动,这样就表示我们需要创建一个新的账号,接下来就是创建用户的时刻啦,命令如下:
#账号密码根据自己的需求设置,我这里是内网使用所以就设置的很简单啦,
#es这么设计的原因应该也是为了保证服务器的安全考虑
# 添加⽤户名
useradd es
# 修改密码
passwrd es
# 切换用户
su es
好了咱们的账号创建好了,切换到新建立的账号再次进行启动,继续执行启动命令,执行后发现矮油~怎么又报错了呢小老弟
报错的是找不到jdk,原因是没有给刚刚创建的用户分配权限,下面我们开始分配权限执行如下命令:
#给es用户进行授权
chown -R es:es /usr/local/programfiles/elasticsearch-7.12.1
#给文件夹进行降权
chmod -R 777 /usr/local/programfiles/elasticsearch-7.12.1
配置后发现可以执行了,但是又报错了,原因是es7需要jdk11才行,自己的是jdk8没有关系,es里面自带jdk11,需要把jdk11目录配置到环境变量中
配置环境变量命令如下:
# 打开文件
vim /etc/profile
# 添加环境变量
export ES_JAVA_HOME=/usr/local/programfiles/elasticsearch-7.12.1/jdk
# 刷新环境变量配置
source /etc/profile
配置完成后启动发现又报错了,不要慌慢慢来,剧透一下后面就没有什么错啦~
看报错信息就知道需要我们设置一下内存信息,说最少不能少于262144,直接上代码~不对是上命令
# 编辑sysctl.conf⽂件
vim /etc/sysctl.conf
#centos7系统添加如下
vm.max_map_count=655360
#ubuntu系统添加如下
vm.max_map_count=262144
# 执⾏以下命令⽣效:
sysctl -p
配置好后再次启动,然后就发现启动成功了,我们进行访问
访问地址:http://192.168.1.189:9200/ 具体地址根据自己的安装环境进行访问,应该可以找到吧~
访问后出现如下信息就证明安装完成了,如果你不设置密码就已经可以开始使用了,没骗你们吧,没有报错了~
1.5给elasticsearch设置密码
TPS:生产环境就需要嘛,现在都讲数据安全嘛
1.5.1先停止es
这里使用直接杀进程的方式,如果是控制台启动就直接使用ctrl+c就可以停止
#获取进程id 没有jps可以通过ps -ef|grep elasticsearch找到进程id
jps
#kill -9 杀掉进程
kill -9 进程id
1.5.2在config目录中,编辑elasticsearch.yml文件,添加如下配置
xpack.security.transport.ssl.enabled: true
xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
1.5.3再次重新启动es
哦豁,再次启动的时候她又报错了,果然就和女朋友的脾气一样哇,阴晴不定,醒醒别睡了哪里有女朋友呢~,想对象了多new几个吧
看报的错是需要授权,原因是我们刚刚配置的开启了授权管理,不过这个报错先不用管我们继续执行就行
1.5.4给es设置密码
在bin目录下输入以下命令设置密码
./elasticsearch-setup-passwords interactive
接下来就是设置密码的阶段了,需要设置的密码有点多所以需要点时间,页面如下
执行后她又报错啦,她会魔法嘛为什么一直报错~
这个错误的解决办法删除 .security-7 索引,然后重新执行上面命令即可,不用重启es集群
#先关闭认证
xpack.security.enabled: false
#重启服务
#然后删除索引
#开启认证
xpack.security.enabled: true
#重启服务
#然后等集群状态yellow后再添加密码
还有个解决办法如下 修改elasticsearch.yml 配置
#文件中去除discovery.seed_hosts 和cluster.initial_master_nodes
#添加如下配置
discovery.type: single-node
#重启服务
然后重新设置密码,然后就设置成功了
此时可以通过外网进行访问,会出现需要授权登录页面
输入账号密码后就完成了到此es安装就全部完成啦
我这里是使用了es的可视化插件进行链接的,插件名字是:elasticsearch-head
谷歌浏览器可以直接安装插件,此方法最便捷,就是需要学会科学上网,还有一种方法直接下载源码使用
源码地址:https://github.com/mobz/elasticsearch-head
2.安装logstash同步mysql数据库数据到es
TPS:随着es使用越来越广泛就需要涉及到同步数据库数据的功能,比较low的做法就是使用es的创建数据api接口进行数据同步,每次数据变动的时候都需进行操作,比较优雅的做法可以使用工具来进行完成,就比如logstash他也是es一个生态的,具体详细信息可以去官网的文档查看,好了不多说啦,我们开始愉快的搬砖吧~
2.1下载logstash
下载地址:https://www.elastic.co/cn/downloads/past-releases#logstash
TPS:和es根据自己需求选择相应的版本,不过值得注意的地方是最好版本和es保持一致防止出现版本不同的问题
#我这里下载的还是7.12.1 和es保持一致
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.12.1-linux-x86_64.tar.gz
#下载后解压
tar -zxvf logstash-7.12.1-linux-x86_64.tar.gz
2.2配置logstash
TPS:这里使用的数据库是mysql,版本是8.x的,根据自己的需求配置,数据库不同也就是链接驱动不同
#在logstash解压目录下创建sync目录
mkdir sync
在sync文件夹下创建一个文件命名为logstash-db-sync.conf ,命名可以根据自己喜好命名后缀需要以.conf结尾,文件中的内容如下
input {
jdbc {
# 设置 MySql/MariaDB 数据库url以及数据库名称
jdbc_connection_string => "jdbc:mysql://192.168.1.189:3306/mall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "Abcd!234"
# 数据库驱动所在位置,可以是绝对路径或者相对路径
jdbc_driver_library => "/usr/local/software/logstash-7.12.1/sync/mysql-connector-java-8.0.27.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
# 开启分页
jdbc_paging_enabled => "true"
# 分页每页数量,可以自定义
jdbc_page_size => "1000"
# 执行的sql文件路径
statement_filepath => "/usr/local/software/logstash-7.12.1/sync/goods.sql"
# 设置定时任务间隔 含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
schedule => "* * * * *"
# 索引类型
type => "_doc"
# 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
use_column_value => true
# 记录上一次追踪的结果值
last_run_metadata_path => "/usr/local/software/logstash-7.12.1/sync/track_time"
# 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
tracking_column => "update_time"
# tracking_column 对应字段的类型
tracking_column_type => "timestamp"
# 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
clean_run => false
# 数据库字段名称大写转小写
lowercase_column_names => false
}
}
output {
elasticsearch {
# 如果不配置type,动态模板会创建失败
document_type => "_doc"
# es地址
hosts => ["192.168.1.189"]
#账号
user => elastic
#密码
password => "es$^Gej^$2022%$"
# 同步的索引名
index => "b_goods"
# 设置_docID和数据相同
document_id => "%{id}"
# document_id => "%{itemId}"
#定义模版的名称
template_name => "myik"
#模版所在的位置
template => "/usr/local/software/logstash-7.12.1/sync/logstash-ik.json"
#是否重写模版
template_overwrite => true
#默认为true,false关闭logstash自动管理模版的功能,如果自定义模版,则设置false
manage_template => true
}
# 日志输出
stdout {
codec => json_lines
}
}
配置的信息都有描述了,然后对配置信息做具体描述
数据库驱动,我使用的是mysql驱动,在我自己本地maven仓库中获取的驱动
获取的驱动文件如下
sql配置,这里使用的是sql文件,也可以在里面直接写sql语句,个人认为sql文件更利于维护,看个人喜好进行维护
sql文件中写对应业务的查询语句就可以啦,下面是示例代码,其中sql_last_value是占位符提供给logstash同步数据左边界的,而update_time是字段是自己配置的,根据自己的需求进行配置
select * from xxx_table where xxx=xxx and update_time >=:sql_last_value
output中模板配置,由于我们需要使用分词器插件所以需要对模板进行重新定义
TPS:值得注意的是在网上查资料看他们都说自定义模板manage_template => true设置为false,但是我实际实验后如果设置为false他是不会在es中创建模板的,所以我们需要给他设置为true,也有可能是版本原因7.x之前应该是这么配置的,具体原因有懂的道友可以传授一二
文件内容如下:
{
"order":0,
"version":1,
"index_patterns":[
"*"
],
"settings":{
"index":{
"number_of_shards":"1",
"refresh_interval":"5s"
}
},
"mappings":{
"dynamic_templates":[
{
"message_field":{
"path_match":"message",
"mapping":{
"norms":false,
"type":"text"
},
"match_mapping_type":"string"
}
},
{
"string_fields":{
"mapping":{
"norms":false,
"type":"text",
"analyzer": "ik_max_word",
"fields":{
"keyword":{
"ignore_above":256,
"type":"keyword"
}
}
},
"match_mapping_type":"string",
"match":"*"
}
}
],
"properties":{
"@timestamp":{
"type":"date"
},
"geoip":{
"dynamic":true,
"properties":{
"ip":{
"type":"ip"
},
"latitude":{
"type":"half_float"
},
"location":{
"type":"geo_point"
},
"longitude":{
"type":"half_float"
}
}
},
"@version":{
"type":"keyword"
}
}
},
"aliases":{
}
}
获取模板的方式通过es的接口链接访问获取,前提你的es使用logstash同步过数据
链接地址如下:http://locahost:9200/template/logstash
2.3启动logstash
进入logstash解压目录的bin目录下执行启动命令
#控制台启动
./logstash -f ../sync/logstash-db-sync.conf
#后台启动
nohup ./logstash -f ../sync/logstash-db-sync.conf >/dev/null 2>&1&
访问es查看模板是否生效,这里看分词器已经生成进去了证明我们配置的模板信息成功了
看数据是否同步过来了,这里看数据也同步过来了,到这里我们的logstash也就安装完成了,同步数据的功能也就实现了,具体详细的功能就各位道友自己验证啦。
感谢各位头顶发亮的兄台看到这里,我们也一起学习了es和logstash的安装和数据同步,有什么疑问或者有更好的见解欢迎和我交流呀,如果这篇文章能帮助到你,那就点个赞再走呗~