1、 故障转移与扩容

假设我们es-node1挂了,集群中会发生什么呢?具体会发生这2个动作:

其一:因为es-node1是master节点,所以es会自动重新选举一名master。

其二:因为es-node1上面的shard1和replica3挂了,新的master会把node2上的replica-1提升为shard1.

这样,整个集群还是正常进行的

es-node1挂机前,es-head的展示信息如下图:

下图细框正方形为副本,粗框正方形为分片,五角星代表master节点

ES复合查询出现次数2次得 es head 复合查询_mysql

现在我们关掉es-node1:

ES复合查询出现次数2次得 es head 复合查询_mysql_02

再看es-head结果:

ES复合查询出现次数2次得 es head 复合查询_微服务_03

如上图,我们发现2点变化,验证了我们上面所说的,

一是,es-node11提升为主节点

二是,es-node12上的副本2和es-node3上的副本0, 已经从副本角色,提升为分片角色了!

如果节点的数据是分片,那么保留的副本就会成为分片;如果是副本则会重新在其他节点生成新的副本

扩容

扩容前和扩容后的架构变化举例:

扩容前(2台机器,每台机器上各3个lucene实例):

ES复合查询出现次数2次得 es head 复合查询_微服务_04

扩容后(3台机器,每台机器上各2个lucene实例):

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_05

这个迁移的过程,用户不需要做什么,只需要增加节点到集群就行了。下面我们演示一下:

[root@localhost ~]# docker start es_master_180_10

es_master_180_10

在刚刚只有2台es节点的基础上,我们重新加入一台es-node1,在es-head中发现集群结构自动变成下图这样的分布了:

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_06

2. 引入中文分词

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_07

3. 引入Kibara

kibana是es的一个可视化工具,提供了友好的可视化查看和操作页面,类似于mysql的phpadmin。

现在我们来创建一个kibana容器:添加到docker-compose中

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_08

ES复合查询出现次数2次得 es head 复合查询_微服务_09

接下来,我们就可以用浏览器进入kibana界面了。

下面这个是kibana的控制台界面,我们可以在左边输入内容,右边会显示执行结果。→ 这是官方推荐

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_10

会发现页面已经出来了,此时我们还需要到第一个输入框中输入es的http地址,如下所示

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_11

其他可视化工具:head,kibana,elasticHD

4. es 增删改查

4.1 创建商品列表索引

请求地址:http://ip:端口/索引名称

索引名称必须小写

http方法:PUT

实操:

http://192.168.232.104:9200/goods_list

ES复合查询出现次数2次得 es head 复合查询_mysql_12

参数详解:

number_of_shards:分片数量。

number_of_replicas:副本数量。

在postman中输入如上内容,完成创建

ES复合查询出现次数2次得 es head 复合查询_mysql_13

我们看到创建成功:

ES复合查询出现次数2次得 es head 复合查询_微服务_14

我们看到有2个ture,所以创建成功了。在es-head中,我们看到分片和副本的分布情况:

ES复合查询出现次数2次得 es head 复合查询_微服务_15

2个分片和各自对应的副本分布在3台node上,粗线框正方形代表分片,细线框正方形代表副本。其中settings是设置索引分片信息:分片数,副本数。

查看索引:

ES复合查询出现次数2次得 es head 复合查询_微服务_16

4.2 添加数据

注意:默认情况下添加数据时,如果指定的某个字段不存在时,es会自动创建该字段

请求地址:http://ip:端口/索引名/_doc/商品id

上面这里不添加id就自动生成

http方法:PUT

实操:

ES复合查询出现次数2次得 es head 复合查询_微服务_17

4.3 查询数据:

ES复合查询出现次数2次得 es head 复合查询_微服务_18

返回:

ES复合查询出现次数2次得 es head 复合查询_mysql_19

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_20

4.4 修改数据

ES复合查询出现次数2次得 es head 复合查询_mysql_21

4.5 删除数据

示例:

ES复合查询出现次数2次得 es head 复合查询_微服务_22

5. 商品微服务代码

5.1 安装composer包

在商品微服务根目录下,执行:

[root@100 swoft_order]# composer require elasticsearch/elasticsearch

这样,我们的商品微服务就支持elasticsearch了。

5.1.1. 客户端

app\client\swoft\app\Rpc\Lib\GoodsInterface.php

ES复合查询出现次数2次得 es head 复合查询_微服务_23

app\client\swoft\app\Http\Controller\

ES复合查询出现次数2次得 es head 复合查询_微服务_24

5.1.2. 服务端

ES复合查询出现次数2次得 es head 复合查询_微服务_25

5.1.3. 存在问题

注意:有一些版本的swoole可能会存在问题;这是因为swoole底层的一键协程化导致的

ES复合查询出现次数2次得 es head 复合查询_mysql_26

6. 利用Go实现MySQL binlog与 es数据同步

6.1. 安装go

go官网:https://golang.google.cn/dl/

注意!!安装go的同时也需要安装git

wget https://golang.google.cn/dl/go1.15.2.linux-amd64.tar.gz 

tar -C /usr/local -zxvf go1.15.2.linux-amd64.tar.g

配置环境变量 vi /etc/profile

ES复合查询出现次数2次得 es head 复合查询_mysql_27

其中GOPATH为go的项目目录地址,对应目录内容

ES复合查询出现次数2次得 es head 复合查询_微服务_28

测试:

编辑一份hello.go文件

ES复合查询出现次数2次得 es head 复合查询_mysql_29

6.2. 修改MySQL binlog日志模式

需要值得注意的是,go-mysql-elasticsearch 支持binlog的日志模式为row模式因此建议在配置MySQLbinlog的时候需指定该模式

log-bin=mysql-bin 

binlog_format=row

6.3. go-mysql-elasticsearch安装

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_30

如下为配置 river.toml

ES复合查询出现次数2次得 es head 复合查询_elasticsearch_31

ES复合查询出现次数2次得 es head 复合查询_mysql_32