数据库系列之YashanDB数据库主备高可用架构部署实践

国产数据库-崖山使用介绍 崖山数据库个人版使用介绍 阅读详情

YashanDB数据库是全面自主设计研发,支持集中式、分布式和共享存储部署架构以及混合负载场景的超融合数据库。本文简要介绍了YashanDB的特性和部署架构,并部署1主1备的测试环境,验证数据库访问操作、主备切换高可用过程,以了解。更多关注公众号“牧羊人的方向”。


1、YashanDB基本介绍

崖山数据库系统YashanDB是一种新型的数据库管理系统,由深圳计算科学研究院自主设计研发。它在经典数据库理论的基础上,融入了原创的有界计算理论、近似计算理论、并行可扩展理论和跨模融合计算理论。YashanDB在部署模式上支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,支持大规模并发事务处理和混合事务-分析处理、在线实时分析、海量数据查询加速以及异构数据融合处理场景。

1.1 YashanDB数据库核心特性

YashanDB数据库是全面自研的国产数据库,满足实时性和高并发下的性能和稳定性要求,同时具备主流的信创改造生态,符合应用迁移的标准。主要有以下特性:

  • 全面兼容主流的Oracle数据库和MySQL数据库的语法、语义,应用无需大量改造,可以完成低成本的平滑迁移;
  • 兼容适配主流的信创软硬件生态,包括芯片、操作系统和中间件等,并且内核代码自主可控,实现自主知识产权的核心竞争力;
  • 基于NUMA架构设计并行计算框架,实现高性能低成本的性能要求;
  • 提供金融级的高可用容灾能力,实现多种部署模式和多中心多活的高可用部署架构;
  • 多种存储引擎架构支持混合负载和实时分析等融合数据处理

在这里插入图片描述

1.2 YashanDB数据库部署架构

YashanDB在部署架构上分为单实例的主备部署、分布式部署以及共享集群的部署模式,部署架构如下图所示:

  • 单实例主备部署:1主多备的主备部署模式,主备实例部署在不同的主机上采用本地存储,主备节点之间通过日志同步的方式进行数据同步。主节点故障时自动切换到备节点,保证服务的高可用。
  • 分布式部署:基于Shared-nothing架构,由多个实例节点组成(包括MN节点、CN节点和DN节点),这些节点部署在不同的机器上
  • 共享集群部署:基于聚合内存的技术实现集群数据库各实例之间协同数据页的读写访问以及各种非数据类的并发控制。共享集群在部署上是多实例多活的架构,多个数据库实例并发的读写同一份共享数据。在管理组件上多了YCS和YFS,分别对集群数据的高可用和集群的文件系统进行管理。

在这里插入图片描述

三种部署模式分别适用于不同的场景,各自特性如下:

  • 单实例主备架构:集中式数据库处理类型,基于高性能的服务器和存储满足高并发的联机类业务处理,同时1主多备的架构保证了系统的高可用。不过受限于单台服务器的处理性能和存储限制,适用于非大并发大数据量存储的应用。
  • 分布式架构:原生的分布式数据库架构,支持在线交易和实时数据分析混合交易,适用于海量数据分析以及数据仓库类应用
  • 共享集群架构:对标Oracle RAC的部署架构,满足核心业务场景的高性能、高可靠以及扩展性要求。适用于核心业务场景的国产化替换。
部署模式应用场景数据存储架构规格限制对标类型
单实例主备架构适用于集中式事务业务场景,支持主备形态本地存储32副本MySQL、单机Oracle等
分布式架构适用于分布式分析业务场景,支持主备形态分布式存储3MN 8CN 32*3DN原生的分布式数据库TiDB、OceanBase等
共享集群架构适用于核心交易场景共享存储2实例?Oracle RAC架构
1.3 YashanDB数据库内核架构

在这里插入图片描述

YashanDB数据库的内存架构如图,主要包括以下部分:

  • 私有内存区域:包括SQL执行区以及SQL算子使用的虚拟内存,这部分内存区域在各个线程运行时分配使用,释放后才能被其它线程使用
  • 共享内存区域:包括SQL缓存、日志缓存等内存共享池和全局缓存、全局锁和全局队列等全局共享资源池、数据缓存区域以及有界加速缓存
  • 工作线程:处理客户端连接请求的线程,可以为会话专有模式或共享模式
  • 后台线程:写日志、写数据和checkpoint等数据库后台的工作线程。

对于分布式架构,还有MDS元数据管理、CMS分布式集群管理和GTS分布式全局时间管理等线程;对于共享存储架构,还有共享集群间的同步消息处理、GRC全局资源访问控制、GLS全局锁服务和GCS全局缓存服务等专有线程。

2、YashanDB主备部署实践
2.1 环境准备
2.1.1 主备集群服务器信息

1)YashanDB数据库1主1备部署服务器信息如下:

IP操作系统CPU内存YashanDB版本角色
192.168.112.121Centos_7.4_x86_641核2G23.1.1.100主节点
192.168.112.122Centos_7.4_x86_641核2G23.1.1.100备节点

2)安装默认端口

在这里插入图片描述

3)关闭防火墙

