centos8下安装elasticsearch 同时使用logstash 同步mysql数据

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

image.png

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就行
image.png

1.3.3修改es的配置文件

修改数据存储路径和日志存储路径
修改前:
image.png
修改后:
image.png
修改网络相关配置

#我这里改为如下值,开放所有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
image.png

1.4启动elasticsearch

TPS:进入bin目录下执行如下命令

#控制台启动
./elasticsearch
#后台运行
./elasticsearch -d

哦嚯~运行后我这里报错了,不知道各位头亮的道友是否也报错了呢
image.png
看这个报错的意思是不能使用root账号进行启动,这样就表示我们需要创建一个新的账号,接下来就是创建用户的时刻啦,命令如下:

#账号密码根据自己的需求设置,我这里是内网使用所以就设置的很简单啦,
#es这么设计的原因应该也是为了保证服务器的安全考虑
# 添加⽤户名
useradd es
# 修改密码 
passwrd es
# 切换用户
su es

好了咱们的账号创建好了,切换到新建立的账号再次进行启动,继续执行启动命令,执行后发现矮油~怎么又报错了呢小老弟
image.png
报错的是找不到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

配置完成后启动发现又报错了,不要慌慢慢来,剧透一下后面就没有什么错啦~
image.png
看报错信息就知道需要我们设置一下内存信息,说最少不能少于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/ 具体地址根据自己的安装环境进行访问,应该可以找到吧~
访问后出现如下信息就证明安装完成了,如果你不设置密码就已经可以开始使用了,没骗你们吧,没有报错了~
image.png

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几个吧
image.png
看报的错是需要授权,原因是我们刚刚配置的开启了授权管理,不过这个报错先不用管我们继续执行就行

1.5.4给es设置密码

在bin目录下输入以下命令设置密码

./elasticsearch-setup-passwords interactive

接下来就是设置密码的阶段了,需要设置的密码有点多所以需要点时间,页面如下
image.png
执行后她又报错啦,她会魔法嘛为什么一直报错~
image.png
这个错误的解决办法删除 .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
#重启服务

然后重新设置密码,然后就设置成功了
image.png
此时可以通过外网进行访问,会出现需要授权登录页面
image.png
输入账号密码后就完成了到此es安装就全部完成啦
image.png
我这里是使用了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仓库中获取的驱动
image.png
获取的驱动文件如下
image.png
sql配置,这里使用的是sql文件,也可以在里面直接写sql语句,个人认为sql文件更利于维护,看个人喜好进行维护
image.png
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之前应该是这么配置的,具体原因有懂的道友可以传授一二
image.png
文件内容如下:

{
        "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查看模板是否生效,这里看分词器已经生成进去了证明我们配置的模板信息成功了
image.png
看数据是否同步过来了,这里看数据也同步过来了,到这里我们的logstash也就安装完成了,同步数据的功能也就实现了,具体详细的功能就各位道友自己验证啦。
image.png
感谢各位头顶发亮的兄台看到这里,我们也一起学习了es和logstash的安装和数据同步,有什么疑问或者有更好的见解欢迎和我交流呀,如果这篇文章能帮助到你,那就点个赞再走呗~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值