elasticsearch 搭配 canal 构建主从复制架构实战(一)

目录

前言

安装ES

安装ES-head插件

安全保护


前言

elasticsearch通常在项目中用于做海量数据存储和全文搜索,在电商的商品搜索,论坛的发帖搜索中有广泛应用。但是一般这些数据会存储在关系型数据库中例如mysql,mysql数据库拥有良好的事务解决方案,清晰的数据结构,丰富的组合查询功能,是大部分项目的首选存储方案。那么当数据量增长到一定程度,或者有全文搜索、模糊搜索、联想搜索等搜索方面的需求的时候,ES就会比Mysql显得更加合适了。

这个时候问题来了,在现有服务的存储环境主要是mysql的前提下如何把搜索服务交给ES来进行处理,那么就需要将mysql中的数据同步到ES中,并且这种同步操作应该是异步不影响原先服务运行的。我们采用的方案是使用阿里的canal搭建一个主从复制架构,将mysql的数据同步过来到ES,然后ES提供搜索服务

安装ES

首先我们登录ES官网

        选择liunx x86平台,本次实战中我们选择的版本是7.10.0。 点击下载,我们可以得到一个elasticsearch的压缩包,然后我们通过ftp将压缩包上传到我们的服务器上你想要安装的目录,然后将压缩包进行解压。

        解压之后可以得到一个elasticsearch-7.10.0的文件夹

可以看到解压后的目录如上。下面我们进入bin的目录看到如下

一般elasticsearch启动,应该使用非root用户来执行改命令,所以记住我们需要先创建一个新的用户然后输入命令

./elasticsearch -d

 -d表示以守护进程运行,即使退出当前命令也可以在后台执行。

监听或打开安装目录下的logs/elasticsearch.log,有如下的日志输出即为成功

启动成功后,我们在浏览器中输入elasticsearch部署的ip加上9200端口可以返回elasticsearch的相关信息 。

{
  "name" : "DESKTOP-KRUG30P",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "FAUTZ1PBTdelqYRhiz876Q",
  "version" : {
    "number" : "7.10.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
    "build_date" : "2020-11-09T21:30:33.964949Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

如果启动失败的话,有时候可能是因为内存不足的原因,因为elasticsearch默认的分配内存是比较大的,如果你的机器配置比较低可能就无法启动。这个时候可以找到elasticsearch的config目录下有个jvm.options的文件,这个文件就是设置java虚拟机的各种参数

 按照例子我们可以降低内存分配再启动试试

一般在使用elasticsearch时我们都会使用到分词器,通常对于中文分词我们会使用ik分词器 

可以到GitHub 上进行下载。

一种是我们在plugins目录下自己创建一个文件夹,将ik插件的压缩包解压到此。

另一种是直接通过bin目录下的命令来下载

elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.0/elasticsearch-analysis-ik-7.10.0.zip

安装ES-head插件

        一般我们需要查看存储数据的时候,都会需要一个图形化的操作工具,这样便于我们操作。那么elasticsearch-head插件就是很好的一种方案。

        我们进入GitHub,找到elasticsearch-head项目 可以通过git clone下该项目,也可以直接下载。切换到elasticsearch-head文件目录,然后运行命令

npm install
npm run start &

看到上面的日志输出即为成功。

打开浏览器访问主机ip:9100端口可以看到

 这个就是我们的elasticsearch-head控制台。

安全保护

        上面两步已经完成了对elasticsearch和elasticsearch-head的安装。那么刚才的访问都是匿名的,对于我们来说是不安全的容易收到外界的攻击。所以我们需要激活elasticsearch的x-pack功能来增加账号密码的验证。

首先进入elasticsearch的安装目录找到config文件夹,进入elasticsearch.yml文件,在末尾添加上如下的配置

#支持跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Content-Type,Accept,Authorization, x-requested-with
#password
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

跨域是为了解决设置账号密码之后elasticsearch-head访问的跨域问题,下面的是开启相关的安全参数。退出保存后,进入安装目录下的bin文件夹

执行命令

elasticsearch-setup-passwords interactive

按提示输入账号和密码进行配置。

然后我们重启elasticsearch和elasticsearch-head。在浏览器中输入elasticsearch服务的地址加9200端口,访问后会看到需要我们输入账号密码,说明我们elasticsearch的密码配置已经成功了

然后我们访问elasticsearch-head,在浏览器中输入elasticsearch-head服务地址加9100端口后面跟上用户名和密码,例如

http://localhost:9100/?auth_user=elastic&auth_password=elastic

这里账号密码都用的是elastic.

可以看到服务能够正常访问。

此外我们通常会使用spring框架来整合这些中间件服务。由于我们的elasticsearch加了账号密码。我们需要在代码中配置。

首先在配置文件里面加上

然后在配置类中设置账号密码,可以通过spring的@Value读取 

 到此elasticsearch和elasticsearch-head的配置就完成了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值