操作场景
分布式部署模式下,用户可以使用数据搬迁工具完成数据重分布,使得分片之间数据均衡,保证访问性能。
前提条件
- 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类型的用户表。
- 仅支持同一用户下的表搬迁
操作步骤-配置并启动数据重分布
- 以omm用户身份登录GaussDB 100 CN所在服务器。
- 按规划创建存放逻辑复制工具的目录。
mkdir -p /opt/software/tools
- 将数据重分布工具安装包GaussDB_100_1.0.1-ZEBRATOOL.tar.gz上传至规划目录/opt/software/tools下。
- 进入数据重分布工具的存放目录。
cd /opt/software/tools
- 将数据重分布工具安装包解压到已规划好的/opt/software/tools目录。安装包解压后生成文件夹GaussDB_100_1.0.1-ZEBRATOOL。
tar -zxvf GaussDB_100_1..1-ZEBRATOOL.tar.gz -C /opt/software/tools
- 获取Python驱动包。以EULEROS为例,Python2的动态库在安装包目录下“GaussDB_100_1.0.1-CLIENT-PYTHON-EULER20SP8-64bit”文件夹中;安装包中包含libzeclient.so、pyzenith.so和__init__.pyc。将这三个文件拷贝到zebratool目录。
- 获取GaussDB_100_1.0.1-CLUSTER-EULER20SP8-64bit.tar.gz并解压,将其中lib目录和script目录拷贝到zebratool目录中。
- 安装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 - 使用加密脚本创建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 - 在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:如果要备份源表,则需要配置备份名,备份名不能与源表名字重复,并且各个表的备份名也不能重复。
- 配置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"
- 启动数据重分布。执行成功的情况下会将配置文件备份,格式为配置文件名和时间戳拼接,例如:repconf_db.json2019-10-11-22-14-45。
python zebramain.py
程序执行完成代表数据重分布结束。