目录[-]

Centos7 搭建ES搜索引擎,并通过go-mysql-elasticsearch 实现数据同步

导语: 随着信息量的不断增加,数据库的压力也不断增加,那么mysql 对于我们全文查找帮助甚微,为何这样说呢。不要急着反驳我,你或许觉得”% like “ 这些也可以完成全文检索。那么我们来看一下,对于全文检索,数据库单表数据量肯定是非常大的,你通过like 这些语句进行查询,毫无疑问是非常耗费时间的。你或许觉得可以加索引,但是当你加完索引以后会发现,通过like 来查询,没走索引,这就很伤人了。ok! 不慌,这个时候你终于查到了有mysql有一个叫全文检索的东东,好家伙,终于可以了。90万的数据,数据量占到了近1.5G,光索引就有9G,mysql还客气binlog日志,这下好了,日志还占了进8个G。你说刺激不刺激,买的20个G的高效云盘,还什么都没做就占满了。好,这个时候你说不在乎,只要实现就行。可以!但是你会发现什么mysql自带的自然语言模式,BOOLEAN模式 查出来的东西很糟糕,并且也不会快太多。你说你可以用MyISAM引擎,但是效果还是不明显,发现有没有。
        这个时候,ES 这个工具就很好用了,确实快,检索起来嗖嗖的,但是还有一个问题,数据怎么同步,真是个头疼的问题,好吧。捋一下,从网上找了很多方法,都是关于增量更新的,并不是咱们所说的增删改查实时同步,如果想进行删除的操作,你不能物理删除,气不气人。
        通过不断的对比,我最后发现 go-mysql-elasticsearch比较适合我们的要求,他们都有一个规律就是都采用bnlog日志的方式进行更新,看过我上一篇文章mysql双机热备份的文章的话,你就可以理解为啥要通过binlog日志的方式就行读取了。

阅读准备:

1.将会使用到的程序:

  • Java jdk 11
  • elasticsearch 6.2
  • go-mysql-elasticsearch
  • mysql <8.0
  • analysis-ik 6.24(es 中文分词器插件)
  • node.js 11
  • go1.6+
  • cnpm

2.部分程序github地址:

  • go-mysql-elasticsearch:https://github.com/siddontang/go-mysql-elasticsearch

3.部分程序下载地址:

  • java jdk: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
  • node: https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz
  • go-mysql-elasticsearch:https://github.com/siddontang/ go-mysql-elasticsearch
  • analysis-ik: https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.2.4
  • go: https://studygolang.com/dl

4.安装参考网址:

  • node:https://www.cnblogs.com/liangjiongyao/p/9120535.html
  • go: https://www.cnblogs.com/mrblue/p/8891789.html
  • mysql: https://blog.csdn.net/wohiusdashi/article/details/89358071
  • analysis-ik: https://www.cnblogs.com/miao-zp/p/6008370.html

安装elasticsearch:

cd /usr/local/
wget https://www.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz
tar -zxvf  elasticsearch-6.3.1.tar.gz
mv elasticsearch-6.3.1 elasticsearch
~修改es配置文件
cd /etc/elasticsearch/config
vim elasticsearch.yml
~修改以下配置信息
network.host: 0.0.0.0
http.port: 9200
~添加跨域请求-给Elasticsearch head插件做准备,不然后期插件没法运行
http.cors.enabled: true
http.cors.allow-origin: "*"
~启动es,两种启动方式:
前台运行命令:./elasticsearch 
后台运行命令:./elasticsearch -d
~检查是否启动成功
curl 127.0.0.1:9200
如果有内容输出这证明启动成功,不然自己查看日志进行排查

安装Elasticsearch head插件

~在安装之前先安装node,因为不是本篇的重点,所以如何去安装,已经放在了文章开头
wget  https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
cd elasticsearch-head-master
~安装所需第三方包
npm install
~运行
npm run start
~如需后台运行使用下边的命令:
nohup grunt server &

~在运行之前需要修改Gruntfile.js 文件 connect: { server: { options: { hostname:'', port: 9100, base: '.', keepalive: true } } } ~添加hostname:'',这个信息就好,表示其他电脑可以访问。

如果安装包错误,请检查是否是npm安装被墙的问题,如果是的话,这使用cnpm 这个时候打开浏览器,输入:ip:9100,你就可以看到可以可视化的界面,看到es的信息。

安装analysis-ik

这块很简单,只需要将同es对应版本的analysis-ik插件解压放在
plug 文件夹中即可,不能放置其他的东西。记得重启es
这个在一会的创建索引上可以用到

mysql的相关准备

~安装好mysql以后,开启binglog日志,创建好库和表

~修改/etc/my.conf 文件,增加以下信息 server-id=1 log-bin=/usr/local/mysql-log/mysql-bin.log binlog_format="ROW

~设置完成后重启mysql service mysqld restart ~添加用户授权 create user 'test'@'%' identified by 'test123' grant replication slave on . to 'test'@'%' identified by 'test123'; ~这个时候mysql的准备工作完毕

elasticsearch的相关准备工作

~创建索引
~索引的创建你可以选择使用原生的方式进行创建,也可以通过第三方包来进行连接创建
我这里使用的就是python 第三方包elasticsearch-py
~如何创建索引:
https://www.cnblogs.com/shaosks/p/7592229.html
这样我们前期的准备工作都ok

安装go-mysql-elasticsearch

~安装go-mysql-elasticsearch 之前请先安装go,因为这个插件是国内一个大神通过go语言来编写的。安装好go语言的环境变量以后我们就客户以进行安装go-mysql-elasticsearch了
~先安装git,请自行百度

cd /usr/local git clone https://github.com/siddontang/go-mysql-elasticsearch cd go-mysql-elasticsearch go install make ~查看当前文件夹 ls bin cmd elastic etc Godeps LICENSE Makefile README.md river var ~进行配置,配置比较重要,在下边将详细去将 ./etc/river.toml ~启动 ./bin/go-mysql-elasticsearch -config=./etc/river.toml

配置文件

my_addr = "127.0.0.1:3306"     //需要同步的mysql基本设置
my_user = "test"
my_pass = "test123"

~Elasticsearch address es_addr = "127.0.0.1:9200" //本地elasticsearch配置

~Path to store data, like master.info, and dump MySQL data data_dir = "./var" //数据存储的url //以下配置保存默认不变 ~Inner Http status address stat_addr = "127.0.0.1:12800"

~pseudo server id like a slave server_id = 1001

~mysql or mariadb flavor = "mysql" ~mysqldump execution path mysqldump = "mysqldump"

~MySQL data source [[source]] schema = "Info" //elasticsearch 与 mysql 同步时对应的数据库名称

tables = ["test_river"] //支持通配符,可以指定只复制hoojjack数据库中指定的表数据

~Below is for special rule mapping [[rule]] schema = "Info" //数据库名称 table = "Info_con" //表名称 index = "con_index" //对应的索引名称

~配置好以上信息,然后启动go-mysql-elasticsearch即可,这个时候去进行增删改查就会同步到es中。

注意事项:

  1. go-mysql-elasticsearch启动以后不能进行修改表结构
  2. 使用go-mysql-elasticsearch的必要添加就是先开启binlog模式
  3. 记得先创建索引
  4. 提前先同步数据,不然binlog日志之前的数据无法同步。