本文介绍通过阿里云LogstashService(简称Logstash),迁移阿里云RDS MySQL数据到阿里云Elasticsearch(简称ES)中。阿里云Logstash支持开源Logstash所支持的所有插件。

前提条件

  • 请确保已经在阿里云RDS MySQL服务中准备了测试数据,并在RDS MySQL的白名单中加入了阿里云Logstash节点的IP地址(可在基本信息页面获取)。

    设置白名单的具体步骤请参见设置白名单

  • 请确保已经创建了阿里云Logstash实例,并上传了与RDS MySQL版本兼容的SQL JDBC驱动。

    创建Logstash的具体步骤请参见创建阿里云LogstashService实例

    上传SQL JDBC驱动的具体步骤请参见配置扩展文件

  • 请确保网络可以连通,即RDS MySQL、阿里云Logstash、阿里云ES处于同一专有网络VPC(Virtual Private Cloud)中。

    您也可以使用公网环境的服务,前提是需要通过配置NAT网关实现与公网的连通,详情请参见NAT公网数据传输配置

  • 请确保已经创建了目标阿里云ES实例,并开启了自动创建索引功能。

    创建阿里云ES实例的具体步骤请参见创建阿里云Elasticsearch实例

    开启自动创建索引功能的具体步骤请参见开启自动创建索引

操作步骤

  1. 登录阿里云Logstash控制台
  2. 在顶部菜单栏处,选择地域。
  3. 实例列表页面,单击目标实例ID/名称链接,或者单击操作列下的实例管理
  4. 单击左侧导航栏的管道管理
  5. 管道列表区域中,单击创建管道
    创建管道
  6. 创建管道任务页面,进行Config配置。
    本文使用的Config配置如下。
    input {
      jdbc {
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_driver_library => "/ssd/1/share/ls-cn-4590000003/logstash/current/config/custom/mysql-connector-java-6.0.2.jar"
        jdbc_connection_string => "jdbc:mysql://rm-bp****00000000.mysql.rds.aliyuncs.com:3306/my_library?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowLoadLocalInfile=false&autoDeserialize=false"
        jdbc_user => "xxxxx"
        jdbc_password => "xxxx"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        statement => "select * from student where id >= :sql_last_value"
        schedule => "* * * * *"
        tracking_column_type => "numeric"
        use_column_value => true
        tracking_column => "id"
      }
    }
    filter {
    }
    output {
     elasticsearch {
        hosts => "es-cn-0h****dd0hcbnl.elasticsearch.aliyuncs.com:9200"
        index => "dd_circle_scene_1030"
        user => "elastic"
        password => "xxxxxxx"
      }
    }
    表 1. input参数说明
    参数 描述
    jdbc_driver_class JDBC Class配置。
    jdbc_driver_library 指定JDBC连接MySQL驱动文件。
    jdbc_connection_string 配置数据库连接的域名、端口及数据库。
    jdbc_user 数据库用户名。
    jdbc_password 数据库密码。
    jdbc_paging_enabled 是否启用分页,默认false。
    jdbc_page_size 分页大小。
    statement 指定SQL语句。
    schedule 指定定时操作,"* * * * *"表示每分钟定时同步数据。
    use_column_value 是否需要记录某个column的值。
    tracking_column_type 跟踪列的类型,默认是numeric。
    tracking_column 指定跟踪列,该列必须是递增的,一般是MySQL主键。
    last_run_metadata_path 将上次执行的tracking_column字段的值记录下来,保存到last_run_metadata_path指定的文件中。目前后端开放了/ssd/1/ls-cn-xxxxxxx/logstash/data/路径来保存文件。
    注意
    • 以上配置按照测试数据配置,在实际业务中,请按照业务需求进行合理配置。input插件支持的其他配置选项请参见官方Logstash Jdbc input plugin文档。
    • 如果配置中有类似ast_run_metadata_path的参数,那么需要阿里云Logstash服务提供文件路径。目前后端开放了/ssd/1/ls-cn-xxxxxxx/logstash/data/路径供您测试使用,且该目录下的数据不会被删除。因此在使用时,请确保磁盘有充足的使用空间。
    • 为了提升安全性,如果在配置管道时使用了JDBC驱动,需要在jdbc_connection_string参数后面添加allowLoadLocalInfile=false&autoDeserialize=false,否则当您在添加Logstash配置文件的时候,调度系统会抛出校验失败的提示,例如jdbc_connection_string => "jdbc:mysql://xxx.drds.aliyuncs.com:3306/test-database?allowLoadLocalInfile=false&autoDeserialize=false"

    Config配置详情请参见Logstash配置文件说明

  7. 单击下一步,配置管道参数。
    管道参数配置
    表 2. 管道配置参数说明
    参数 说明
    管道ID 必选,自定义输入。
    管道工作线程 并行执行管道的Filter和Output的工作线程数量。当事件出现积压或CPU未饱和时,请考虑增大线程数,更好地使用CPU处理能力。默认值:实例的CPU核数。
    管道批大小 单个工作线程在尝试执行Filter和Output前,可以从Input收集的最大事件数目。较大的管道批大小可能会带来较大的内存开销。您可以设置LS_HEAP_SIZE变量,来增大JVM堆大小,从而有效使用该值。默认值:125。
    管道批延迟 创建管道事件批时,将过小的批分派给管道工作线程之前,要等候每个事件的时长,单位为毫秒。默认值:50ms。
    队列类型 用于事件缓冲的内部排队模型。可选值:
    • memory:默认值。基于内存的传统队列。
    • persisted:基于磁盘的ACKed队列(持久队列)。
    队列最大字节数 请确保该值小于您的磁盘总容量。默认值:1024MB。
    队列检查点写入数 启用持久性队列时,在强制执行检查点之前已写入事件的最大数目。设置为0,表示无限制。默认值:1024。
    警告 配置完成后,需要进行保存和部署才能生效。保存和部署操作会触发实例变更,请在不影响业务的前提下,继续执行以下步骤。
  8. 单击保存或者保存并部署
    • 保存:将管道信息保存在Logstash里并触发实例变更,但不会触发配置。保存后,系统会返回管道管理页面。可在管道列表区域,单击操作栏下的立即部署,触发配置。
    • 保存并部署:保存并且部署后,才会真正触发配置(也会触发实例变更)。
  9. 结果验证。
    1. 登录目标阿里云ES实例的Kibana控制台。
      登录控制台的具体步骤请参见登录Kibana控制台
    2. 单击左侧导航栏的Dev Tools(开发工具)。
    3. Dev Tools页面的Console中,执行以下命令。
      GET /dd_circle_scene_1030/_search
      运行成功后,结果如下。运行结果