各位老铁们好,相信很多人对商城微服务项目组件搭建(三)Canal与ELK安装部署都不是特别的了解,因此呢,今天就来为大家分享下关于商城微服务项目组件搭建(三)Canal与ELK安装部署以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
2.9 运河安装
2.9.1 开启binlog
对于MySQL,需要先开启Binlog写入功能,并将binlog-format配置为ROW模式。 my.cnf中的配置如下
由于MySQL配置文件没有挂载,所以只能在容器中修改。需要提前在容器中安装vi命令。
docker exec -it mysql /bin/bashcd /etc/mysql/mysql.conf.dvi mysqld.cnf
在文件末尾添加以下配置:
log-bin=mysql-bin # 启用binlog
binlog-format=ROW # 选择ROW模式
server_id=1 # 配置MySQL副本需要定义,不要重复canal的slaveId
注:阿里云RDS MySQL默认开启binlog,且账号默认具有binlog dump权限。不需要权限或二进制日志设置。可以直接跳过这一步。
授权的canal link MySQL账户有作为MySQL Slave的权限。如果您已有账户,可以直接授予:
CREATE USER canal IDENTIFIED BY 'canal';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;FLUSH PRIVILEGES ;#查看用户mysqluse mysql;数据改变mysqlselect user from user;
重启mysql容器
docker 重启mysql
检查binlog:是否开启
显示“log_bin”等变量;
2.9.2 运河安装
137台服务器
我们使用docker安装方法:
docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server
进入容器
docker exec -it canal /bin/bash
修改核心配置canal-server/conf/canal.properties和canal-server/conf/example/instance.properties。 canal.properties是canal本身的配置,instance.properties是需要同步数据的数据库连接配置。
修改canal.properties配置如下:
canal.ip=后添加以下内容
运河.id=123
Instance.properties修改配置如下:
# 位置信息
canal.instance.master.address=192.168.8.137:3306
另一种配置:
#表正则表达式
#canal.instance.filter.regex=.*\\.*
#监听配置
canal.instance.filter.regex=shop_goods.ad_items
配置完成后,重启canal容器
docker重启运河
2.10 JDK1.8安装
可安装在7台服务器上
下载jdk1.8、https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
cd /usr/local/eclipse2019#将下载的压缩包上传到java目录,并解压tar -zxvf jdk-8u371-linux-x64.tar.gzmv jdk1.8.0_371/java/#配置环境变量vi /etc/profileexport JAVA_HOME=/usr/local/eclipse2019/javaexport JRE_HOME=/usr/local/eclipse2019/java/jreexport CLASSPATH=.$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$ JAVA_HOME /jre/bin:$PATH:$HOME/bin
要使环境变量立即生效,执行:source /etc/profile
2.11 ELK安装
单独安装在138服务器上
2.11.1 系统参数配置
修改虚拟机配置,vi /etc/security/limits.conf,添加内容:
* 软诺文件65536
*硬nofile 65536
修改vi /etc/sysctl.conf,添加内容:
vm.max_map_count=655360 #262144
2.11.2 ES安装
1. 创建映射文件
mkdir -p /usr/local/eclipse2019/esmkdir {config,data,plugins,logs}#在config文件夹中创建elasticsearch.yml文件,内容如下:###Content cluster.name: 'elasticsearch'http.cors。 enabled: truehttp.cors.allow-origin: '*'network.host: 0.0.0.0discovery.zen.minimum_master_nodes: 1cluster.name: 集群服务名称http.cors.enabled: 启用跨域http.cors.allow-origin: 允许跨域域名,*代表所有域名network.host:外部访问发现的IP.zen.minimum_master_nodes:最小主节点数###Content#文件授权chmod -R 777 /usr/local/eclipse2019/es/
2.安装容器
docker run --name es -p 9200:9200 -p 9300:9300 -e 'discovery.type=单节点' -e ES_JAVA_OPTS='-Xms512m -Xmx512m' -v /usr/local/eclipse2019/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/eclipse2019/es/data:/usr/share/elasticsearch/data -v /usr/local/eclipse2019/es/plugins:/usr/share/elasticsearch/插件-v/usr/local/eclipse2019/es/logs:/usr/share/elasticsearch/logs -d elasticsearch:7.6.2
如果发生异常:最大虚拟内存区域vm.max_map_count [65530] 太低,增加到至少[262144]
解决:
#修改配置sysctl.conf vi /etc/sysctl.conf #最后一行添加以下内容vm.max_map_count=655300 #执行命令sysctl -p
如果发生连接异常:ERROR: [1]引导检查失败。在启动Elasticsearch 之前,您必须解决以下[1] 行中描述的要点。
原因:如果需要集群启动es,或者连接的IP端口受到限制,需要开放设置。
解决方案:修改配置文件:vim /usr/local/eclipse2019/es/config/elasticsearch.yml
网络.host: 0.0.0.0
节点.name: 节点-1
cluster.initial_master_nodes: ['node-1']
安装完成后,重启容器docker restart es,然后访问http://192.168.8.137:9200/。效果如下:
{“名称”:“Ke8Ljah”,“cluster_name”:“elasticsearch”,“cluster_uuid”:“QLeYJtTITxmRP29fbFpgbA”,“版本”:{“编号”:“6.8.12”,“build_flavor”:“默认”, _类型':'docker','build_hash':'7a15d2a','build_date':'2020-08-12T07:27:20.804867Z','build_snapshot': false,'lucene_version':'7.7.3', 'minimum_wire_compatibility_version':'5.6 .0', 'minimum_index_compatibility_version': '5.0.0' }, 'tagline': '你知道,用于搜索'}
2.11.3 IK分词器安装
分词器和es必须版本相同。如果不一致,就会发生崩溃。
分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.2
下载elasticsearch-analysis-ik-7.6.2.zip文件并解压,然后将解压后的文件全部复制到/usr/local/eclipse2019/ik目录下,将ik目录复制到elasticsearch的plugins目录下。使用复制以下命令:
docker cp ik es:/usr/share/elasticsearch/plugins/
重新启动es:
docker重新启动
2.11.4 es头安装
安装命令:
docker run -d --name es-head -p 9100:9100 docker.io/mobz/elasticsearch-head:5
安装完成后,访问http://192.168.8.137:9100/,效果如下:
1、进入head安装目录;
docker exec -it es-head /bin/bash
2.cd_site/
3.有两个地方可以编辑vendor.js
第6886行'application/x-www-form-urlencoded,改为:'application/json;charset=UTF-8'
第7574行'application/x-www-form-urlencoded'更改为:'application/json;charset=UTF-8'
2.11.5 Kibana安装
1. 拉取镜像
docker拉kibana:7.6.2
2.创建配置文件目录
mkdir /usr/local/eclipse2019/kibana/conf
并在此目录下创建配置文件kibana.yml
server.name: kibana
服务器.host: '0'
#elasticsearch.hosts: ['http://elasticsearch:9200']
elasticsearch.hosts: ['http://192.168.8.138:9200']
xpack.monitoring.ui.container.elasticsearch.enabled: true
#设置kibana中文显示
i18n.locale: en-CN
3.启动容器
#run Kibana,请注意不要写错误的IP #Docker运行-NAME KIBANA -E ELASTICSEARCH_HOSTS=3http://192.168.8.138:9200 -P 5601:5601 /本地/eclipse2019 /kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml --privileged=true kibana:7.6.2
如果不需要外部配置,进入容器修改配置即可。
docker exec -it kibana /bin/sh
vi /usr/share/kibana/config/kibana.yml
封面内容
server.name: kibanaserver.host: '0'#elasticsearch.hosts: [ 'http://elasticsearch:9200' ]elasticsearch.hosts: [ 'http://192.168.8.138:9200' ]xpack.monitoring.ui.container.elasticsearch.enabled333 60 true#设置kibana中文显示i18n.locale: zh- CN
4. 参观
http://192.168.8.138:5601
2.11.6 Logstash安装
1. 拉取镜像
docker拉logstash:7.6.2
2.创建配置文件目录
mkdir -p /usr/local/eclipse2019/logstash/pipeline
mkdir -p /usr/local/eclipse2019/logstash/config
在config目录下创建logstash.yml文件和pipelines.yml
logstash.yml内容如下:
config: reload:automatic:trueinterval:3sxpack:management.enabled: falsemonitoring.enabled: falsepath.config:/usr/share/logstash/pipeline
pipelines.yml内容如下:
- pipeline.id:logstash_dev路径.config:/usr/share/logstash/pipeline/logstash_dev.conf
在管道目录中创建配置文件logstash_dev.conf
输入{ tcp { 模式='服务器' 主机='0.0.0.0' 端口=4560 编解码器=json_lines }}过滤器{ if [type]=='记录' { mutate { remove_field='端口'remove_field='主机'remove_field='@version' } json { source='message' remove_field=['message'] } }}输出{ elasticsearch { 主机='192.168.8.138:9200' 索引='log-%{+YYYY.MM.dd}' }}
3.启动容器
docker run -itd --restart=always -p 4560:4560 -p 5044:5044 -d --namelogstash -v /usr/local/eclipse2019/logstash/pipeline/:/usr/share/logstash/pipeline/-v /usr/local /eclipse2019/logstash/config/:/usr/share/logstash/config/--privileged=truelogstash:7.6.2
2.11.7 定期删除索引
如果运行时间较长,磁盘可能已满,无法写入ES,所以要定期删除不太重要的索引数据;如下所示,这可以通过预定脚本来实现。
我们先写一个删除15天前索引的脚本es-index-clear.sh,如下:
# /bin/bash# es-index-clear# 只保留15天内的日志索引LAST_DATA=`date -d '-15 days' '+%Y.%m.%d'`# 删除索引curl -XDELETE 'http://192.168 .8.138:9200/log-'${LAST_DATA}'*'
然后使用crontab添加计划任务。首先执行crontab -e,然后添加以下内容:
0 1 * * * /usr/local/eclipse2019/autobin/es-index-clear.sh
这个调度会在每天凌晨1点执行,然后你可以将其更改为你自己的脚本所在的绝对路径。
可以执行tail -f /var/log/cron来查看定时任务的日志。
2.11.8 ES集群部署
生产环境还是需要部署集群。集群部署请参考以下内容。
1. 概念
Node节点:master、data、client。默认情况下,ES集群节点为混合节点,即elasticsearch.yml中默认node.master: true和node.data: true
主节点数量至少为3个,否则当主节点宕机时,可能无法选举主节点。 shard分片数量:与数据数据节点数量成正比,但不应超过数据节点数量。索引一旦创建,分片值就无法更改。
副本数:值越大,查找效率越高,但写入性能越低(一次数据写入操作需要进行(1+副本)次)。具体值与集群中数据节点数量有关,不应超过[数据节点数量-1]
master - 主节点:主节点数量至少为3个。主要功能:维护元数据、管理集群节点状态;不负责数据写入和查询。配置要点:内存可以比较小,但机器一定要稳定,最好是独享机器。 elasticsearch.yml配置如下: node.master: true node.data: false
data-数据节点:主要功能:负责数据的写入和查询,压力大。配置要点:内存大,最好是独享机。 elasticsearch.yml配置如下: node.master: false node.data: true
client - 客户端节点:主要功能:负责任务分发和结果聚合,分担数据节点的压力。配置要点:内存大,最好是独享机。 elasticsearch.yml配置如下: node.master: false
mix- 混合节点:既是主节点又是数据节点。当服务器数量不足时,只能考虑这种节点配置。 elasticsearch.yml配置如下: node.master: true node.data: true
2. 部署
服务器IP:192.168.8.74 192.168.8.75 192.168.8.76
3. 配置
cd /usr/local/eclipse2019
MKDIRES
光盘es/
触摸elasticsearch.yml
vi elasticsearch.yml
手动新建elasticsearch.yml配置文件,方便docker文件处理
#集群名称所有节点名称一致cluster.name: es-clusters#节点当前名称,每个节点不能重复es-node-1, es-node-2, es-node-3node.name: es-node- 1# 该节点当前是否有资格为主节点运行node.master: true #该节点当前是否存储数据node.data: true #设置为公开访问network.host: 0.0.0.0 #为其他节点设置本机IP地址与该节点交互,三个站分别为network.publish_host: 192.168.8.74#设置映射端口http.port: 9200#内部节点间通信端口transport.tcp.port: 9300#支持跨域访问http.cors.enabled: truehttp.cors.allow-origin: ' *'#配置集群discovery的主机地址.seed_hosts: ['192.168.8.74', '192.168.8.75', '192.168.8.76'] #初始master节点,使用初始集合满足master条件的节点启动集群cluster.initial_master_nodes: ['es-node-1', 'es-node-2', 'es-node-3']#节点等待响应的时间。默认值为30 秒。增大这个值会在一定程度上减少误判。造成脑裂discovery.zen.ping_timeout: 30s#配置集群最小主节点数,通常为(可以成为主节点的主机数/2)+1discovery.zen.minimum_master_nodes: 2#配置最小正常工作节点数集群中#gateway.recover_after_nodes: 2 #禁用交换内存以提高效率bootstrap.memory_lock: true
root用户修改/etc/security/limits.conf并添加以下内容以增加在线进程和资源使用限制。
* 软诺文件65536
*硬nofile 65536
*软nproc 32000
*硬nproc 32000
*硬内存锁无限
*软内存锁无限
执行命令使其生效
源/etc/profile
修改/etc/systemd/system.conf并添加以下内容
默认限制NOFILE=65536
默认限制NPROC=32000
DefaultLimitMEMLOCK=无穷大
重启服务器,或者执行以下两条命令使配置生效。
systemctl 守护进程重新加载
systemctl 守护进程重新执行
修改虚拟内存最大映射数。系统虚拟内存默认最大映射数为65530,无法满足ES系统的要求,需要调整为262144以上。 sudo vi /etc/sysctl.conf
#添加参数
vm.max_map_count=262144
重新加载/etc/sysctl.conf 配置
系统控制-p
4. 拉取镜像
#elasticSearchmirror
docker拉elasticsearch:7.6.2
#elasticSearch-头镜
docker pull mobz/elasticsearch-head:5-alpine
5.启动ElasticSearch
注意:我们的启动参数设置-Xms2g -Xmx2g是根据实际服务器内存进行调整的。
docker运行-d -p 9200:9200 -p 9300:9300 \
-e 'ES_JAVA_OPTS=-Xms2g -Xmx2g' \
-v /usr/local/eclipse2019/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--名称elasticsearch \
--重新启动=始终\
弹性搜索:7.6.2
如果启动时报错:ERROR: bootstrap Checks failed memorylocking requests for elasticsearch process 但内存未锁定,请重启服务器。
6.启动es-head
与2.11.4相同
用户评论
终于到 Canal 和 ELK 的安装部署了!这篇文章讲解非常详细,图文并茂,新手很容易理解。感觉这篇文对这个项目真的很有帮助!
有16位网友表示赞同!
我正在搭建类似的商城微服务项目,看着文章进度条越来越快,心里也激动啊!Canal 和 ELK 都是很重要的组件,这次学习到这些知识,能让我把项目推进更快一步.
有9位网友表示赞同!
说句实话,一直对 Canal 和 ELK 的功能不太了解。看这篇文章才知道他们的作用这么关键!感谢作者分享这篇干货满满的文章,对我来说太实用啦!
有16位网友表示赞同!
感觉Canal和ELK配置起来比较复杂,这篇文章写的很详细,不过我还是有些地方没理解透彻。希望作者能出一些更深入的解析,比如遇到常见问题的解决方案.
有18位网友表示赞同!
我之前也做过类似的项目,对 Canal 和 ELK 的使用有一定的经验。 这篇文章从多个角度讲解了它们的安装部署, 很有参考价值 ,特别是对于新人来说,可以快速上手!
有5位网友表示赞同!
最近在学习微服务架构,刚好遇见这篇文章!太棒了!Canal 和 ELK 是必学项目, 作者的讲解非常清晰易懂, 能让我更容易理解这些概念。
有9位网友表示赞同!
商城微服务的组件搭建确实需要很多细节处理,希望作者下次能分享更多的实战经验,比如如何进行性能调优和故障排查,这对我来说更有帮助!
有16位网友表示赞同!
安装Canal和ELK的过程确实比较繁琐。我按照文章步骤操作了一遍,还是遇到了些问题, 幸好文章配图清晰,最终还是成功了, 感谢作者的分享!
有17位网友表示赞同!
感觉这篇博客写的不错,信息量很足, Canal 和 ELK 的介绍都非常深入。希望以后能了解更多关于微服务项目的实战案例, 这样更能帮助我实际落地项目。
有7位网友表示赞同!
Canal和ELK都是非常棒的工具,文章讲解的很详细,图文结合, 让我对这两者有了更加深刻的理解。期待作者后续分享更多关于容器、网络等相关知识!
有11位网友表示赞同!
我觉得这篇文章的写作风格比较官方, 缺少一些亲切感, 希望作者能用更加通俗易懂的语言来讲解技术要点,这样更能够吸引读者,特别是对技术不太熟悉的人。
有14位网友表示赞同!
Canal 和 ELK 的配置确实需要一定的技术基础, 希望这篇博客能添加一些针对不同水平用户的指导,以便新手也能更容易上手!
有16位网友表示赞同!
文章很棒,帮助我理解了 Canal 和 ELK 它们的作用和安装部署方法。希望能看到更多关于微服务架构的实战案例分析!
有7位网友表示赞同!
Canal 和 ELK 就好像微服务的守护神, 保证系统的稳定运行。希望更多的开发者能够关注这些关键组件, 做好相应的学习和实践!
有15位网友表示赞同!
我个人比较喜欢作者直白的写作风格, 清晰地把技术知识点传达给读者。希望作者能继续分享更多干货满满的博客文章!
有6位网友表示赞同!
这篇文章解决了我的一个问题:如何安装部署Canal 和 ELK?文章讲解非常详细,操作步骤清晰易懂。很感谢作者的贡献!
有17位网友表示赞同!
我觉得文章中关于 Canal 和 ELK 的应用场景介绍比较少, 希望能增加更多具体的案例分析,让读者能够更好地理解它们的现实意义!
有15位网友表示赞同!