##关闭防火墙
# systemctl stop firewalld 
##关闭开机自启
# systemctl disable firewalld
##检查防火墙状态
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

4)开启SSH服务

##检查ssh服务
# systemctl start sshd.service
##检查ssh服务
# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-11-23 09:13:12 CST; 1h 38min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
2.1.2 创建用户yashan并加入sudoer中
##1、创建用户
# useradd -d /home/yashan -m yashan
# passwd yashan

##2、配置sudoers
# chmod +w /etc/sudoers
#在/etc/sudoers添加内容
yashan  ALL=(ALL) NOPASSWD:ALL
# chmod -w /etc/sudoers

##3、查看用户
# id yashan
uid=1002(yashan) gid=1002(yashan) groups=1002(yashan)
2.1.3 安装目录规划

所有安装YashanDB的实例节点上必须规划的两个目录:

  • HOME目录:YashanDB的产品目录,包含YashanDB所提供的命令、数据库运行所需的库及各关键组件。该目录由yashan用户执行安装部署时输入的install-path参数根据一定规则生成并创建。
  • DATA目录:YashanDB的数据目录,包含数据库的各类系统数据文件、日志文件和配置文件,用户数据也缺省存储在该目录下。但对于共享集群,所有的数据文件和redo文件均需保存在共享存储上,DATA目录将只用于存储实例运行相关的配置文件、日志文件等数据。该目录由yashan用户执行安装部署时输入的data-path参数根据一定规则生成并创建。
2.2 主备节点安装
2.2.1 安装包和配置文件

1)解压安装包

# tar -xzvf yashandb-personal-23.1.1.100-linux-x86_64.tar.gz  -C /usr/local/yashandb/install

2)在主备节点创建安装目录

#mkdir /usr/local/yashandb

3)执行yasboot package命令生成配置文件

#cd /usr/local/yashandb/install
#./bin/yasboot package se gen --cluster yashandb -u yashan -p xxxx --ip 192.168.112.121,192.168.112.122 --port 22  --install-path /usr/local/yashandb/yasdb_home  --data-path /usr/local/yashandb/yasdb_data --begin-port 1688 --node 2
192.168.112.121
  ip:192.168.112.121 cpu cores is less than 2
  ip:192.168.112.121 memroy is less than 4096MB
192.168.112.122
  ip:192.168.112.122 cpu cores is less than 2
  ip:192.168.112.122 memroy is less than 4096MB
 hostid   | group | node_type | node_name | listen_addr          | replication_addr     | data_path                      
-------------------------------------------------------------------------------------------------------------------------
 host0001 | dbg1  | db        | 1-1       | 192.168.112.121:1688 | 192.168.112.121:1689 | /usr/local/yashandb/yasdb_data 
----------+-------+-----------+-----------+----------------------+----------------------+--------------------------------
 host0002 | dbg1  | db        | 1-2       | 192.168.112.122:1688 | 192.168.112.122:1689 | /usr/local/yashandb/yasdb_data 
----------+-------+-----------+-----------+----------------------+----------------------+--------------------------------

Generate config success
  • –cluster指定为要部署的数据库集群名称,该名称也将作为集群中所有节点上初始创建数据库的名称(database name)
  • -u和-p,指定创建的用户yashan和密码
  • –port指定SSH服务端口,一般为22
  • –install-path指定数据库安装路径,指定为/usr/local/yashandb/yasdb_home
  • –data-path指定数据存放目录,指定为/usr/local/yashandb/yasdb_data
  • –begin-port指定数据库监听端口,默认1688
  • –node指定主备节点总数量,1主1备设置为2

4)上一步骤执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,yashandb.toml为数据库集群的配置文件,hosts.toml为主机的配置文件。根据需要调整配置项,比如RUN_LOG_FILE_PATH和SLOW_LOG_FILE_PATH。

cluster = "yashandb"
create_simple_schema = false
uuid = "655eb2496767a825e8dda1d6c4da4d4e"
yas_type = "SE"

[[group]]
  group_type = "db"
  name = "dbg1"
  [group.config]
    CHARACTER_SET = "utf8"
    ISARCHIVELOG = true
    REDO_FILE_NUM = 4
    REDO_FILE_SIZE = "128M"
  [group.create_sql]

  [[group.node]]
    data_path = "/usr/local/yashandb/yasdb_data"
    hostid = "host0001"
    role = 1
    [group.node.config]
      LISTEN_ADDR = "192.168.112.121:1688"
      REPLICATION_ADDR = "192.168.112.121:1689"
      RUN_LOG_FILE_PATH = "/usr/local/yashandb/yasdb_home/yashandb/log/yashandb/db-1-1/run"
      RUN_LOG_LEVEL = "INFO"
      SLOW_LOG_FILE_PATH = "/usr/local/yashandb/yasdb_home/yashandb/log/yashandb/db-1-1/slow"

  [[group.node]]
    data_path = "/usr/local/yashandb/yasdb_data"
    hostid = "host0002"
    role = 2
    [group.node.config]
      LISTEN_ADDR = "192.168.112.122:1688"
      REPLICATION_ADDR = "192.168.112.122:1689"
      RUN_LOG_FILE_PATH = "/usr/local/yashandb/yasdb_home/yashandb/log/yashandb/db-1-2/run"
      RUN_LOG_LEVEL = "INFO"
      SLOW_LOG_FILE_PATH = "/usr/local/yashandb/yasdb_home/yashandb/log/yashandb/db-1-2/slow"
