**
【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 数据无效啊,到现在也不知道为啥,不知道有哪位大神知道和我说一下