YashanDB数据库主备高可用架构实践

2023年 11月 27日 50.3k 0

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的部署架构,满足核心业务场景的高性能、高可靠以及扩展性要求。适用于核心业务场景的国产化替换。

图片图片

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.121

Centos_7.4_x86_64

1核

2G

23.1.1.100

主节点

192.168.112.122

Centos_7.4_x86_64

1核

2G

23.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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论