2.2.2 执行安装

使用以下命令执行安装

#./bin/yasboot package install -t hosts.toml -i /usr/local/src/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -f
checking install package...
install version: yashandb 23.1.1.100
host0001 100% [====================================================================]    6s
host0002 100% [====================================================================]    6s
update host to yasom...

注:指定参数-f不强制校验环境是否满足部署条件,否则会提示:

192.168.112.121
  ip:192.168.112.121 cpu cores is less than 2
  ip:192.168.112.121 memroy is less than 4096MB
2.2.3 数据库部署

1)执行部署命令

$ ./bin/yasboot cluster deploy -t yashandb.toml
 type | uuid             | name               | hostid | index    | status  | return_code | progress | cost 
------------------------------------------------------------------------------------------------------------
 task | 3190567c61c193bc | DeployYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | 59   
------+------------------+--------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

2)生效环境变量

#部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件
$ cd /usr/local/yashandb/yasdb_home/yashandb/23.1.1.100/conf
# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除
$ cat yashandb.bashrc >> ~/.bashrc
$ source ~/.bashrc

3)开机后启动命令

yashoot process yasom start -c yashandb
yasboot process yasagent start -c yashandb
yasboot cluster start -c yashandb
2.2.4 修改sys用户口令

通过yasboot工具设置集群内所有节点sys用户的密码

#./bin/yasboot cluster password set -n xxxx -c yashandb
type | uuid             | name             | hostid | index    | status  | return_code | progress | cost 
----------------------------------------------------------------------------------------------------------
 task | ce83dacc3c2e4246 | YasdbPasswordSet | -      | yashandb | SUCCESS | 0           | 100      | 2    
------+------------------+------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
2.2.5 验证安装

1)查看数据库状态

$ ./bin/yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address       | data_path                             
----------------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 16119 | open            | normal          | primary       | 192.168.112.121:1688 | /usr/local/yashandb/yasdb_data/db-1-1 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------
 host0002 | db        | 1-2:2  | 15363 | open            | normal          | standby       | 192.168.112.122:1688 | /usr/local/yashandb/yasdb_data/db-1-2 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------

2)连接实例查看状态

$ ./bin/yasboot sql -d sys@192.168.112.121:1688
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
please input password: xxxx
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux

SQL> SELECT STATUS FROM V$INSTANCE;
SELECT STATUS FROM V$INSTANCE;
STATUS        
------------- 
OPEN         
1 row fetched.

SQL> SELECT database_name FROM v$database;
SELECT database_name FROM v$database;
DATABASE_NAME                                                    
---------------------------------------------------------------- 
yashandb                                                        
1 row fetched.
2.2.6 创建用户及授权

1)创建用户并授权

SQL>  create user yasuser01 identified by "YashanDB01";           
 create user yasuser01 identified by "YashanDB01";
Succeed.
SQL> grant DBA to yasuser01;
grant DBA to yasuser01;

2)切换用户登录

#./bin/yasboot sql -d yasuser01@192.168.112.121:1688
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux

SQL> SELECT database_name FROM v$database;
SELECT database_name FROM v$database;
DATABASE_NAME                                                    
---------------------------------------------------------------- 
yashandb
2.3 数据库访问操作
2.3.1 数据库表操作

1)创建表空间

SQL> create tablespace ts01;
create tablespace ts01;
#删除表空间
SQL> drop tablespace ts01;

删除表空间默认会保留文件,如果再创建相同的表空间名称时,会提示文件已经存在,但是在备节点观察时该文件已经删除了。

YAS-02044 file '/usr/local/yashandb/yasdb_data/db-1-1/dbfiles/TS010' already exists

在删除表空间时指定删除文件datafiles

SQL> drop tablespace ts02 including contents and datafiles;                            
drop tablespace ts02 including contents and datafiles;

2)创建表和索引

##1、创建表tb01,表空间为TS01
create table if not exists tb01(
  id int NOT NULL,
  c1 int  NOT NULL DEFAULT '0',
  c2 char(120) NOT NULL DEFAULT '',
  c3 char(60) NOT NULL DEFAULT '')
TABLESPACE TS01;
##查看创建的表
SQL> SELECT TABLE_NAME,TABLE_TYPE FROM USER_TABLES;
TABLE_NAME                                                       TABLE_TYPE 
---------------------------------------------------------------- ---------- 
TB01                                                             HEAP

