(八) elasticsearch手把手搭建生产环境ELK加kafka实现分布式日志收集总结
前八个博客讲到的都是单机版日志收集. es,kafak logstash 都是基于一台机子搭建的.最近跟公司又申请了一台机器用于搭建es和kafak以及logstash的集群.以保证高可用.
因为另一台机子使用了原有机器的镜像 ,所以凡是第一台机器上面搭建过的软件全部都给clone过来了的.所以不用重新进行elk+kafka的搭建.这里提供阿里云的镜像复制方法:
首先实现镜像的快照生成https://help.aliyun.com/document_detail/25460.html?spm=a2c4g.11174283.6.747.367252feeisRyP
然后生成完毕之后,使用自定义镜像创建实例.https://help.aliyun.com/document_detail/25465.html?spm=a2c4g.11186623.2.26.b0801f6eK7ZCsd#task-w5v-sgv-xdb
上面两步完成之后ecs实例的clone就实现了.好了,回归正题
1.修改es的配置文件
vim elasticsearch.yml
要修改的内容如下(两台机器的配置文件都按照如下修改):
node.name: node-2 #这是第二台机子,第一台命名为node-1
network.host: 116.62.13.26 #这里改成新买的机器的外网ip
discovery.zen.ping.unicast.hosts: ["116.62.13.26", "101.37.32.7"] #这里配置上两台机器的ip
#下面的配置都原封不动,,,,记住,node.master一定要都为true.
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
#这里都设置为1
discovery.zen.minimum_master_nodes: 1
2.然后进行挨个启动机器
发现报错如下:failed to send join request to master.....
解决方法:因为机器是克隆过来的.所以新机器中的node节点要删除.不然会发生重复的问题. 删除下面的nodes节点会发现启动正常.
1.修改kafka的配置文件.
vim server.properties
要修改的内容如下(两台机器的配置文件都按照如下修改):
#ip肯定要变成当前机器的了
advertised.listeners=PLAINTEXT://116.62.13.26:9092
#这里要分别修改为0 和1 用来区分节点.两台机器要确保不同.
broker.id=1
#zookeeper连接还跟原来的一样.
2.启动报错如下:
Configured broker.id 1 doesn't match stored broker.id 0 in meta.properties.
修改方法: 老机器的broker.id是新设置的 原来默认自己生成...现在改了 之后会和原来自动生成的不一样.
而logs/目录下的一个文件 meta.properties中的broker.id需要修改成最新的.
vim meta.properties
#
#Wed Feb 19 16:57:49 CST 2020
version=0
broker.id=0 #这里要跟server.properties中配置的一样,记得两台机器都要改
3.再次启动.
发现又报错了....ERROR [KafkaApi-0] Number of alive brokers '0' does not meet the required replication factor '1' for。。。。。
但是这次并不会挂掉...但是看着不爽..
我们再次修改一些server.properties的文件.
#看解释应该是集群节点的数量....所以我们将原来的1修改为2...因为变成两台机器了嘛
# For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3.
offsets.topic.replication.factor=2
4.再次启动.
发现还是报错. 不过看到最后....会发现This error can be ignored if the cluster is starting up and not all brokers are up yet.
所以,意思是这个错可以被忽略,,,,只要另一个节点启动就没事儿了.
Number of alive brokers '0' does not meet the required replication factor '2' for the offsets topic (configured via 'offsets.topic.replication.factor'). This error can be ignored if the cluster is starting up and not all brokers are up yet. (kafka.server.KafkaApis)
然后就大功告成了...是不是so easy ......不是,,,,,这么多坑...不一次性说完.苦瓜脸.
直接启动新买的机器上的logstash即可,配置要跟原来的一模一样.因为配置的是监听kafka主题。由于这个集群使用的是同一个groupid ,并不会出现logstash重复消费kafka集群的问题。
但是,,但是,,,但是....logstash 配置要改一下...
原来是这样的
kafka {
bootstrap_servers => "101.37.32.70:9092"
topics => ["uatbacklog"]
client_id => "uatbacklog" #需要指定client_id,否则logstash启动报错
#codec => "json"
type => "uatbacklog"
}
现在要改成这样 因为kafka变成集群了嘛
kafka {
bootstrap_servers => "101.37.32.7:9092,116.62.13.26"
topics => ["devlog"]
group_id => "adgroup" #这里增加组.必须唯一,是logstash集群消费kafka集群的身份标识。
client_id => "devlog" #需要指定client_id,否则logstash启动报错
#codec => "json"
type => "devlog"
}
然后启动之后发现项目中的kafka日志发送一直报一个错
partitions have leader brokers without a matching listener
然后发现kafka的配置文件中配置的zookeeper是一个.而kafka要想启动并被访问到,zookeeper必须也得搭建集群.
哎.没办法继续呗
1.下载并且安装zookeeper安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
2. 解压安装包
tar -zxvf zookeeper-3.4.10.tar.gz
3. 重命名
mv zookeeper-3.4.10 zookeeper
4.修改zoo_sample.cfg文件
cd /opt/zookeeper/config
mv zoo_sample.cfg zoo.cfg
5.修改conf: vi zoo.cfg 修改两处
(1) dataDir=/usr/local/zookeeper/data(注意同时在zookeeper创建data目录)
(2)最后面添加
server.0=192.168.212.174:2888:3888
server.1=192.168.212.175:2888:3888
6.非常重要....开通2888和3888的端口号.
7.然后启动zookeeper,
完了之后发现虽然ps grep能找到zookeeper 但是./zkServer.sh status 还是报zookeeper没有启动成功.
解决方法:
查看bin目录下的zookeeper.out 发现报错:
然后删除/data 中的 pid 信息,以及versionno信息后重新启动...不报错了.
8.zookeeper集群搭建完毕之后需要在kafka的配置文件修改集群地址.
zookeeper.connect=101.37.32.7:2181,116.62.13.26:2181
然后重启kafka
9.切结,,,切记,,切记...先启动zookeeper 在启动kafka .....不然注册不上去.
好了,接下来就是在代码中配置集群地址.如下:
spring:
data:
elasticsearch:
####集群名称
cluster-name: duduyl-serach
####地址
cluster-nodes: 101.37.32.7:9300,116.62.13.26:9300
####防止健康检查报错.
elasticsearch:
rest:
uris: ["http://101.37.32.7:9200","http://116.62.13.26:9200"]
kafka:
bootstrap-servers: 101.37.32.7:9092,116.62.13.26:9092
然后启动项目.大功告成.