1、 故障转移与扩容
假设我们es-node1挂了,集群中会发生什么呢?具体会发生这2个动作:
其一:因为es-node1是master节点,所以es会自动重新选举一名master。
其二:因为es-node1上面的shard1和replica3挂了,新的master会把node2上的replica-1提升为shard1.
这样,整个集群还是正常进行的
es-node1挂机前,es-head的展示信息如下图:
下图细框正方形为副本,粗框正方形为分片,五角星代表master节点
现在我们关掉es-node1:
再看es-head结果:
如上图,我们发现2点变化,验证了我们上面所说的,
一是,es-node11提升为主节点
二是,es-node12上的副本2和es-node3上的副本0, 已经从副本角色,提升为分片角色了!
如果节点的数据是分片,那么保留的副本就会成为分片;如果是副本则会重新在其他节点生成新的副本
扩容
扩容前和扩容后的架构变化举例:
扩容前(2台机器,每台机器上各3个lucene实例):
扩容后(3台机器,每台机器上各2个lucene实例):
这个迁移的过程,用户不需要做什么,只需要增加节点到集群就行了。下面我们演示一下:
[root@localhost ~]# docker start es_master_180_10
es_master_180_10
在刚刚只有2台es节点的基础上,我们重新加入一台es-node1,在es-head中发现集群结构自动变成下图这样的分布了:
2. 引入中文分词
3. 引入Kibara
kibana是es的一个可视化工具,提供了友好的可视化查看和操作页面,类似于mysql的phpadmin。
现在我们来创建一个kibana容器:添加到docker-compose中
接下来,我们就可以用浏览器进入kibana界面了。
下面这个是kibana的控制台界面,我们可以在左边输入内容,右边会显示执行结果。→ 这是官方推荐
会发现页面已经出来了,此时我们还需要到第一个输入框中输入es的http地址,如下所示
其他可视化工具:head,kibana,elasticHD
4. es 增删改查
4.1 创建商品列表索引
请求地址:http://ip:端口/索引名称
索引名称必须小写
http方法:PUT
实操:
http://192.168.232.104:9200/goods_list
参数详解:
number_of_shards:分片数量。
number_of_replicas:副本数量。
在postman中输入如上内容,完成创建
我们看到创建成功:
我们看到有2个ture,所以创建成功了。在es-head中,我们看到分片和副本的分布情况:
2个分片和各自对应的副本分布在3台node上,粗线框正方形代表分片,细线框正方形代表副本。其中settings是设置索引分片信息:分片数,副本数。
查看索引:
4.2 添加数据
注意:默认情况下添加数据时,如果指定的某个字段不存在时,es会自动创建该字段
请求地址:http://ip:端口/索引名/_doc/商品id
上面这里不添加id就自动生成
http方法:PUT
实操:
4.3 查询数据:
返回:
4.4 修改数据
4.5 删除数据
示例:
5. 商品微服务代码
5.1 安装composer包
在商品微服务根目录下,执行:
[root@100 swoft_order]# composer require elasticsearch/elasticsearch
这样,我们的商品微服务就支持elasticsearch了。
5.1.1. 客户端
app\client\swoft\app\Rpc\Lib\GoodsInterface.php
app\client\swoft\app\Http\Controller\
5.1.2. 服务端
5.1.3. 存在问题
注意:有一些版本的swoole可能会存在问题;这是因为swoole底层的一键协程化导致的
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
其中GOPATH为go的项目目录地址,对应目录内容
测试:
编辑一份hello.go文件
6.2. 修改MySQL binlog日志模式
需要值得注意的是,go-mysql-elasticsearch 支持binlog的日志模式为row模式因此建议在配置MySQLbinlog的时候需指定该模式
log-bin=mysql-bin
binlog_format=row
6.3. go-mysql-elasticsearch安装
如下为配置 river.toml