##2、创建索引
SQL> create unique index uniq_ix01 on tb01(id);
SQL> create index ix_c1 on tb01(c1);
##查看索引
SQL> SELECT * FROM USER_INDEXES;
INDEX_NAME                                                       INDEX_TYPE                    TABLE_OWNER                                                      TABLE_NAME                                                       TABLE_TYPE                                    UNIQUENESS COMPRESSION PREFIX_LENGTH TABLESPACE_NAME                                                     INI_TRANS    MAX_TRANS     PCT_FREE LOGGING       BLEVEL           LEAF_BLOCKS         DISTINCT_KEYS AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY STATUS                 NUM_ROWS           SAMPLE_SIZE LAST_ANALYZED                    PARTITIONED TEMPORARY GENERATED VISIBILITY    DATABASE_MAINTAINED CONSTRAINT_INDEX 
---------------------------------------------------------------- ----------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------------------------------- ---------- ----------- ------------- ---------------------------------------------------------------- ------------ ------------ ------------ ------- ------------ --------------------- --------------------- ----------------------- ----------------------- --------- --------------------- --------------------- -------------------------------- ----------- --------- --------- ------------- ------------------- ---------------- 
IX_C1                                                            NORMAL                        YASUSER01                                                        TB01                                                             TABLE                                         N          DISABLED                0 USERS                                                                       2          255            8 Y                                                                                                                VALID                                                                                  N           N         N         VISIBLE       N                   N               
UNIQ_IX01                                                        NORMAL                        YASUSER01                                                        TB01                                                             TABLE                                         Y          DISABLED                0 USERS                                                                       2          255            8 Y                                                                                                                VALID                                                                                  N           N         N         VISIBLE       N                   N               

2 rows fetched.
2.3.2 数据导入导出

1)从mysql数据库中导出表数据为csv格式

mysql> SELECT * INTO OUTFILE '/tmp/sbtest.sbtest1.csv'  
    -> FIELDS TERMINATED BY ','   
    -> ENCLOSED BY '"'  
    -> LINES TERMINATED BY '\n'  
    -> FROM sbtest1 where id<10000;
Query OK, 9999 rows affected (0.09 sec)

2)使用yasldr工具将csv格式数据导入到表里

#./yasldr yasuser01/xxxx batch_size=4032 control_text="'LOAD DATA OPTIONS(DEGREE_OF_PARALLELISM=2) INFILE '/tmp/sbtest.sbtest1.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' APPEND INTO TABLE tb01(id,c1,c2,c3) '"
YashanDB Loader Personal Edition Release 23.1.1.100 x86_64 0e623bd
9999 rows successfully loaded.
Check /tmp/sbtest.sbtest1.log for more info.
[YASLDR] execute succeeded

导入的命令项有多个:

  • BATCH_SIZE:每批次的CSV数据行数,默认4032,范围[1,65535]。
  • MODE:导入方式,包括BASIC方式和BATCH方式,默认BATCH方式。

在这里插入图片描述

登录到表中查看数据情况

SQL> select count(1) from tb01 ;
             COUNT(1) 
--------------------- 
                 9999
1 row fetched.

3)使用exp和imp导出和导入到新表

#1、使用exp命令将yasuser01用户下所有数据导出至export. yasuser01.data文件中
[yashan@tango-DB01 ~]$ exp yasuser01/YashanDB01 FILE=export.yasuser01.dat OWNER=yasuser01
YashanDB Export Personal Edition Release 23.1.1.100 x86_64 0e623bd
export terminated successfully
[yashan@tango-DB01 ~]$ ll
total 1892
-rw-r----- 1 yashan yashan 1936736 Nov 23 19:54 export.yasuser01.dat

#2、使用imp命令将导出数据导入到yasuser02中
[yashan@tango-DB01 ~]$ imp yasuser02/YashanDB02 FILE=export.yasuser01.dat FROMUSER=yasuser01 TOUSER=yasuser02
YashanDB Import Personal Edition Release 23.1.1.100 x86_64 0e623bd
import terminated successfully
##查看表数据情况
SQL> SELECT table_name FROM USER_TABLES;
TABLE_NAME                                                       
---------------------------------------------------------------- 
TB01                                                            
1 row fetched.

SQL> select count(1) from tb01;
             COUNT(1) 
--------------------- 
                 9999
1 row fetched.
  • FROMUSER模式用于导入指定用户下的对象及数据,包括用户下所有元数据、表数据以及用户权限等
  • TOUSER命令用于更换导入的用户,将导入对象的OWNER更换成TOUSER指定的用户
3、系统高可用验证
3.1主备切换验证
3.1.1 主节点故障

在1主1备的部署架构下,不同于1主多备的Raft协议自动选举,主节点故障通过yasom仲裁,默认是不开启的。

1)使用命令开启election

[yashan@tango-DB01 ~]$ yasboot election enable on -c yashandb
result: Succeed

查看仲裁选举的参数配置

[yashan@tango-DB01 ~]$ yasboot election config show -c yashandb
  Protection Mode: MAXIMUM PROTECTION
  Members:
    [1-1:1] - Primary database
      [1-2:2] - Physical standby database
                  Transport Lag: 0 seconds
                  Apply Lag:     0 seconds
                  Apply Rate:    11.85 MByte/s
  Properties:
    FailoverThreshold      = 9
    FailoverAutoReinstate  = false
    ZeroDataLossMode       = true
Automatic Failover: Enabled in Zero Data Loss Mode

