虚谷文档中心:https://docs.xugudb.com/
一、安装部署
1、依赖包与服务安装
yum install -y gcc libaio gdb net-snmp ntp
2、同步集群各节点服务器系统时间
关闭SELinux
临时关闭
setenforce 0永久关闭
sed -i ‘s/SELINUX=enforcing/SELINUX=disable/g’ /etc/selinux/config
服务端(选一台作为服务端)
vim /etc/chrony.conf
#文件中修改以下内容
allow 192.168.0.0/16
local stratum 1
systemctl restart chronyd.service
systemctl enable chronyd.service
客户端(其他几台)
vim /etc/chrony.conf
#文件中修改以下内容
server 192.168.101.3 iburst (服务端ip)
chronyc -a makestep
systemctl restart chronyd.service
systemctl enable chronyd.service
3、文件上传解压
将数据库文件压缩包上传至服务器,统一新建xgdbms_3node目录,解压,解压后内容包含BIN与SETUP目录
tar -zxvf XuGuServer-12_20231017-trial-linux-x64.tar.gz -C xgdbms_3node
cd xgdbms_3node/
cd XuGuServer/
4、配置cluster.ini(集群)
若部署集群,则在SETUP目录下配置cluster.ini文件,各节点对应修改MY_NID值。第三个节点角色设置为SQWG,这里之前没有。
cd SETUP/
vim cluster.ini
5、启动单机/集群
启动数据库,在BIN目录下运行xugu_start脚本或执行命令$PWD/xugu_linux -service以后台服务方式启动数据库进程。若以前台方式启动则将-service改为-child。数据库启动成功标志为监听端口5138启动,可通过stdout.txt查看。
cd ../BIN/
sh xugu_start.sh
关闭防火墙,一定要关闭
systemctl status firewalld.service 查看防火墙的状态; systemctl start firewalld.service 启动防火墙; systemctl stop firewalld.service 关闭防火墙; systemctl restart firewalld.service 重启防火墙; systemctl enable firewalld.service 开机启动防火墙; systemctl disable firewalld.service 开机禁用防火墙; systemctl is-enabled firewalld.service 查看防火墙是否开机启动;
在BIN目录下执行pwd获取绝对路径
绝对路径/xugu-linux -service 后台方式启动
查看日志
tailf stdout.txt
若启动单机数据库
,则直接新建一个xgdbms_1node目录,将数据库文件拷贝,之后修改端口为5139,再修改mount.ini和datafile.ini。最后启动。
mkdir xgdbms_1node tar -zxvf XuGuServer-12_20231017-trial-linux-x64.tar.gz -C xgdbms_1node cd SETUP/ vim xugu.ini 修改端口5139 cd BIN/ 在配置完datafile.ini后启动单机数据库 sh xugu_start.sh
6、配置mount.ini,datafile.ini(可选,题上如果没有则先不做这个)
mount.ini文件与数据库文件存储路径相关,需要指定数据库文件存储位置时,可手动创建 datafile.ini 文件和配置 mount.ini 文件
mount.ini默认内容:
/XGLOG ./XGLOG
/CATA ./XHOME/CATA
/DATA ./XHOME/DATA
/TEMP ./XHOME/TEMP
/REDO ./XHOME/REDO
/BACKUP ./XHOME/BACKUP
/ARCH ./XHOME/ARCH
/UNDO ./XHOME/UNDO
/MODI ./XHOME/XMODI
当数据文件较大时,可将4个DATA.DBF文件分置于不同数据盘上。如将DATA1.DBF,DATA2.DBF放在/home/data1目录下,将DATA3.DBF,DATA4.DBF放在/home/data2目录下。
创建需要的文件目录
cd XuGuServer
mkdir /home/data1
mkdir /home/data2
cd SETUP
vim datafile.ini
#DATA_FILES
/data1/DATA1.DBF
/data1/DATA2.DBF
/data2/DATA3.DBF
/data2/DATA4.DBF
vim mount.ini
/XGLOG ./XGLOG
/CATA ./XHOME/CATA
/DATA ./XHOME/DATA
/TEMP ./XHOME/TEMP
/REDO ./XHOME/REDO
/BACKUP ./XHOME/BACKUP
/ARCH ./XHOME/ARCH
/UNDO ./XHOME/UNDO
/MODI ./XHOME/XMODI
/data1 /home/data1
/data2 /home/data2
启动后可查看dbf文件
ll /home/data1/
ll /home/data2/
7、连接数据库
虚谷客户端工具包括:xgconsle、xugumanager、dbeaver。
可在服务器部署xgconsole工具,其连接方式为,数据库操作可见SQL语法手册:
./xgconsole nssl 127.0.0.1 5138 SYSTEM SYSDBA SYSDBA
也可通过解压安装图形化工具xugumanager、dbeaver连接数据库
二、备份恢复
1、备份
连接数据库执备份命令
2.1.1使用dbaver连接集群node1数据库SYSTEM,SYSDBA SYSDBA
新建库backup_db
create database backup_db;
2.1.2 使用dbaver连接新建的数据库backup_db,SYSDBA SYSDBA 权限dba
use backup_db;
创建表 t_bak
create table test1(a INT,b VARCHAR);
执行增加代码
BEGIN FOR i IN 1..1000 LOOP INSERT INTO test1 VALUES(i,random); END LOOP; COMMIT; END; /
备份
BACKUP DATABASE TO '/BACKUP/backup_db.exp';
备份文件在连接的节点的/XuGuServer/XHOME/BACKUP下。
2、创建恢复库
将备份文件复制到单机数据库目录下
cp backup_db.exp /xugu/xgdbms_1node/XuGuServer/XHOME/BACKUP
dbeaver连接单机数据库,ip 端口 数据库SYSTEM SYSDBA SYSDBA SYSDBA
创建空库用来进行恢复
创建新库
create database restore_db;
use restore_db;
连接新创建的用户库ip 端口 数据库restore_db SYSDBA SYSDBA DBA
3、恢复
复制/BACKUP/backup_db.exp至要恢复的库的BACKUP目录下,连接空库执行恢复命令
恢复命令
restore database backup_db from '/BACKUP/backup_db.exp';
select * from TEST1;
三、主备同步
1、开启变更记载
连接G节点数据库开启变更记载,dbms_replication系统包详细用法见官网文件。
xgconsole nssl 192.168.101.111 5138 BACKUP_DB SYSDBA SYSDBA
g节点ip
开启变更记载
use backup_db;
exec dbms_replication.create_modify_source('*','*');
exec dbms_replication.create_subscriber('syncer','SYSDBA');
select dbms_replication.poll_modify_data('syncer',0,null,1024*1024*1024,false,0,0);
开启log归档
数据备份重做日志归档模式。1:拷贝 redo
在sql界面执行set log_archive_mode to 1;
重启集群
ps -ef|grep xugu
kill -9 xx
2、部署配置同步工具(java要安装)建议部署在G节点
虚拟机linux安装jdk11.0.7(使用压缩包)_linux jdk-11.0.7-CSDN博客
使用同步工具需安装java环境
java -version
上传同步工具压缩包并解压,进入config目录,需修改cfg.properties和dbcfg.properties配置文件。注:配置文件中源库连接信息需填写G节点连接信息
cd tools/
unzip xugu-sync-xxx.zip
cd config/
vim cfg.properties
#type in {db,kafka,file}
source.type=db
aim.type=db
# xugu binlog source config
source.log.db=backup_db #这里改为源端db
source.db.usr=SYSDBA
source.db.pwd=U1lTREJB
source.log.suber.name=syncer #刚才创建的订阅者名称
source.log.filter=null
source.log.forward=false
source.log.partion=8
source.log.fetch.size=20
source.log.ips=192.168.10.131 #G节点ip
source.db.port=5138
source.commit_rows=1000
ddl.support=true #支持ddl同步
redo.offset.server=true
# kafka source config
source.kafka.parathd=8
source.topic=null
# to kafka
zk.connect=192.168.2.218:2181
case.sensitive=false
topic.partition=8
repeat.pos.kafka=false
# to file
file.dir=F: mp
file.split.size=100
file.type=SQL
# to db
writer.db=xugu #类型为xugu
writer.schema=SYSDBA #改为SYSDBA
writer.thd.num=8
writer.parathd.num=1
vim dbcfg.properties
target-db.user=SYSDBA #目标端用户SYSDBA
target-db.password=U1lTREJB
target-db.driverClass=com.xugu.cloudjdbc.Driver
target-db.jdbcUrl=jdbc:xugu://192.168.10.128:5139/restore_db #单机restore_db
binlog-db.user=SYSDBA
binlog-db.password=U1lTREJB
binlog-db.driverClass=com.xugu.cloudjdbc.Driver
binlog-db.jdbcUrl=jdbc:xugu://192.168.10.131:5138/backup_db?char_set=utf8 #G节点数据库
3、启动同步工具
sh xgsyn.sh start
这样就能从G节点读取binlog日志到单机的restore_db数据库进行执行
tail -f nohup.out
4、验证
在源库中进行变更操作,并在目标库中验证
即在集群node1数据库backup_db进行数据写入,在单机数据库restore_db进行查询
连接源库,即之前的集群node1数据库backup_db插入数据
insert into test1 values(1001,'sync_test');
#去单机数据库restore_db查询表test1
select count(*) from test1;
select * from test1 where a=1001;
在源库backup_db中新建表及修改表及插入数据
create table test2(a int,b varchar);
alter table test2 add column c varchar;
begin
for i in 1..1000 loop
insert into test2
values(i,random,i);
end loop;
delete from test2 where a>800;
update test2 set b = 'test'||a where a>700;
end;
/
在单机数据库restore_db查询test2
select count(*) from test2 where b like '%test%';
5、查看binlog日志
exec dbms_replication.poll_modify_data('syncer',0,null,1024*1024*1024,false,0,0);
四、节点扩容
1、新节点基础环境配置
2、新节点文件上传
3、新节点配置cluster.ini
新增节点直接将cluster.ini配置为4节点的cluster.ini。
在集群1node节点的cluster.ini复制到4节点机器的ip对应目录下。目录可用pwd查看。
scp cluster.ini 192.168.101.6:/xugu/xgdbms_4node/XuGuServer/SEUP
打开4节点的cluster.ini进行修改,新增节点角色删除G
4、启动新增节点
sh xugu_start.sh
5、数据库中执行增加节点命令
3节点数据库中执行add node命令将新节点加入
xgconsole nssl 192.168.101.3 5138 SYSTEM SYSDBA SYSDBA
--开启自动存储均衡
set enable_store_migrate on;
--ip改为4号节点
alter cluster add node 4 describe 'RACK=0001 PORTS="192.168.101.6:40001,192.168.101.6:40031" ROLE=SQW LPU=1 STORE_WEIGHT=3 STATE=DETECT';
exit;
show clusters
五、节点缩容
1、kill节点
虚谷数据库通过kill需要缩容的节点的数据库进程来进行缩容。
ps -ef|grep xugu;
kill -9 pid
六、监控工具搭建
使用同步工具需安装java环境
java -version
1、修改被监控节点snmp配置文件
已安装
安装snmp
yum install -y net-snmp net-snmp-utils
vim /etc/snmp/snmpd.conf 需要修改
重启
systemctl restart snmpd
开机自启
systemctl enable snmpd
不一定需要下边步骤
snmpwalk -v2c -c public localhost ifName
启动
service snmpd start
2、部署配置监控工具
上传解压
cd tools tar -zxvf XuguCM-xxxxx.tar.gz
cd XuguCm/
./startdb.sh 监控工具底层库 端口5151
./startapp.sh 启动监控工具
tail -f logs/catalina.out
上传监控工具安装包至服务器并解压,进入XuguCM,执行./startdb.sh启动监控工具底层数据库,端口为5151。数据库启动完成后启动监控工具软件./startapp.sh,可通过logs/catalina.out文件查看启动情况。
1.解压程序包 XuguCM-*.*.*.tar.gz 到任意目录。
2.进入程序目录,执行 startdb.sh,启动数据库。
3.进入程序目录,执行 startapp.sh,启动工具和积木报表,积木报表启动后访问地址ip:9500/jmreport/list。
积木报表的配置通常保持默认即可,如果存在端口冲突等情况,也可根据需要自行配置报表工具。进入监控软件所在目录下的
jimu/config目录,自行配置application.yml,配
置完成后重启积木报表即可,先执行./shutdownapp.sh,再执行./startapp.sh。
3、设置监控项
访问监控工具:http://192.168.101.6:8080/xgcm/login admin/admin,在网页中进行监控的集群和监控项的配置。详见监控工具使用手册。
监控集群配置:配置管理–>集群配置–>添加集群
进程名:xugu_linux_x64_trial
文件绝对路径:路径加上dbf名称
集群监控项配置:配置管理–>集群监控项
收集设置,告警设置,全部打勾
4、查看监控
七、系统字典、视图使用
虚谷数据库通过以下两张表记录所有系统表、系统试图信息,可通过模糊查询查找想查看的系统表、视图名。
select table_name from sys_system_tables;
select view_name from sys_system_views;
1、查看节点状态
SELECT DB_NAME,CHAR_SET,TIME_ZONE,CREATE_TIME,MODIFY_TIME,ONLINE FROM DBA_DATABASES;
show clusters;
“STORE_NUM”与“MAJOR_NUM”表示虚谷数据库存储节点所拥有的存储数量以及当前节点中的主版本存储数据量,若节点配置拥有存储角色, 则该两项必定非零; 若查询结果中 NODE_STATE 属性值为 4 则表示当前节点异常, 已被集群管理节点置为失效, 不再对外提供服务。
2、注意是否存在长事务
SELECT NODEID 节点号,USER_NAME 访问用户,IP 访问IP,DB_NAME 登录库名,START_T 登录时间,DECODE(STATUS,112,'IDLE',114,'RUNNING') 运行状态,AUTO_COMMIT 自动提交,CURR_TID 当前事务号,TRANS_START_T 事务开始时间,SYSDATE-TRANS_START_T 事务执行时长 FROM SYS_ALL_SESSIONS ORDER BY 事务执行时长 DESC LIMIT 5;
--通过事务执行时长,分析判断是否为长事务,若是长事务,获取事务号,再进行下一步操作。
--查出长事务执行sql:
SELECT * FROM SYS_ALL_THD_SESSION WHERE CURR_TID='事务号';
--进行路径规划分析:
EXPLAIN VERBOSE + 长事务sql;
3、集群内个节点重发包和丢包情况
SELECT * FROM SYS_ALL_MONITORS WHERE TARG_NAME IN ('RESEND_MSG_NUM', 'DISCARD_MSG_NUM');
--RESEND_MSG_NUM:重发包数
--DISCARD_MSG_NUM:丢包情况
--在正常运行的过程中,这两个数值会持续增加,单各节点重发包数和丢包数,基本维持在一个较均衡的情况。单个节点重启后该节点置0,集群重启后,各节点置0。如果出现某个节点的重发包和丢包数比较严重,需要关注一下该节点的网络情况。
//rpc测试,包单位为M --TEST_RPC_SEND(节点号,包大小);
SELECT DBMS_TEST.TEST_RPC_SEND(1,1024);
4、集群运行信息(事务差)
SELECT NODEID,DISK_R_N,DISK_R_BYTES,DISK_W_N,DISK_W_BYTES,NET_R_BYTES,NET_W_BYTES,MIN_TRANS_ID,MAX_TRANS_ID,MAX_TRANS_ID-MIN_TRANS_ID 事务号差 FROM SYS_ALL_RUN_INFO;
--1、关注事务号差,没有上亿则正常。
--2、重复多刷几次,观察事务号差是否在变化。(在变化则正常)
--若事务号差长时间未变化,则需要排查是什么事务一直未结束,找出事务号,查出对应的操作进行分析。
5、表空间状态检查
SELECT * FROM SYS_ALL_TABLESPACES WHERE MEDIA_ERROR='T';
--若存在输出结果,则表空间存在异常,再进行近一步的日志分析和存储状态分析。
6、存储状态检查(针对三版本集群)
SELECT COUNT(*) FROM SYS_GSTORES WHERE STORE_STA!='41';
--正常结果返回应为0,若为非0,则需要通过异常存储信息查询出异常存储块所在的表空间和节点,然后结合节点日志进行分析。
SELECT * FROM SYS_GSTORES WHERE STORE_STA!='41';
SELECT S.NODEID,S.GSTO_NO,S.STORE_NO,T.SPACE_NAME,T.MEDIA_ERROR FROM SYS_STORES S JOIN SYS_TABLESPACES T ON S.SPACE_ID=T.SPACE_ID WHERE S.GSTO_NO='异常全局存储号';
7、无效对象检查
SELECT DB_ID,USER_ID UID,PROC_NAME AS OBJ_NAME FROM SYS_PROCEDURES WHERE VALID='F'
UNION ALL
SELECT A.DB_ID,USER_ID UID,INDEX_NAME AS OBJ_NAME FROM SYS_INDEXES A INNER JOIN SYS_TABLES B ON A.TABLE_ID=B.TABLE_ID AND A.DB_ID=B.DB_ID WHERE VALID='F'
UNION ALL
SELECT DB_ID,USER_ID UID,VIEW_NAME AS OBJ_NAME FROM SYS_VIEWS WHERE VALID='F'
UNION ALL
SELECT DB_ID,USER_ID UID,TRIG_NAME AS OBJ_NAME FROM SYS_TRIGGERS WHERE VALID='F';
--若存在无效对象,先进行恢复失效对象,然后再分析失效原因。
--对象失效命令可拆分为四个单独的sql(SYS_PROCEDURES、SYS_INDEXES、SYS_VIEWS、SYS_TRIGGERS),主要是对存储、索引、视图、触发器失效对象进行检查。
--存储过程或函数失效,通过编译对象使其生效:
ALTER PROCEDURE "模式名"."对象名" RECOMPILE;
--索引失效,通过重建索引使其生效:
REINDEX "模式名"."表名"."索引名";
--视图失效,通过重编译视图使其生效:
ALTER VIEW "模式名"."视图名称" RECOMPILE;
--触发器失效,通过重编译触发器使其生效:
ALTER TRIGGER "模式名"."触发器名" RECOMPILE;
--如果重编译后未生效,再根据情况进行定位分析。
8、集群磁盘和内存使用情况检查
df -h
free -h
top
#确认系统盘和数据盘的使用情况,确认内存当前使用情况。
9、运行状态表
常用系统表:SYS_ALL_SESSIONS、SYS_ALL_THD_SESSION、SYS_ALL_THD_STATUS、SYS_ALL_TRANS、SYS_ALL_LOCKS、SYS_LOWNER、SYS_ALL_MONITORS等
查看挂起最早事务
SELECT * FROM SYS_ALL_SESSIONS WHERE CURR_TID IS NOT NULL ORDER BY TRANS_START_T LIMIT 5;
SELECT * FROM SYS_ALL_THD_SESSION WHERE CURR_TID IN (SELECT CURR_TID FROM SYS_ALL_SESSIONS WHERE CURR_TID IS NOT NULL ORDER BY TRANS_START_T LIMIT 10);
查看线程状态情况
SELECT STATE,COUNT(*) FROM SYS_ALL_THD_STATUS WHERE STATE>0 GROUP BY STATE;
查看集群内部包(重发包和丢包)情况
SELECT * FROM SYS_ALL_MONITORS WHERE TARG_NAME IN ('RESEND_MSG_NUM', 'DISCARD_MSG_NUM');
再根据情况进行定位分析。