案例说明:

在生产环境需要将集群中架构转换为单实例环境,本案例以备库转换为单实例库为案例,介绍了两种方案,一种在数据库数据量小的环境下采用 sys_dumpall 导出导入方式建立单实例库;另外一种是在数据量大的情况下,采用物理copy的方式建立单实例库。

案例数据库版本:

PROD=# select version();
VERSION ------------------------------------------------------------------------------------------------------------------
Kingbase V008R003C002B0270 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
(1 row)

案例架构:

查看集群状态:

1、集群节点状态

[kingbase@node1 bin]$ ./ksql  -U SYSTEM -W 123456 TEST -h 192.168.7.243 -p 9999
ksql (V008R003C002B0270)
Type "help" for help. TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_del
ay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+----------------
---
0 | 192.168.7.243 | 54321 | up | 0.500000 | primary | 0 | false | 0
1 | 192.168.7.248 | 54321 | up | 0.500000 | standby | 0 | true | 0
(2 rows)

2)流复制状态

[kingbase@node3 bin]$ ./ksql  -U SYSTEM -W 123456 TEST
ksql (V008R003C002B0270)
Type "help" for help. TEST=# select * from sys_stat_replication;
PID | USESYSID | USENAME | APPLICATION_NAME | CLIENT_ADDR | CLIENT_HOSTNAME | CLIENT_PORT | BACKEND_ST
ART | BACKEND_XMIN | STATE | SENT_LOCATION | WRITE_LOCATION | FLUSH_LOCATION | REPLAY_LOCATION | SYNC_
PRIORITY | SYNC_STATE
------+----------+---------+------------------+---------------+-----------------+-------------+------------------- 3393 | 10 | SYSTEM | node2 | 192.168.7.248 | | 9968 | 2021-03-01 12:09:1
2.662830+08 | | streaming | 0/B0CC040 | 0/B0CC040 | 0/B0CC040 | 0/B0CC040 | 2 | sync
(1 row)

案例一: sys_dumpall导出导入方式(用于数据量小的架构,在生产环境下,不能保证单实例库的数据和集群中的数据是一致的)。

1、集群测试数据

PROD=# create table t1 (id int ,name varchar(10));
CREATE TABLE
PROD=# insert into t1 values(generate_series(1,10000),'usr'||generate_series(1,10000));
INSERT 0 10000
PROD=# select count(*) from t1;
COUNT
-------
10000
(1 row)

2、在备库主机创建新的实例

# 创建单实例库数据目录
[kingbase@node1 bin]$ mkdir -p /data/kingbase/v8r3c/data # 初始化单实例库
[kingbase@node1 bin]$ pwd
/home/kingbase/cluster/ha/db/bin [kingbase@node1 bin]$ ./initdb -U system -W 123456 -E utf8 --case-insensitive -D /data/kingbase/v8r3c/data
.....
Success. You can now start the database server using: ./sys_ctl -D /data/kingbase/v8r3c/data -l logfile start

3、从备库备份数据(sys_dumpall)

[kingbase@node1 bin]$ ./sys_dumpall -U SYSTEM -W 123456 > ~/db.sql
sys_dumpall: role name starting with "sys_" skipped (SYSSAO)
sys_dumpall: role name starting with "sys_" skipped (SYSSSO)
sys_dumpall: role name starting with "sys_" skipped (SYSTEM)

4、启动单实例数据库并导入数据

