返回首页

gbase数据、南大通用产品文档:GBase8a缩容的操作流程

更新日期:2024年09月11日


缩容VC 内data 节点:

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
270
1.
重分布数据,转移要删除的数据节点上的数据到其他节点上,清空要删除的数
据节点上数据。
包括步骤:
创建新的distribution
(排除了将要删除的节点)
根
据新的distribution 创建新nodedatamap
(initnodedatamap)
重分布数据到新的
nodedatamap 上删除旧的nodedatamap 和distribution。
2.
从集群中移除该节点。
包括步骤:
从VC 中移除该节点成为集群的freenode从
集群中彻底删除该节点。
3.
卸载该节点上的集群软件。步骤包括:停止被删除节点上的gnode 服务修改
demo.options 使用uninstall 脚本卸载软件。
注:
gnode 节点服务包含有gbase 服务和syncserver 服务,
如果该gnode 节点服
务器上还有gcluster 节点存在,
且需要保留该gcluster 节点,
停止服务不需直接
使用gcluster_services all stop 停止所有服务,
只需使用如下命令单独停止gnode
各项服务:
gcmonit.sh stop
gcluster_services gbase_ip stop 如:gcluster_services gbase_192.168.146.40 stop
gcluster_services syncserver_ip stop 如:gcluster_services
syncserver_192.168.146.40 stop

缩容集群的gcluster 节点:
停止整个集群所有节点的服务修改demo.options 使用uninstall 脚本卸载该节点上
集群软件。

缩容复合节点(gcluster 和gnode 同在一个服务器上):
1.
重分布数据,转移要删除的数据节点上的数据到其他节点上,清空要删除的数
据节点上数据。
2.
从集群中移除该节点。
包括步骤:
从VC 中移除该节点成为集群的freenode从
集群中彻底删除该节点
3.
停止整个集群所有节点的服务
4.
修改demo.options 使用uninstall 脚本卸载该服务器上集群软件(包括gcluster
节点和gnode 节点)

缩容整个VC 步骤:
将需要缩容的VC 中所有库表都删除删除该VC
可参考4.3.1.3.2 删除虚拟集群

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
271
注意

V9.5.3 不支持gcware 节点缩容;

缩容操作必须在已有Coordinator 节点上使用DBA 用户(gbase)执行;

卸载data 节点只需在被卸载节点执行停止集群节点服务的操作;

缩容集群可以卸载掉节点,
也可不必须卸载节点,
而是保留节点在freenode
状态,可转到其它VC 使用

使用卸载命令移除节点时不要使用force 参数,
以免卸载时不检查要卸载的
节点是否正在被集群使用,导致数据损坏。

获取多行数据
使用游标的fetchmany 方法获取结果集中的多行数据。
fetchmany 接口可以
循环调用,直到结果集中的数据获取完毕。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,
'db':'test'}
try:
conn = connect()



GBase Python 接口开发手册
南大通用数据技术股份有限公司

- 9 -
conn.connect(**config)
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS test")
cur.execute("CREATE TABLE test (COL1 INT, COL2 VARCHAR(20))")
opfmt = "INSERT INTO test(COL1, COL2) VALUES(%s, %s)"
rows = []
for i in xrange(0, 100):
rows.append((i, "row" + str(i)))
cur.executemany(opfmt, rows)
cur.execute("SELECT * FROM test")

row = cur.fetchmany(3)
while row:
print row
row = cur.fetchmany(4)

cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()

等待锁的缺点是等待时间可能变长(虽然正确设计的应用程序应短暂地保持它们的锁)。
当不可接受长时间延迟的可能性时,程序可执行下列语句:
SET LOCK MODE TO NOT WAIT
当程序请求锁定了的行时,它立即收到错误代码(例如,错误 -107 Record is locked),并
终止当前的 SQL 语句。该程序必须回滚它的当前事务并重试。
当程序启动时,初始的设置为不等待。如果您正在交互地使用 SQL 并看到与锁定相关的
错误,则请将锁模式设置为等待。如果您正在编写程序,请考虑使其成为程序首先执行的
嵌入式 SQL 语句之一。