默认是最大保护模式,表示redo log同步到备节点后,事务才提交。

  • FailoverThreshold:备机心跳超时时间,到达该时间后,yasom将执行failover切换流程
  • FailoverAutoReinstate:是否启用自动脑裂修复,启用后如果备机发送脑裂处于Need REPAIR状态,yasom将尝试自动修复
  • ZeroDataLossMode:是否启用零丢失模式,启用后主备设置为最大保护模式,当主库宕机后备机会自动failover;当备库异常时主库降级为最大可用模式,并禁止自动failover,直到备库恢复同步。

另外通过以下命令修改配置

$ yasboot election enable off -c yashandb
$ yasboot election config set -k FailoverThreshold -v 2 -c yashandb
$ yasboot election enable on -c yashandb
$ yasboot election config show -c yashandb

2)检查主备集群的状态

[yashan@tango-DB01 ~]$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address       | data_path                             
----------------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 16119 | open            | normal          | primary       | 192.168.112.121:1688 | /usr/local/yashandb/yasdb_data/db-1-1 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------
 host0002 | db        | 1-2:2  | 15363 | open            | normal          | standby       | 192.168.112.122:1688 | /usr/local/yashandb/yasdb_data/db-1-2 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------

3)模拟主节点故障,kill主节点进程

[yashan@tango-DB01 ~]$ ps -fu $USER
UID         PID   PPID  C STIME TTY          TIME CMD
yashan     1874      1  0 11:14 ?        00:00:10 /usr/local/yashandb/yasdb_home/yashandb/23.1.1.100/bin/yasom -c yashandb -l 192.168.112.121:1675 -d
yashan     1952      1  0 11:16 ?        00:01:17 /usr/local/yashandb/yasdb_home/yashandb/23.1.1.100/bin/yasagent -c yashandb -l 192.168.112.121:1676 -d
yashan    95091      1  7 16:23 ?        00:01:47 /usr/local/yashandb/yasdb_home/yashandb/23.1.1.100/bin/yasdb open -D /usr/local/yashandb/yasdb_data/db-1-1
 [yashan@tango-DB01 ~]$ kill -9 95091

查看yasom.log日志,能看到failover切换信息

2023-11-25 16:47:38 DEBUG  [yasom] replication.go:188 process replication event: failover
2023-11-25 16:47:38 INFO   [yasom] task.go:24 call yasagent api success: NodeAPI.ExecSQL, get result: {"connection":"DISCONNECTED","status":"NORMAL","time_since_last_msg":
"2"}
2023-11-25 16:47:38 ERROR  [yasom] task.go:21 call yasagent api failed: NodeAPI.ExecSQL, err: YAS-00402 failed to connect socket, errno 111, error message "Connection refu
sed"
2023-11-25 16:47:38 INFO   [yasom] task.go:24 call yasagent api success: NodeAPI.ExecSQL, get result: {"database_role":"STANDBY","status":"NORMAL","switchover_status":"NOT
 ALLOWED"}
2023-11-25 16:47:38 INFO   [yasom] replication.go:231 execute failover sql command on node 1-2:2, next reset id is 1
2023-11-25 16:47:40 INFO   [yasom] task.go:24 call yasagent api success: NodeAPI.ExecSQL, get result: {}
2023-11-25 16:47:40 INFO   [yasom] replication.go:246 failover succeeds

4)查看主备状态,备节点已经升级为主节点

[yashan@tango-DB02 ~]$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid  | instance_status | database_status | database_role | listen_address       | data_path                             
---------------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | off  | -               | -               | -             | 192.168.112.121:1688 | /usr/local/yashandb/yasdb_data/db-1-1 
----------+-----------+--------+------+-----------------+-----------------+---------------+----------------------+---------------------------------------
 host0002 | db        | 1-2:2  | 4410 | open            | normal          | primary       | 192.168.112.122:1688 | /usr/local/yashandb/yasdb_data/db-1-2 
----------+-----------+--------+------+-----------------+-----------------+---------------+----------------------+---------------------------------------

重启原来的主节点后,主备关系正常

[yashan@tango-DB02 ~]$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid    | instance_status | database_status | database_role | listen_address       | data_path                             
-----------------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 102613 | open            | normal          | standby       | 192.168.112.121:1688 | /usr/local/yashandb/yasdb_data/db-1-1 
----------+-----------+--------+--------+-----------------+-----------------+---------------+----------------------+---------------------------------------
 host0002 | db        | 1-2:2  | 4410   | open            | normal          | primary       | 192.168.112.122:1688 | /usr/local/yashandb/yasdb_data/db-1-2 
----------+-----------+--------+--------+-----------------+-----------------+---------------+----------------------+---------------------------------------
3.1.2 手动主备切换

1)登录备机,检查主备机同步状态,确认主备机同步无异常

SQL> SELECT database_id,database_name,log_mode,open_mode,database_role FROM V$DATABASE;
          DATABASE_ID DATABASE_NAME                                                    LOG_MODE          OPEN_MODE         DATABASE_ROLE     
--------------------- ---------------------------------------------------------------- ----------------- ----------------- ----------------- 
           2888093870 yashandb                                                         ARCHIVELOG        READ_ONLY         STANDBY      

2)确认备机同步状态正常

SQL> SELECT connection, status, peer_addr, transport_lag, apply_lag FROM V$REPLICATION_STATUS;
CONNECTION        STATUS            PEER_ADDR                                                        TRANSPORT_LAG    APPLY_LAG 
----------------- ----------------- ---------------------------------------------------------------- ------------- ------------ 
CONNECTED         NORMAL            192.168.112.121:1689                                                         0            0

3)在备机执行switchover切换操作,此时主机的所有事务中断,且switchover执行过程中,客户端无法连接主机。

SQL> alter database switchover;

切换完成后,查看主备机的角色是否发生变化

[yashan@tango-DB01 ~]$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address       | data_path                             
----------------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 39926 | open            | normal          | standby       | 192.168.112.121:1688 | /usr/local/yashandb/yasdb_data/db-1-1 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------
 host0002 | db        | 1-2:2  | 38096 | open            | normal          | primary       | 192.168.112.122:1688 | /usr/local/yashandb/yasdb_data/db-1-2 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+---------------------------------------

4)也可以使用yaboot命令执行主备切换

[yashan@tango-DB01 ~]$ yasboot node switchover -c yashandb -n 1-1
|key                                            |value
|-----------------------------------------------+------
|clusterName                                    |yashandb
|the group type of input node is                |db
|the group name of input node is                |dbg1
|the role of input node is                      |standby
|the primary node name of input node's group is |1-2

Switchover need primary node and selected node all are open and normal
Are you sure you want to switchover node 1-1 to primary: [yashandb][yes/no]: yes
 type | uuid             | name                   | hostid | index | status  | return_code | progress | cost 
-------------------------------------------------------------------------------------------------------------
 task | 839275bfbfccf242 | SwitchoverYasdbCluster | -      | dbg1  | SUCCESS | 0           | 100      | 2    
------+------------------+------------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS

其中参数-n为要升主的节点ID(例如1-1,可以通过cluster status命令查看,不需要冒号及后面的数字)。检查主备节点状态,确认已经发生了切换。

3.2 表的闪回操作

YashanDB提供的闪回功能,当用户误操作等原因导致表的数据被删除,使用闪回功能可以查看过去的数据状态,并在时间上倒回指定时间点的数据,无需从备份中恢复数据。注:该功能只对行存表(HEAP表)有效

3.2.1 delete操作闪回
#1、删除表tb01数据
SQL> delete from tb01 where id<100;
99 rows affected.
SQL> select count(1) from tb01 ;
             COUNT(1) 
--------------------- 
                 9900
1 row fetched.

#2、开启row movement
SQL> ALTER TABLE tb01 ENABLE ROW MOVEMENT;
Succeed.

#3、表数据闪回(通过时间戳闪回)
SQL> FLASHBACK TABLE tb01 TO TIMESTAMP TO_TIMESTAMP('2023/11/23 20:18:00','yyyy/mm/dd hh24:mi:ss');
FLASHBACK TABLE tb01 TO TIMESTAMP TO_TIMESTAMP('2023/11/23 20:18:00','yyyy/mm/dd hh24:mi:ss');
Succeed.

#4、查看数据返回正常
SQL> select count(1) from tb01 ;
             COUNT(1) 
--------------------- 
                 9999
1 row fetched.
3.2.2 drop表操作闪回
#1、开启了回收站ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;

#2、删除表
SQL> drop table tb01 ;

#3、查询回收站是否存在TB01表
SQL> SELECT object_name FROM DBA_RECYCLEBIN WHERE original_name = 'TB01';
OBJECT_NAME                                                      
---------------------------------------------------------------- 
BIN$2260

#4、表结构及表数据闪回
SQL> FLASHBACK TABLE "BIN$2260" TO BEFORE DROP;

#5、表和索引已恢复
SQL> SELECT table_name FROM USER_TABLES;
TABLE_NAME                                                       
---------------------------------------------------------------- 
TB01                                                            

SQL> SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'TB01';
INDEX_NAME                                                       
---------------------------------------------------------------- 
UNIQ_IX01                                                       
IX_C1   
3.2.3 truncate表闪回
#1、开启了回收站ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;

#2、TRUNCATE表操作
SQL> truncate table tb01;

#3、查询回收站是否存在TB01表
SQL> SELECT object_name FROM DBA_RECYCLEBIN WHERE original_name = 'TB01';
OBJECT_NAME                                                      
---------------------------------------------------------------- 
TB01   

#4、表结构及表数据闪回
SQL> FLASHBACK TABLE "TB01" TO BEFORE TRUNCATE;

#5、表数据已恢复
SQL> select count(1) from tb01;
             COUNT(1) 
--------------------- 
                 9999                                                          
4、总结

本文简要介绍了YashanDB的特性以及部署架构,并测试部署了1主1备的环境进行功能性验证。总结下来有以下几点:

  • 文档还是挺全的,根据文档一步步能够搭建好环境使用。受限于个人体验版,只能部署单实例的主备环境,没法体验分布式以及共享存储的集群
  • 作为一个新数据库,对用户来说有个学习和适应的过程,一些命令和SQL语句和MySQL或Oracle等还是有些差异,可能和Oracle更接近。
  • 生态的建设上还在慢慢完善,比如对Python或Go等语言的支持,主流的开发框架的支持等。还有和主流的信创操作系统的适配性和稳定性,需要进一步测试验证。尤其是在一众国产数据库产品中建立领先优势,还是有一定的挑战性的。
  • 在架构上主备集群的可用性通过yasom检测的,如果这台服务器宕机后主备切换是没有自动实现的,在高可用切换这一块有优化的空间。像OpenGauss在后续版本增加CM实现切换功能,也可以参考GoldenDB管理节点对数据节点的高可用管理。
  • 在运维功能实现上,数据库运维管理平台,对服务器的纳管和一键部署、监控指标和客户的现有流程对接、CMDB元数据模型和告警接入等,还是有很多客户化落地的细节。

暂时这么多,有时间可以根据国产数据库通用评测模型进行测试验证。


参考资料:

  1. https://doc.yashandb.com/yashandb/23.1/index.html
【YashanDB认证】YCA学习记录 第一章:YashanDB基础介绍 国产化数据库的发展及未来 崖山数据库系统:YashanDB是【深圳计算科学研究院】完全自主研发设计的新型数据库系统,经过工信部下述机构权威检测,内核代码自主率100%。 YashanDB = 核心交易型数据库 + 企业级数仓 + 湖仓一体。 核心交易:手机下单、转账,特点是短小快,量大。 ​企业级数仓:数据量特别大,并且还有复杂的一些分析在里面。 ​湖仓一体:有多种不同类型的数据,结构化数据和非结构化数据等等。 六大特性 Oracle四层 阅读详情

相关推荐

崖山YashanDB数据库系统YCA认证教材全套

第1课时:YashanDB基础介绍.pdf 第2课时:YashanDB安装部署.pdf 第3课时:YashanDBSQL语言(基础篇).pdf 第4课时:YashanDB体系结构.pdf 第5课时:YashanDB实例管理.pdf 第6课时:YashanDB存储管理.pdf 第7课时:YashanDB文件管理.pdf 第8课时:YashanDB对象管理(基础篇).pdf 第9课时:YashanDB数据字典和动态性能视图.pdf 第10课时:YashanDB应用开发.pdf

YashanDB 崖山数据库尝鲜

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 |(个人微信 ID:JiekeXu_DBA)大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 YashanDB 崖山数据库尝鲜,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!目 录 一、崖山数据库简...

JiekeXu的博客 3280

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南

STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。

猫猫的小茶馆 493

崖山数据库(YashanDB)从零开始

课程最后一小节中有课程资料获取方式!

从ADS到SystemVue:当简单链路预算不够用时,我的射频系统级仿真方案升级实录

本文详细介绍了从ADS到SystemVue的射频系统级仿真升级路径,重点分析了基础链路预算在多端口元件和复杂场景下的局限性,并提供了SystemVue在非线性系统验证和跨域协同分析中的优势。通过实际案例展示了如何平滑迁移工具链,提升仿真精度和效率,适用于5G、毫米波雷达等现代射频系统设计。

weixin_34233974的博客 340

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

YashanDB主备高可用

主备复制是数据库最主要的高可用手段,通过将主库上的数据实时复制到备库来实现。主库是执行业务的数据库实例,备库是复制主库数据的数据库实例。当主库发生故障时,业务可以转移到备库上继续执行,降低故障对业务的影响,提高数据库的可用性。

cod0410的博客 750

LPDDR6来了!带你一文看懂它和LPDDR5/5X的差距 + 技术演进逻辑全解析

🧠从速率到架构,从总线宽度到协议设计,LPDDR6 每一个改动都不是拍脑袋做的,它针对的是AI / HPC / 云计算 / 下一代笔记本平台的真实需求。作为工程师的我们,不仅要“用得上”,更要“测得准”,因为没有测试验证,就没有量产落地!🎯LPDDR6不是未来,而是现在进行时!

weixin_43199439的博客 2164

官方教程来啦!上手体验YashanDB主备部署、同步延迟和自动切换能力

本文向大家演示了YashanDB主备高可用部署以及两种自动切换的部署实施过程。可以看到,YashanDB在备机同步延迟、自动切换等方面展现了显著的优势,也欢迎大家前往官网下载体验(YashanDB官网) , 如果大家在实施过程中遇到任何的问题,欢迎加入YashanDB技术交流群反馈,我们的技术专家将为您提供解答与支持!

cod0410的博客 937

Claude桌面端安装失败?Retrying无限重试终极解决方案(亲测有效)

Claude桌面端安装卡在Retrying并非网络问题,而是安装器下载源异常导致。本文提供已验证方案:一条命令即可解决问题🚀

XiaoqiangClub的博客 2329

FC7300 SPI MCAL配置引导

Example - QMI8A01z外设:Example - QMI8A01z外设:

舊梦的博客 257

【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置

YashanDB支持在主备库同步正常的情况下进行主备库的手动Switchover切换,也支持在主库异常的情况下进行备库的手动Failover切换,但在开启自动选主时无法使用Failover切换。1、若主节点所在主机因为其他原因导致资源紧张的情况下,想要切换备节点为主节点更好的提供服务,此时就需要在数据库正常的情况下执行手动主备切换。2、数据库主节点异常时,若配置了自动主备切换,则数据库在心跳时间内会自动切换,若没有配置自动切换就只能执行手动切换。数据库在正常或异常情况下,如何实现主备切换。

cod0410的博客 1275

2 君正底层API接口的封装1

君正的IPC芯片主要有T31、T40、T41等型号,每个型号的API接口大部分是相同的,但也存在一些不一致和差异化的地方。为了屏蔽不同芯片型号之间的差异,我们需要基于一个公共基类进行封装。在封装之前,我们需要定义自己的错误码和数据结构,用于屏蔽不同君正芯片的实现细节。为了确保整个IPC库使用统一的错误码,我们在HP_MPPErrorCode.h文件中专门定义了以下错误码。错误码囊括了参数错误、内存错误、溢出错误、不支持、密码错误、非法数据等各种异常情况。

hope_wisdom的技术博客 1586

YashanDB单机(主备)部署

执行安装部署前,请以安装用户(yashan)登录192.168.1.2服务器,并进入/home/yashan/install安装目录。​。

cod0410的博客 1183

ABAP Secure Storage 在事务码 SM59 中的应用

系统管理人员在进行维护时,应关注相关日志信息,及时发现可能出现的安全异常,并针对不同安全等级的操作制定相应的备份与恢复策略,以降低潜在风险。该区域在设计上具备高度隔离性,仅允许经过授权的组件访问。保存后,系统会将密码存储在 Secure Storage 中,这种处理方式充分体现了 SAP 标准程序在安全设计上的考量。对于系统管理员而言,这种机制在日常维护与审计中提供了有力的支持,可以通过比对存储数据的哈希值或其他完整性校验手段,及时发现异常变动,保障系统长期稳定运行。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 667

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

YashanDB V23.5:YAC高可用全面升级,全库闪回、SCAN与VIP、主备自动切换……

如今,YAC已具备支撑金融、电信等核心业务规模化部署的全部条件,未来,YashanDB将持续深化高可用、高性能能力,以“稳定、高效、经济、易用”为目标,为企业数字化转型与信创替代提供更坚实的数据底座。YashanDB V23.5以“驱动崖山共享集群YAC全面迈向规模化商用”为核心定位,对连接层、服务层、存储层的高可用能力深度升级,并持续优化主备模式性能,既筑牢故障防护的“安全网”,又打破性能损耗的“天花板”,为企业核心业务提供“业务永续、数据安全、性能稳定”的共享集群解决方案。

cod0410的博客 1286

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

YashanDB 主备机制 与 Oracle Data Guard 对比

YashanDB 主备机制和 Oracle Data Guard 在功能上具有高度相似性,尤其是在同步机制、高可用部署、灾备能力方面。YashanDB 凭借其对 Oracle 的高度兼容、自主可控、安全性和国产化优势,正在成为 Oracle RAC 和 Data Guard 的有力替代选项,尤其适合政企、能源、金融等对数据主权和成本控制有强烈需求的场景。如你需要更深入的部署示意图、同步协议细节或切换策略,也可继续提问。

喝醉酒的小白 924

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术

主库故障,备库心跳超时后,会发起选举投票,如果收到多数派节点的投票,则升为新的主库。不过这种方式会带来一个问题,就是在主库发生故障后,备库的Redo可能比主库多,这就需要通过一些机制来判断备库的多余Redo,在后面的未决日志这一章节将介绍这个机制。主库发送日志给备库,备库通过回放日志来同步主库的数据,一旦主库发生故障,可以选择其中一个备库升主,接管业务。如果此时主库宕机,备库升主,新主库不包含这部分日志,旧主库降备后,需要将这部分日志回退,这部分日志称为未决日志。级联备可以减少主库的压力,可用于异地容灾。

2301_76627032的博客 996

深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术

2024【崖山论“见”】已强势回归!即日起,将不定期把 Meetup 中YashanDB 技术专家的精彩分享整理成文章,方便大家学习回顾。今天带来第一篇主备高可用技术文章。

cod0410的博客 589

YashanDB分布式部署(下)DN节点1主2备部署

本文以典型规格(3台服务器,1个MN组、2个CN、1个DN组,DN组和MN组均为1主2备)为例,介绍分布式部署形态的安装步骤。执行安装部署前,请以安装用户(yashan)登录192.168.1.2服务器,并进入/home/yashan/install安装目录。

cod0410的博客 627

YashanDB单机(主备)可视化部署

1.YashanDB不提供系统初始口令,需使用yasboot工具设置数据库sys用户的密码,以安装用户登录到服务器并执行如下命令设置密码。上述功能开启后均需安装用户具备sudo权限,本示例使用默认配置,即仅开启将用户添加到YASDBA用户组。在【数据库建库参数】页面,可参考单机配置文件按需增/删/改建库参数,确认信息无误后,单击【下一步】。在【数据库节点参数】页面,可按需增/删/改各数据库实例的参数,确认信息无误后,单击【保存并下一步】。4.确认信息无误后,单击【下一步】。部署完成后,yasom会在​。

cod0410的博客 813
上一篇: 基于Skywalking的全链路跟踪实现
下一篇: 数据库系列之简要对比下GaussDB和OpenGauss数据库
solihawk
博客等级 码龄17年 7995粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值