# 启动数据库服务
[kingbase@node1 bin]$ ./sys_ctl start -D /data/kingbase/v8r3c/data/
server starting
[kingbase@node1 bin]$ LOG: redirecting log output to logging collector process
HINT: Future log output will appear in directory "sys_log". [kingbase@node1 bin]$ netstat -an |grep 54323
tcp 0 0 0.0.0.0:54323 0.0.0.0:* LISTEN
tcp6 0 0 :::54323 :::* LISTEN
unix 2 [ ACC ] STREAM LISTENING 42092 /tmp/.s.KINGBASE.54323
You have mail in /var/spool/mail/kingbase # 连接数据库并导入数据
[kingbase@node1 bin]$ ./ksql -U system -W 123456 test -p 54323
ksql (V008R003C002B0270)
Type "help" for help. test=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+--------+----------+-------------+-------------+--------------------
SAMPLES | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
SECURITY | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
TEMPLATE0 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/system +
| | | | | system=CTcb/system
TEMPLATE1 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/system +
| | | | | system=CTcb/system
TEMPLATE2 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/system +
| | | | | system=CTcb/system
TEST | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(6 rows) # 导入备库备份数据
test=# \i /home/kingbase/db.sql
SET
SET
SET
CREATE DATABASE
ksql:/home/kingbase/db.sql:25: ERROR: database "SECURITY" already exists
REVOKE
GRANT
You are now connected to database "PROD" as user "system".
SET
SET
SET
SET
SET
SET
set_config
-----------------
"$USER", PUBLIC
(1 row)
.......

5、查看单实例库数据

TEST=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+--------+----------+-------------+-------------+--------------------
PROD | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
SAMPLES | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
SECURITY | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
TEMPLATE0 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/system +
| | | | | system=CTcb/system
TEMPLATE1 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | system=CTcb/system+
| | | | | =c/system
TEMPLATE2 | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/system +
| | | | | system=CTcb/system
TEST | system | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(7 rows) TEST=# \c PROD
You are now connected to database "PROD" as user "system".
PROD=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+--------
PUBLIC | pathman_cache_stats | view | system
PUBLIC | pathman_concurrent_part_tasks | view | system
PUBLIC | pathman_config | table | system
PUBLIC | pathman_config_params | table | system
PUBLIC | pathman_partition_list | view | system
PUBLIC | T1 | table | system
(6 rows) PROD=# select count(*) from t1;
count
-------
10000
(1 row)

=== 从以上可以获知,集群中的数据已经导入到单实例库中,此时可以停止备库或删除集群===

案例2:物理拷贝方式(如果单实例库数据需要和集群数据一致,需要停止整个集群;如果不需要一致,只需要停止备库数据库服务即可)。

1、集群测试数据

PROD=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+--------
PUBLIC | PATHMAN_CACHE_STATS | view | SYSTEM
PUBLIC | PATHMAN_CONCURRENT_PART_TASKS | view | SYSTEM
PUBLIC | PATHMAN_CONFIG | table | SYSTEM
PUBLIC | PATHMAN_CONFIG_PARAMS | table | SYSTEM
PUBLIC | PATHMAN_PARTITION_LIST | view | SYSTEM
PUBLIC | T1 | table | SYSTEM
PUBLIC | T2 | table | SYSTEM
PUBLIC | T3 | table | SYSTEM
(8 rows) PROD=# select count(*) from t1;
COUNT
-------
10000
(1 row)
.......

2、备库生成检查点

PROD=# checkpoint;
CHECKPOINT

3、停止备库cron任务和数据库服务

[root@node1 ~]# cat /etc/cron.d/KINGBASECRON
.......
#*/1 * * * * root /home/kingbase/cluster/ha/db/bin/network_rewind.sh
#*/1 * * * * root /home/kingbase/cluster/ha/kingbasecluster/bin/restartcluster.sh # 停止备库数据库服务
[kingbase@node1 bin]$ ./sys_ctl stop -D ../data
waiting for server to shut down.... done
server stopped

4、建立单实例库

# 创建单实例库数据目录
[kingbase@node1 bin]$ mkdir -p /data/kingbase/v8r3c/data # 初始化单实例库
[kingbase@node1 bin]$ ./initdb -U system -W 123456 -E utf8 --case-insensitive -D /data/kingbase/v8r3c/data
The files belonging to this database system will be owned by user "kingbase".
This user must also own the server process.
......

5、拷贝备库数据到单实例库

