您的位置:首页 > 运维架构 > Docker

【Docker】:docker安装elasticsearch和logstash并且实现mysql和es的数据同步功能(logstash:5.6.15,elasticsearch5.6.15,head)

2020-04-09 19:24 573 查看

**

【Docker】:docker安装elasticsearch和logstash并且实现mysql和es的数据同步功能(logstash:5.6.15,elasticsearch5.6.15,head)

**

采用挂载的方式启动es以及logstash 可以不污染主机,并且方便修改的优势而很受大家欢迎,避免了安装es之后还需要更改配置文件,加上跨域访问等等 可以跨过许多坑少走弯路,希望对大家有所帮助 下面的配置文件和驱动下载地址在最下面

首先你的有docker的环境这是必须的就先不说了
1.首先下载es head 以及 logstash 镜像
docker pull yeguangying/els
docker pull yeguangying/head
docker pull yeguangying/logstash
2.首先挂载启动 es,这里默认是集群的配置
network.host: 47.42.57.74
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 47.42.57.74
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: “*”
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: [“47.42.57.74:9300”,“47.42.57.74:9301”]
discovery.zen.minimum_master_nodes: 1

network.host:47.42.57.74
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 47.42.57.74
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["47.42.57.74:9300","47.42.57.74:9301"]
discovery.zen.minimum_master_nodes: 1

由此可见 ,cluster.name 需要一样, node.name 不能一样 node.master 一个需要master为true 其他的都是false
discovery.zen.ping.unicast.hosts要写上去全部的ip地址

最为关键的来了,discovery.zen.minimum_master_nodes 的数值是集群即机器数量减1

然后挂载配置文件分别启动就可以啦

docker run -d -e"ES_JAVA_OPTS=-Xms512m -Xmx512m"  -v d:/elasticsearch22/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name es1 -p 9200:9200 -p 9300:9300 yeguangying/es

注意 最好加上 内存设置512不然会因为内存过大而导致启动一个,顶掉上一个尴尬事件

分别启动集群上个各个机器就可以了 如果是同一台机器 模拟集群的话, name不能一样哦 把ip端口也要变哦

docker run -d -e"ES_JAVA_OPTS=-Xms512m -Xmx512m"  -v d:/elasticsearch22/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name es2 -p 9201:9201 -p 9301:9301 yeguangying/es

到此刻 es的集群应该是启动成功了

下一步启动head

docker run -d --name head -p 9100:9100 yeguangying/head

启动成功就可以啦

最后一步 启动logstash

首先建一个 config的文件夹 这文件夹名字随意哈

以上logstash.yml 内容如下

input {
jdbc {
jdbc_driver_library => "/usr/share/logstash/config/mysql-connector-java-5.1.46-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://47.42.34.74:3306/db_farm"
jdbc_user => "root"
jdbc_password => "f4ltMe0utHB"
schedule => "* * * * *"
statement => "SELECT * FROM t_answer"
type => "genus"
}

}
output {
if [type] == "genus"{
elasticsearch {
hosts => "http://47.42.34.74:9200"
index => "answer"
document_id => "%{id}"
document_type => "answer"
}
}
}

当然啦如果你是多表同步的话, 那就根据type 来就可以啦
type=“genus” 这个可以自定义,就不会出问题啦

这时候挂载启动 logstash 就可以啦

docker run -d  -v d:/docker/config:/usr/share/logstash/config --name logstash  yeguangying/logstash

这时候可以看一下日志数据库

数据同步成功啦
不管用户数据是修改还是新增都能实时变化哦 删除是不行的哦

快要结束了我来讲一个我遇到的最大的坑,卡了我3天才解决的大坑
我一开始在windows本地安装的docker 你们也能看到我挂载的都是D盘
一开始都很正常,启动logstash也不报错,但就是不同步数据
最后我放在liunx服务器上发现就好了,就好了,就好了
原来在windows下挂载logstash的同属mysql 数据无效啊,到现在也不知道为啥,不知道有哪位大神知道和我说一下

具体配置文件以及驱动下载地址点击我

  • 点赞
  • 收藏
  • 分享
  • 文章举报
oYeYing123456 发布了1 篇原创文章 · 获赞 0 · 访问量 42 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: