绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
数据库系统管理-数据重分布
2020-01-07 15:29:37

操作场景

分布式部署模式下,用户可以使用数据搬迁工具完成数据重分布,使得分片之间数据均衡,保证访问性能。

前提条件

  • DN设备节点扩容正常。
  • 待搬迁表所在数据库环境已经部署逻辑复制工具。
  • 运行环境需已安装Python2.7.x版本。
  • 获取逻辑复制工具安装包GaussDB_100_1.0.1-ZEBRATOOL.tar.gz,该包位于GaussDB_100_1.0.1-TOOLS.tar.gz压缩包下。

注意事项

  • 非业务高峰期间进行扩容,避免影响正常业务性能(CPU、内存、磁盘I/O、网络I/O)。
  • 操作数据重分布期间禁止数据库集群主备倒换。
  • 搬迁表由用户决策,不能由工具自动完成。
  • 搬迁的表空间,占用不超过上限的50%。
  • 涉及搬迁表LOB类型字段大小不超过2G。
  • 仅支持搬迁heap类型的用户表。
  • 仅支持同一用户下的表搬迁

操作步骤-配置并启动数据重分布

  1. omm用户身份登录GaussDB 100 CN所在服务器。
  2. 按规划创建存放逻辑复制工具的目录。


    mkdir -p /opt/software/tools

  3. 将数据重分布工具安装包GaussDB_100_1.0.1-ZEBRATOOL.tar.gz上传至规划目录/opt/software/tools下。
  4. 进入数据重分布工具的存放目录。

    cd /opt/software/tools

  5. 将数据重分布工具安装包解压到已规划好的/opt/software/tools目录。安装包解压后生成文件夹GaussDB_100_1.0.1-ZEBRATOOL。
    tar -zxvf GaussDB_100_1..1-ZEBRATOOL.tar.gz -C /opt/software/tools

  6. 获取Python驱动包。以EULEROS为例,Python2的动态库在安装包目录下“GaussDB_100_1.0.1-CLIENT-PYTHON-EULER20SP8-64bit”文件夹中;安装包中包含libzeclient.so、pyzenith.so和__init__.pyc。将这三个文件拷贝到zebratool目录。
  7. 获取GaussDB_100_1.0.1-CLUSTER-EULER20SP8-64bit.tar.gz并解压,将其中lib目录和script目录拷贝到zebratool目录中。
  8. 安装zebratool目录中的工具运行所用到的pexpect和ptyprocess工具

    首先在当前路径下解压两个工具包,然后切换到root用户,后切换到zebratool目录,执行安装操作

    先安装ptyprocess在安装pexpect,下面以ptyprocess为例,pexpect安装方法与ptyprocess相同

    [omma@zebratool]\>su - root
    Password:
    Last login: Tue Sep 24 17:38:38 CST 2019 from 10.134.183.149 on pts/6
    [root@host236 ~]#cd /opt/software/tools/GaussDB_100_1.0.1-ZEBRATOOL/zebratool
    [root@host236 zebratool]#cd ptyprocess-0.6./
    [root@host236 ptyprocess-0.6.]#python setup.py install
    running install
    running build
    running build_py
    creating build
    creating build/lib
    creating build/lib/ptyprocess
    copying ptyprocess/__init__.py -> build/lib/ptyprocess
    copying ptyprocess/util.py -> build/lib/ptyprocess
    copying ptyprocess/_fork_pty.py -> build/lib/ptyprocess
    copying ptyprocess/ptyprocess.py -> build/lib/ptyprocess
    running install_lib
    running install_egg_info
    Writing /usr/lib/python2.7/site-packages/ptyprocess-0.6.-py2.7.egg-info
    [root@zebratool]#python
    Python 2.7.5 (default, Oct 11 2015, 17:47:16)
    [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import ptyprocess
    >>> ptyprocess.__path__
    ['/usr/lib/python2.7/site-packages/ptyprocess']
    >>> exit()
    [root@zebratool]#chmod 755 -R /usr/lib/python2.7/site-packages/ptyprocess

    在pexpect安装过程中,可能出现如下提示,此提示可忽略,不影响正常安装。

    File "/usr/lib/python2.7/site-packages/pexpect/_async.py", line 20
    transport, pw = yield from asyncio.get_event_loop()\
    ^
    SyntaxError: invalid syntax

  9. 使用加密脚本创建CN_INFO或DN_INFO中的user用户登陆CN或DN的秘钥路径,进入zebratool目录。

    cd GaussDB_100_1.0.1-ZEBRATOOL/zebratool
    python encrypttool.py cn_passwd 123456
    #其中cn_passwd代表目录名称,工具会在当前目录下生成cn_passwd目录,用于存放用户输入的数据库用户密码加密后生成的加密文件;123456代表用户在配置文件中配置的重分布表的用户对应的密码。
    cd cn_passwd
    --查看存放密钥的文件
    [omm@plat1 cn_passwd]$ ll
    total 12
    -rw------- 1 24 Sep 3 22:01 factorstore.dat
    -rw------- 1 24 Sep 3 22:01 privilege.dat
    -rw------- 1 69 Sep 3 22:01 workerstore.dat

  10. 在repconf_db.json配置重分布任务。
    vi repconf_db.json
    {
    "CN_INFO":[
    {
    "host": "88.88.88.88",
    "port": "1888",
    "user": "shard",
    "passwd": "path_to_dir_of_encrypted_string"
    }
    ],
    "DN_INFO":[
    {
    "host": "88.88.88.88",
    "port": "9888",
    "user": "shard",
    "passwd": "path_to_dir_of_encrypted_string"
    }
    ],
    "parallellevel":10,
    "gap_time":20,
    "logicrep_user":"lrep",
    "bill_user":"shard",
    "tasklist":[
    {
    "tablename":"apple",
    "stagingtablename":"staging_apple",
    "sql":"create table staging_apple(a INT CONSTRAINT apple primary key, staff_name VARCHAR(16))distribute by RANGE
    (a) (groupid 1 VALUES LESS THAN (50000),groupid 2 VALUES LESS THAN (150000))",
    "backupname":"apple_bak"
    },
    {
    "tablename":"orange",
    "stagingtablename":"staging_orange",
    "sql":"create table staging_orange(a INT CONSTRAINT orange primary key, staff_name VARCHAR(16))distribute by RAN
    GE (a) (groupid 1 VALUES LESS THAN (50000),groupid 2 VALUES LESS THAN (150000))",
    "backupname":"orange_bak"
    },
    {
    "tablename":"strawberry",
    "stagingtablename":"staging_strawberry",
    "sql":"create table staging_strawberry(a INT CONSTRAINT strawberry primary key, staff_name VARCHAR(16))distribut
    e by RANGE (a) (groupid 1 VALUES LESS THAN (50000),groupid 2 VALUES LESS THAN (150000))",
    "backupname":"strawberry_bak"
    }
    ]
    }

    字段含义说明如下:

    CN_INFO:CN登陆信息。

    host:CN所在主机IP。

    port:CN连接端口。

    user:搬迁表所属用户名,需要有DBA权限。

    passwd:登录CN要用到的秘钥存放路径。

    DN_INFO:源表所在节点的主DN登录信息。

    host:主DN所在主机IP。

    port:主DN连接端口。

    user:搬迁表所属用户名,需要有DBA权限。

    passwd:登录主DN要用到的秘钥存放路径。

    parallellevel:任务并行度。

    gap_time:单位秒,检查DN节点的逻辑复制过程表LOGICREP_PROGRESS中COMMITTED_TX_TIME跟系统当前TIME作比对,根据此数值判定是否达到快追平条件。

    logicrep_user:配置逻辑复制用户名。

    bill_user:搬迁表所属用户名。

    tasklist:搬迁任务列表。

    tablename:待搬迁表的表名即源表名。

    stagingtablename:过程表的表名。

    sql:过程表建表语句。过程表和源表的表结构必须完全一致,字段个数和类型需要和源表完全一致,约束类型需要和源表一致,约束名需要与源表区分 。

    backupname:如果要备份源表,则需要配置备份名,备份名不能与源表名字重复,并且各个表的备份名也不能重复。

  11. 配置LOGICREP_HOME环境变量。

    依次登陆DN节点节点,将作为主机的DN节点上部署的逻辑复制工具路径添加到环境变量LOGICREP_HOME中。使用source命令使环境变量生效。

    vi ~/.bashrc
    export LOGICREP_HOME="/opt/software/tools/GaussDB_100_1.0.1-TOOLS/GaussDB_100_1.0.1-LOGICREP/logicrep"

  12. 启动数据重分布。执行成功的情况下会将配置文件备份,格式为配置文件名和时间戳拼接,例如:repconf_db.json2019-10-11-22-14-45。
    python zebramain.py

    程序执行完成代表数据重分布结束。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

GaussDB_数据库
创建时间:2020-01-06 16:21:44
华为GaussDB数据库小栈
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • GaussDB_数据库
    专家
戳我,来吐槽~