[kingbase@node1 v8r3c]$ mv data data.bk
[kingbase@node1 v8r3c]$ mkdir data # 拷贝备库数据到单实例库
[kingbase@node1 data]$ cp -var * /data/kingbase/v8r3c/data/
‘backup_label.old’ -> ‘/data/kingbase/v8r3c/data/backup_label.old’
‘base/1/1255’ -> ‘/data/kingbase/v8r3c/data/base/1/1255’
‘base/1/1255_fsm’ -> ‘/data/kingbase/v8r3c/data/base/1/1255_fsm’
‘base/1/1247’ -> ‘/data/kingbase/v8r3c/data/base/1/1247’
‘base/1/1247_fsm’ -> ‘/data/kingbase/v8r3c/data/base/1/1247_fsm’
.......

6、修改data下的recovery.conf文件

[kingbase@node1 data]$ mv recovery.conf recovery.conf.bk

7、启动单实例库数据库服务

[kingbase@node1 bin]$ ./sys_ctl start -D /data/kingbase/v8r3c/data
server starting
[kingbase@node1 bin]$ LOG: redirecting log output to logging collector process
HINT: Future log output will appear in directory "/home/kingbase/cluster/ha/db/data/sys_log". [kingbase@node1 bin]$ ps -ef |grep kingbase kingbase 21482 1 1 14:08 pts/1 00:00:00 /home/kingbase/cluster/ha/db/bin/kingbase -D /data/kingbase/v8r3c/data
kingbase 21484 21482 0 14:08 ? 00:00:00 kingbase: logger process
kingbase 21487 21482 0 14:08 ? 00:00:00 kingbase: checkpointer process
kingbase 21488 21482 0 14:08 ? 00:00:00 kingbase: writer process
kingbase 21489 21482 0 14:08 ? 00:00:00 kingbase: wal writer process
kingbase 21490 21482 0 14:08 ? 00:00:00 kingbase: autovacuum launcher process
kingbase 21491 21482 0 14:08 ? 00:00:00 kingbase: archiver process
kingbase 21492 21482 0 14:08 ? 00:00:00 kingbase: stats collector process
kingbase 21493 21482 0 14:08 ? 00:00:00 kingbase: bgworker: syslogical supervisor
......

8、验证和查看单实例库数据

[kingbase@node1 bin]$ ./ksql -U SYSTEM -W 123456 PROD -p 54321
ksql (V008R003C002B0270)
Type "help" for help. PROD=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+--------
PUBLIC | PATHMAN_CACHE_STATS | view | SYSTEM
PUBLIC | PATHMAN_CONCURRENT_PART_TASKS | view | SYSTEM
PUBLIC | PATHMAN_CONFIG | table | SYSTEM
PUBLIC | PATHMAN_CONFIG_PARAMS | table | SYSTEM
PUBLIC | PATHMAN_PARTITION_LIST | view | SYSTEM
PUBLIC | T1 | table | SYSTEM
PUBLIC | T2 | table | SYSTEM
PUBLIC | T3 | table | SYSTEM
(8 rows) PROD=# select count(*) from t1;
COUNT
-------
10000
(1 row)

=== 从以上获知,备库的数据已经同步到单实例库===

总结:

   1、本案例是在原集群架构外,另外创建单实例,完成从集群到单实例库的转换,也可以直接在原集群上转换,不再赘述。
2、转换为单实例库后,可以按照生产要求 ,删除或保留原集群架构。
3、另外集群主库转换为单实例库,方法基本和此案例一致。

