docker + elasticsearch集群搭建 + logstash mysql数据库同步

搭建集群

docker 拉取镜像

docker pull elasticsearch:2.3.4

创建数据文件夹和配置用于映射

[root@localhost soft]# pwd
/home/soft
[root@localhost soft]# mkdir -p ES/config
[root@localhost soft]# cd  ES 
[root@localhost ES]# mkdir data
[root@localhost ES]# cd ES/config/
[root@localhost ES]# firewall-cmd --add-port=9300/tcp
success

创建配置文件

cluster.name: elasticsearch-cluster
# 节点名称
node.name: es-node-1
network.bind_host: 0.0.0.0
# 节点IP
network.publish_host: 192.168.0.54
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: ["192.168.9.219:9300","192.168.9.219:9301","192.168.9.219:9302"]
discovery.zen.minimum_master_nodes: 2
# 指定主节点的名称3版本以上的指定这个会报错
cluster.initial_master_nodes: es-node-1

其他节点的配置文件跟这个差不多,改一下iP、节点名就可以

为了防止 bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] 错误需要改一个配置

vim /etc/sysctl.conf

# 加入
vm.max_map_count=262144 

# 启动配置
sysctl -p

启动容器

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/soft/ES/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data:/usr/share/elasticsearch/data --restart=always --name ES elasticsearch:2.3.4

在浏览器地址栏访问http://192.168.0.54:9200/_cat/nodes?pretty 查看节点状态

搭建可视化界面

docker pull containerize/elastichd

# 如果本地搭建的es数据库可以使用--link 默认连接到本地数据库
docker run -p 9800:9800 -d --link elasticsearch:demo containerize/elastichd

# 如果本地没有搭建es数据库,写--link会报错。使用下面命令启动
docker run -p 9800:9800 -d containerize/elastichd

http://localhost:9800

搭建mysql同步

logstash 依赖于jdk1.8以上

安装jdk

下载路径

链接: https://pan.baidu.com/s/1JmauqpR5-uDBIKcSLjmDhw  密码: ojqw
--来自百度网盘超级会员V6的分享

解压

# 将下载的tar.gz 解压到当前路径下
tar -zxvf jdk-8u201-linux-x64.tar.gz
'''
命令介绍:
tar      备份文件
-zxvf     
-z                 通过gzip指令处理备份文件
-x                 从备份文件中还原文件
-v                 显示指令执行过程
-f                  指定备份文件
jdk-8u201-linux-x64.tar.gz    文件名

配置环境变量

#vim 打开profile
vim /etc/profile
#在最后一行输入
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
  
#使配置生效
source /etc/profile

#检查
java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

 同步mysql依赖于mysql驱动

链接: https://pan.baidu.com/s/1B01jJFdFP7JlAaoreWSrUg 密码: vn7d
--来自百度网盘超级会员V6的分享

# 下载好之后解压出来,记住路径配置到下面的配置文件中

下载一个跟es数据库版本相匹配的logstash

官网:https://www.elastic.co/cn/downloads/past-releases/logstash-2-3-4

# 后面三位数字就是版本号,我用的是2.3.4版本的es数据库,所以后面的数字就是2-3-4,根据自己的版本更改就行

单input配置文件

input {
    jdbc {
        # 设置 MySql/MariaDB 数据库url以及数据库名称
        jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/database"
        # 用户名和密码
        jdbc_user => "数据库账号"
        jdbc_password => "数据库密码"
        # 数据库驱动所在位置,可以是绝对路径或者相对路径
        jdbc_driver_library => "/root/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
        # 驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        # 开启分页
        jdbc_paging_enabled => "true"
        # 分页每页数量,可以自定义
        jdbc_page_size => "10000"
        # 执行的sql文件路径
        #statement_filepath => "xxx.log"
        # 执行的sql语句
        statement => "select * from table"
        # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
        schedule => "* * * * *"
        # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
        # use_column_value => true
        # 记录上一次追踪的结果值
        last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
        # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
        clean_run => false
        # 数据库字段名称大写转小写
        lowercase_column_names => false
        }
}
output {
    elasticsearch {
        # es地址
        hosts => ["192.168.0.54:9200","192.168.0.55:9200","192.168.0.56:9200"]
        # 同步的索引名,这里只需要指定索引名称,会自动创建对应数据库表格式的内容
        index => "索引名称"
        # 设置_docID和数据相同
        document_id => "%{id}"
    }
    # 日志输出
    stdout {
        codec => json_lines
    }
}

多input配置

input {
    jdbc {
        # 设置 MySql/MariaDB 数据库url以及数据库名称
        jdbc_connection_string => "jdbc:mysql://host:端口/库名"
        # 用户名和密码
        jdbc_user => "数据库用户"
        jdbc_password => "数据库密码"
        # 数据库驱动所在位置,可以是绝对路径或者相对路径
        jdbc_driver_library => "/root/utils/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
        # 驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        # 开启分页
        jdbc_paging_enabled => "true"
        # 分页每页数量,可以自定义
        jdbc_page_size => "10000"
        # 执行的sql文件路径
        #statement_filepath => "路径"
        # 执行的sql语句
        statement => "select * from table"
        # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
        schedule => "* * * * *"
        # 索引类型
        type => "order"
        # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
        # use_column_value => true
        # 记录上一次追踪的结果值
        last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
        # 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
        # tracking_column => "updated_time"
        # tracking_column 对应字段的类型
        #tracking_column_type => "timestamp"
        # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
        clean_run => false
        # 数据库字段名称大写转小写
        lowercase_column_names => false
        }
}

input {
    jdbc {
        # 设置 MySql/MariaDB 数据库url以及数据库名称
        jdbc_connection_string => "jdbc:mysql://rm-bp1yng8jhwlt254w0yo.mysql.rds.aliyuncs.com:3306/zhanhong_erp3"
        # 用户名和密码
        jdbc_user => "til"
        jdbc_password => "til$$520"
        # 数据库驱动所在位置,可以是绝对路径或者相对路径
        jdbc_driver_library => "/root/utils/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
        # 驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        # 开启分页
        jdbc_paging_enabled => "true"
        # 分页每页数量,可以自定义
        jdbc_page_size => "10000"
        # 执行的sql文件路径
        #statement_filepath => "路径"
        # 执行的sql语句
        statement => "select * from table"
        # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
        schedule => "* * * * *"
        # 索引类型
        type => "goods"
        # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
        # use_column_value => true
        # 记录上一次追踪的结果值
        last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
        # 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
        # tracking_column => "updated_time"
        # tracking_column 对应字段的类型
        #tracking_column_type => "timestamp"
        # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
        clean_run => false
        # 数据库字段名称大写转小写
        lowercase_column_names => false
        }
}

output {
    if "order" == [type]{
        elasticsearch {
            # es地址
            hosts => ["192.168.0.54:9200","192.168.0.55:9200","192.168.0.56:9200"]
            # 同步的索引名
            index => "erp_order"
            # 设置_docID和数据相同
            document_id => "%{id}"
        }
    }
    if "goods" ==  [type]{
        elasticsearch {
            # es地址
            hosts => ["192.168.0.54:9200","192.168.0.55:9200","192.168.0.56:9200"]
            # 同步的索引名
            index => "erp_goods"
            # 设置_docID和数据相同
            document_id => "%{id}"
        }

    }
    # 日志输出
    stdout {
        codec => json_lines
    }
}

启动命令

/root/logstash-2.3.4/bin/logstash -f 配置文件路径
原文地址:https://www.cnblogs.com/wtil/p/14992261.html