• 从阿里云迁移分布式redis实例到华为云解决方案(详细)


    如果要换多数是经济因素啦~

    一、 准备工作

    先在华为云上买一台redis数据库,配置一定要注意多数要保持一致,至于4.0还是5.0倒问题不大亲测兼容

    可用区要找现有ECS云主机中的相同的机器。记下:这台云主机ECS的基本公网ip和密码、新的redis的连接串和密码。

    在阿里云上的原redis数据库创建一个有“复制”权限的账号、记下账号密码和原redis的账号密码

    二、配置华为云主机ECS上的nginx以达到公网访问内网redis数据库

    安装Nginx

    买了ECS后,需要在ECS上安装Nginx。

    1. 执行以下命令,添加Nginx到yum源。

      sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    2. 添加完之后,执行以下命令,查看是否已经添加成功。

      yum search nginx

    3. 添加成功之后,执行以下命令,安装Nginx。

      sudo yum install -y nginx

    4. 启动Nginx并设置为开机自动运行。

      sudo systemctl start nginx.service

      sudo systemctl enable nginx.service

    5. 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。

      如果出现下面页面,则表示安装成功。

    配置Nginx

    Nginx安装后,需要配置请求转发规则,告诉Nginx哪个端口收到的请求,应该转发到后端哪个Redis实例。

    1. 修改配置文件。

      cd /etc/nginx

      vi nginx.conf

      配置示例如下,如果有多个redis实例需要公网连接,可以配置多个server,在proxy_pass中配置Redis实例连接地址。

      stream {
          server {
              listen 8080;
              proxy_pass 192.168.0.5:6379;
          }
      	    server {
              listen 8081;
              proxy_pass 192.168.0.6:6379;
          }
      }
       
      图4 Nginx配置
    2. 重启Nginx服务。

      service nginx restart

    3. 验证启动是否成功。

      netstat -an|grep 808

      图5 启动Nginx及验证

      8080和8081两个端口都在监听状态,Nginx启动成功。

    通过Nginx访问Redis

      1. 登录虚拟私有云控制台,确认跳板机的安全组规则是否放开,如果没有,则需要为安全组放开8080和8081两个端口。
        图6 添加安全组入方向规则
      • 在公网环境中打开Redis命令行界面,输入如下命令,登录与查询都正常,大功告成。

        ./redis-cli -h {myeip} -p {port} -a {mypassword}

        其中,命令中的{myeip}为主机连接地址,需要填写ECS的弹性IP,端口需要填写ECS上Nginx的监听端口。

        如下图所示,设置的2个监听端口分别为8080和8081,对应后端2个Redis实例。

        图7 通过Nginx代理连接第一个Redis实例
        图8 通过Nginx代理连接第二个Redis实例

        至此,就完成了通过跳板机的搭建,实现公网访问Redis4.0和Redis5.0的操作了。

    三、下载使用阿里云同步工具redis-shake

    Redis-shake的sync(同步)模式支持全量数据迁移和增量数据迁移,可实现同一或不同阿里云账号下Redis实例间的数据迁移。

    前提条件

    源和目标Redis实例需分别满足下述条件:
     
    Redis实例需满足的条件
    源Redis实例
    目标Redis实例
     
    说明
    • 如果尚未创建目标Redis实例,请参见步骤1:创建实例
    • 如需跨版本迁移(例如从4.0迁移至5.0),建议您创建按量付费的Redis实例以进行兼容性验证,验证无误后可转换为包年包月。关于如何转换付费模式,请参见转包年包月

    Redis-shake介绍

    Redis-shake是阿里云自研的开源Redis数据传输工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)和同步(sync或rump),易于部署,灵活高效。Redis-shake的sync(同步)模式支持全量数据迁移和增量数据迁移,详细的迁移流程如下图所示:图 1. redis-shake迁移示意图redis-shake迁移示意图
     
    说明 通过DTS的数据同步功能也可以实现数据迁移的需求,且支持更加丰富的场景与功能。更多信息,请参见Redis数据同步方案概览

    注意事项

    • 如果目标库的数据逐出策略(maxmemory-policy)配置为noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍
    • 如果源库中的某些Key使用了过期(expire)机制,由于可能存在Key已过期但未被及时删除的情形,所以在目标库中查看(如通过info命令)到的Key数量会比源库的Key数量少。
       
      说明 源和目标库中,未设置过期机制或未过期的Key数量是一致的。

    适用场景

    • 跨阿里云账号实例间迁移
    • 同一阿里云账号实例间迁移

    操作步骤

    1. 确认Redis-shake待安装的位置,并完成下述操作:
      说明
      • 下表中的Redis实例包含源Redis实例和目标Redis实例,即源和目标Redis实例均需要完成下述操作。
      • 推荐在ECS实例上安装Redis-shake,通过专有网络连接源和目标Redis实例,可获得更低的网络延迟和更高的安全性。
      • 如需执行跨阿里云账号迁移,推荐将Redis-shake部署在源Redis实例所属的阿里云账号的ECS中,通过专有网络连接源Redis实例,可通过公网连接目标Redis实例。
      Redis-shake待安装位置需完成的操作
      ECS实例(推荐)
      1. 确保ECS实例与Redis实例属于同一专有网络(即实例基本信息中的专有网络ID一致)。
        说明
      2. 获取ECS实例的内网IP地址。具体操作,请参见查询ECS实例的IP地址
      3. 将ECS实例的内网IP地址添加至Redis实例的白名单中。具体操作,请参见设置IP白名单
      本地设备
      1. Redis实例默认仅提供内网连接地址,通过公网连接时您需要手动申请公网连接地址。具体操作,请参见申请公网连接地址
      2. 在本地设备上执行curl ipinfo.io |grep ip命令,获取其公网IP地址,返回示例如下:查看公网IP结果
      3. 将本地设备的公网IP地址添加至Redis实例的白名单中。具体操作,请参见设置IP白名单
    2. 安装Redis-shake。
      1. 登录待安装Redis-shake的设备,例如ECS实例或本地设备。
      2. 执行下述命令下载Redis-shake文件:
        wget 'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2.0.3.tar.gz'
        说明 本文以2.0.3版本为例演示操作流程,您也可以安装其他版本。更多信息,请参见RedisShake版本列表
      3. 执行下述命令解压Redis-shake文件:
        tar xzf redis-shake-v2.0.3.tar.gz
    3. 在安装Redis-shake的设备上,执行数据迁移。
      1. 执行下述命令进入解压后的目录并修改配置文件:
        cd redis-shake-v2.0.3/ && vim redis-shake.conf
        说明 执行命令后,系统将进入编辑界面,输入a可进入编辑模式。
        表 1. 主要参数说明
        参数是否必选说明取值示例
        source.type 根据源Redis实例的架构选择,取值: standalone
        source.address 源Redis实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。关于如何获取连接地址和端口号,请参见查看连接地址
        • ECS实例通过专有网络连接:需获取Redis实例的专有网络连接地址。
        • 本地设备通过公网连接:需获取Redis实例的公网连接地址。
        说明 如果源Redis实例为集群架构,您需要通过直连地址连接(网络类型为专有网络),且在填写连接地址时需要添加master@前缀,例如master@r-bp1mfnrflszg75w****.redis.rds.aliyuncs.com:6379。关于如何申请直连地址,请参见开通直连访问
        r-bp1mfnrflszg75w****.redis.rds.aliyuncs.com:6379
        source.password_raw 源Redis实例的账号(需具备复制权限)及其密码,账号和密码之间使用英文冒号(:)分隔。关于如何创建账号,请参见创建与管理账号
        说明 集群架构的实例暂不支持创建复制权限的账号,您需要提交工单申请开通该功能。
        testaccount:Rp829dlwa
        target.type 根据目标Redis实例的架构选择,取值: cluster
        target.address 目标Redis实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。关于如何获取连接地址和端口号,请参见查看连接地址
        • ECS实例通过专有网络连接:需获取Redis实例的专有网络连接地址。
        • 本地设备通过公网连接:需获取Redis实例的公网连接地址。
        说明 如果目标实例为集群架构,您需要通过直连地址连接(网络类型为专有网络),且在填写连接地址时需要添加master@前缀,例如master@r-bp1mfnrflszg75w****.redis.rds.aliyuncs.com:6379。关于如何申请直连地址,请参见开通直连访问
        master@r-bp1mfnrflszg75w****.redis.rds.aliyuncs.com:6379
        target.password_raw 目标Redis实例的账号(需具备读写权限)及其密码,账号和密码之间使用英文冒号(:)分隔。关于如何创建账号,请参见创建与管理账号 testaccount:Rp829dlwa
        target.db 是否将源Redis实例中所有库的数据都迁移至目标Redis实例的指定库中,取值:
        • -1(默认值):不启用该功能。
        • 0~255:启用该功能并将取值作为目标Redis实例的指定库。例如取值为0,表示将源Redis实例中所有库的数据汇总迁移至目标Redis实例的数据库0中。
        说明 如果源Redis实例为标准架构,目标Redis实例为集群架构,此场景仅会同步数据库0,其他数据库的数据不会被迁移。此时,将该参数设置为0,可将源实例的所有数据库全部迁移至目标实例的数据库0中。
        -1
        key_exists 当源Redis实例中的Key与目标Redis实例中的Key相同时,采取的数据写入策略,取值:
        • rewrite:覆盖写入至目标库。
        • none:默认值,停止运行Redis-shake程序并提示冲突的Key。
        • ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移。
        rewrite
        filter.db.whitelist 需要迁移的库名,多个库名间用英文分号(;)分隔,默认为空,即迁移所有库。 0;1
        filter.db.blacklist 不需要迁移的库名(即黑名单),多个库名间用英文分号(;)分隔。默认为空,即不设置黑名单。 1;2
        parallel Redis-shake执行迁移的并发线程数,适当调大该值可提高同步性能。
        说明 默认值为32,最小值为1,最大值取决于Redis-shake所在服务器的性能。
        32
        说明 其他参数如无特殊需求不需要配置,如需了解更多,请查看redis-shake.conf文件中各参数的注释。
      2. 按下ECS键退出编辑模式,输入:wq并按回车键保存配置并退出编辑界面。
      3. 执行下述命令启动Redis-shake,开始执行数据迁移:
        ./redis-shake.linux -type=sync -conf=redis-shake.conf
        Redis-shake将在屏幕上打印运行的日志信息。
        说明 如果出现提示报错,相关原因及解决方法,请参见常见报错及解决方法
    4. 可选:选择合适的时机,结束数据迁移任务。
      说明 如果您需要长期运行Redis-shake用于实时迁移数据,无需执行本步骤。
      1. 观察打印的日志,等待迁移任务进入增量数据迁移状态。
        迁移任务阶段对应打印的日志
        全量数据迁移
        2020/12/16 21:02:36 [INFO] DbSyncer[0] total = 4.00MB -       2.18MB [ 54%]  entry=52199
        2020/12/16 21:02:36 [INFO] DbSyncer[0] total = 4.00MB -       4.00MB [100%]  entry=97531
        2020/12/16 21:02:36 [INFO] DbSyncer[0] sync rdb done
        说明 当打印的日志出现sync rdb done,表示完成全量数据迁移,接下来进入增量数据迁移阶段。
        增量数据迁移
        2020/12/16 21:03:07 [INFO] DbSyncer[0] sync:  +forwardCommands=5      +filterCommands=0      +writeBytes=5095
        2020/12/16 21:03:08 [INFO] DbSyncer[0] sync:  +forwardCommands=7      +filterCommands=0      +writeBytes=7133
        2020/12/16 21:03:09 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
        2020/12/16 21:03:10 [INFO] DbSyncer[0] sync:  +forwardCommands=645    +filterCommands=0      +writeBytes=657255
        2020/12/16 21:03:11 [INFO] DbSyncer[0] sync:  +forwardCommands=28     +filterCommands=0      +writeBytes=28532
        2020/12/16 21:03:12 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
        日志信息中各参数说明如下:
        • forwardCommands:源Redis实例发送过来的命令数。
        • filterCommands:被过滤的命令数,例如在Redis-shake配置文件中设置了过滤某些库。
        • writeBytes:源Redis实例发送过来的字节数。

    暂停向源Redis实例写入数据,等待返回日志中writeBytes对应值连续多次为0时,使用Ctrl+C组合键停止运行Redis-shake。

    图 2. 停止运行示例停止运行示例
     
    说明 此时源和目标实例的数据完全一致,您可以将业务的数据库服务由源Redis实例切换至目标Redis实例。
     

     

    四、检查服务是否正常

    参考:

    https://help.aliyun.com/document_detail/117311.html?spm=a2c4g.11186623.6.653.344f3b69KaDUif
    https://support.huaweicloud.com/bestpractice-dcs/dcs-bp-0514001.html

    ------ 往事如烟,伴着远去的步伐而愈加朦胧。未来似雾,和着前进的风儿而逐渐清晰!
  • 相关阅读:
    bind智能DNS + bindUI管理系统(mysql + bind dlz)
    什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
    rsyn同步软链接保持不变
    yaml,json,ini这三种格式用来做配置文件优缺点
    自动挡车档位介绍
    "挡位"还是"档位",究竟谁错了
    Gitlab备份与恢复、迁移与升级
    树的名称大全
    手动档正确换档手势
    gitlab HA集群
  • 原文地址:https://www.cnblogs.com/cutesnow/p/14623147.html
Copyright © 2020-2023  润新知