kingbaseES R3 集群备库转换为单实例库案例的更多相关文章

  1. KingbaseES R3集群备库执行sys_backup.sh物理备份案例

    案例说明: KingbaseES R3的后期版本支持通过sys_backup.sh执行sys_rman的物理备份,实际上是调用了sys_rman_v6的工具做物理备份.本案例是在备库上执行集群的备份, ...

  2. KingbaseES R3 集群删除test库导致主备无法切换问题

    案例说明: 在KingbaseES R3集群中,kingbasecluster进程会通过test库访问,连接后台数据库服务测试:如果删除test数据库,导致后台数据库服务访问失败,在集群主备切换时,无 ...

  3. KingbaseES R3 集群一键修改集群用户密码案例

    案例说明: 在KingbaseES R3集群的最新版本中增加了kingbase_monitor.sh一键修改集群用户密码的功能,本案例是对此功能的测试. kingbaseES R3集群一键修改密码说明 ...

  4. kingbaseES R3 集群修改data路径测试案例

    案例说明: 默认KingbaseES R3集群部署后,数据存储目录(data)在/home/kingbase下,部署时不能更改:本案例是在部署完成后,迁移data目录到其他指定的存储位置. 数据库版本 ...

  5. KingbaseES R3 集群修改system用户密码方案

    方案说明: 对于kingbaseES R3集群修改system密码相比单机环境有一定的复杂性,需要修改的位置如下: 1)数据库中system用户密码,可以用alter user命令修改 2)在reco ...

  6. KingbaseES R3集群在线删除数据节点案例

    案例说明: kingbaseES R3集群一主多从的架构,一般有两个节点是集群的管理节点,所有的节点都可以为数据节点:对于非管理节点的数据节点可以在线删除:但是对于管理节点,无法在线删除,如果删除管理 ...

  7. KingbaseES R3 集群cluster日志切割和清理案例

    案例说明: 对于KingbaseES R3集群的cluster日志默认系统是不做切割和清理的,随着运行时长的增加,日志将增长为一个非常大的文件,占用比较大的磁盘空间,并且在分析问题读取大文件时效率很低 ...

  8. KingbaseES R3 集群主库归档失败案例

    案例说明: 本案例用于KingbaseES R3集群归档进程归档日志失败的处理,对于一线的生产环境具有 一定的参考意义. 数据库版本: TEST=# select version(); VERSION ...

  9. KingbaseES R3 集群主备切换信号量(semctl)错误故障分析案例

    案例说明: 某项目KingbaseES R3 一主一备流复制集群在主备切换测试中出现故障,导致主备无法正常切换:由于bm要求,数据库相关日志无法从主机中获取,只能在现场进行分析:通过对比主备切换时的时 ...

随机推荐

  1. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  2. 【RPA之家转载RPA创新产业峰会回看】机器人流程自动化专利态势报告

    [RPA之家转载RPA创新产业峰会回看]机器人流程自动化专利态势报告 自动化的一个专利情况的监测,就是全球监测的情况.今天我可能给大家汇报的主要是三个方面,第一个方面就是讲一下全球投资智能化的专利的一 ...

  3. 【python基础】第08回 流程控制 for循环

    本章内容概要 1.循环结构之 for 循环 本章内容详解 1.循环结构之for循环 1.1 语法结构 for 变量名 in 可迭代对象: #字符串 列表 字典 元组 for 循环的循环体代码 针对变量 ...

  4. mysql-安装(windows版本)与登录

    安装mysql 1.MySQL版本 mysql-5.6.35-winx64.zip 2.首先解压到安装目录 3.修改配置文件 复制my-default.ini 重命名为my.ini 然后修改mysql ...

  5. 【万字长文】从零配置一个vue组件库

    简介 本文会从零开始配置一个monorepo类型的组件库,包括规范化配置.打包配置.组件库文档配置及开发一些提升效率的脚本等,monorepo 不熟悉的话这里一句话介绍一下,就是在一个git仓库里包含 ...

  6. Python自动化办公:27行代码实现将多个Excel表格内容批量汇总合并到一个表格

    序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去.还好我会Python,分分钟 ...

  7. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

  8. 现代化CSS

    Less Sass less Sass 与Less相比SASS更适合大型,底层的开发 Compass CSS核心技巧 CSS应用 现代化CSS方法论 CSS分层与面向对象 为什么要对CSS分层 CSS ...

  9. Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找

    The link to problem:Problem - D - Codeforces   D. Range and Partition  time limit per test: 2 second ...

  10. 如何设计一个分布式 ID 发号器?

    大家好,我是树哥. 在复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识,例如:分库分表的 ID 主键.分布式追踪的请求 ID 等等.于是,设计「分布式 ID 发号器」就成为了一个非常常见的系 ...