
AntDB-M分布式数据库不仅支持内存和磁盘双引擎、分布式事务以及满足分布式ACID特性,而且还支持灵活的在线弹性伸缩、数据均衡,具备良好的高可用特性和容灾能力,并能提供秒级的自动故障检测和自动故障服务切换。
一、AntDB-M分布式数据库架构
AntDB-M分布式数据库采用存储分离设计,基于经典的Paxos一致性协议实现数据多副本的强一致性;采用一致性哈希算法,保证数据分布均衡;支持SQL2016标准,对应用开发完全透明,应用平滑迁移;支持内存和磁盘双引擎,满足业务的多种需求;采用了协程、条件下推等多种优化策略,深度适配多种平台,满足了高并发,低延迟的场景要求。架构图如下图所示:

图1:AntDB-M分布式架构图
AntDB-M分布式数据库主要由数据库驱动、管理节点、计算节点(可选)、数据节点这四个部分组成。各个节点都可以独立部署,节点间通过网络进行通信。
接下去将分别对这几个组成部分进行说明。
【数据库驱动】
AntDB-M数据库支持常用的JDBC、ODBC以及Python驱动程序,通过驱动程序访问AntDB-M分布式数据库集群时,集群内部的拓扑结构、数据分布情况对应用来说都是透明的。除此之外,驱动程序还支持负载均衡,故障转移,读写分离,以满足应用程序的不同使用场景。
【管理节点】
管理节点主要负责管理元数据、集群中的节点,分发DDL和DCL,并记录全局统计信息,同时支持高可用。通俗来讲,管理节点保存了集群中所有数据库对象的元数据,比如库、表、视图、触发器、存储过程、函数等数据模型的定义信息;保存集群中的用户及权限信息,数据分片信息(如分片数量,主从副本)等。同时,管理节点中保存有集群的统计信息,包括每个分片的数据分布情况、全局统计信息直方图、各个节点的连接数等。所有的DDL和DCL,都是先在管理节点执行成功后,再分发给集群内的计算节点和数据分片主节点。
【计算节点】
计算节点从应用或者管理节点接收SQL请求,进行SQL解析、SQL分析和优化,生成分布式执行计划。计算节点不支持主备模式,只要节点在线,就是主节点,部署时可选。
【数据节点】
数据节点负责保存数据,支持高可用,同时也具备计算节点的功能。数据节点主节点发生故障后,高可用组会选出一个新的主,一个高可用组即一个数据分片。在数据节点上,数据的存放是根据建表时指定的分片规则,把数据进行横向切片来保存到不同的数据分片中的,数据分片支持再细分成分区表(Partition),每个分区的物理文件可以单独保存。数据分片中的主节点支持读写,备节点支持读。
二、AntDB-M Docker分布式部署安装
Docker容器的安装在之前介绍集中式部署安装时已有提及,可翻阅该篇文章的相关内容,Docker环境准备就绪后,就可以开始在Docker中分布式部署AntDB-M数据库了。
加载AntDB-M的镜像文件到Docker容器中
antdbinstall% docker load -i antdb_m_ce.tar4826cdadf1ef: Loading layer [======================================>] 207.8 MB/207.8 MB585b1e8486f7: Loading layer [======================================>] 382.5 MB/382.5 MB7aea642f51af: Loading layer [======================================>] 2.211 GB/2.211 GBLoaded image: antdb_m:ce
加载完成后,通过docker images命令查看镜像信息
antdbinstall%docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEantdb_m ce 594526154da3 8 minutes ago 2.79 GB
通过镜像来启动容器,执行docker run命令来启动
docker run -itd --name="antdb_m_d" --add-host=antdb-127-0-0-1:127.0.0.1 -p 40000:4000 antdb_m:ce
参数说明:
--add-host:为容器设置域名;
-p:设置端口映射,把容器内的4000端口映射到宿主机的40000端口,方便其他主机访问该容器内的AntDB-M分布式数据库集群服务;
容器启动成功后,执行docker ps查看容器的运行状态
antdbinstall% docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES508d5fdc9a1e antdb_m:ce "/bin/bash" 2 seconds ago Up 1 second 0.0.0.0:40000->4000/tcp antdb_m_d
执行docker exec命令来登录到容器中
antdbinstall% docker exec -it antdb_m_d bash[root@508d5fdc9a1e ]#
登录Docker容器后,在命令行提示符中切换到antdb安装用户
[root@508d5fdc9a1e ]# su – antdb
编辑分布式版本的安装配置文件
[antdb@508d5fdc9a1e ~]$ vi home/install/setup/common/initconf-d.ini[client]cluster_type = D[env_info]env = antdb,127.0.0.1,22,/data/antdb/app/antdb,env01[node_info]node = env01,0,1,1,4000,/data/antdb/node/mn_1,masternode = env01,0,2,2,4010,/data/antdb/node/mn_2,slavenode = env01,0,3,3,4020,/data/antdb/node/mn_3,slavenode = env01,1,4,4,5000,/data/antdb/node/dn1_1,masternode = env01,1,5,5,5010,/data/antdb/node/dn1_2,slavenode = env01,1,6,6,5020,/data/antdb/node/dn1_3,slavenode = env01,2,7,7,6000,/data/antdb/node/dn2_1,masternode = env01,2,8,8,6010,/data/antdb/node/dn2_2,slavenode = env01,2,9,9,6020,/data/antdb/node/dn2_3,slavenode = env01,1024,10,10,4090,/data/antdb/node/cn_1node = env01,1024,11,11,5090,/data/antdb/node/cn_2
表1:配置项说明
参数名 | 说明 |
[antdb@508d5fdc9a1e ~]$ sh /home/install/antdb_m.sh -c /home/install/setup/common/initconf-d.iniAntDB install begins[Info] Checking OS information ... ok[Info] Checking hardware information ... ok[Attention] What going to show below is AntDB product use agreement. Ready to read it? [yes/no, Default: yes]
[Attention] What going to show below is AntDB product use agreement. Ready to read it? [yes/no, Default: yes]yes
AsiaInfo Anhui's contact information is provided below:Address: 12/F, Tower A, Huanglong Time Plaza, No.278 Tianmushan Road, Xihu District, Hangzhou, Zhejiang ProvincePostcode: 310000Tel: 86-571-8190 3773Website:asiainfoah.comNational Service Hotline: 4001068668[Caution] Do you agree to the product agreement? [yes/no, Default: yes] yes
[Info] Choose an empty directory to install AntDB. [Default: /data/antdb/app/antdb]
[Attention] Excute 'source /data/antdb/.bashrc' to make the environment variables take effect.[Attention] For better performance of database, following files can be used as reference to set OS kernel config manually.If you want to modify these parameters, please modify the following files before initialization. (ps.Donot change the user name "install_user")/home/install/setup/common/kernel_limits.conf/home/install/setup/common/kernel_sysctl.confAntDB install succeeds![Attention] What going to do below is AntDB initialization. Have you changed the configuration file (initconf-d.ini) ? [yes/no, Default: yes]yes

安装完成后重新载入环境变量,让安装时设置的环境变量对当前用户生效
[antdb@508d5fdc9a1e ~]$ source ./.bashrc
访问分布式集群,默认登录用户为root,密码为123456,出于安全考虑,建议首次登录后进行密码修改
[antdb@508d5fdc9a1e ~]$ antdb -uroot -p123456 -h127.0.0.1 -P4000
antdbinstall% antdb -uroot -p123456 -h192.168.1.131 -P40000
select m.ip,n.* from antdb_config.antdb_machines_info m left join information_schema.antdb_node_info n on m.sharding_id=n.sharding_id and m.access_id=n.access_id order by sharding_id;

antdb> CREATE DATABASE ctest;+--------+----------------+---------+| NodeId | DistributionId | Message |+--------+----------------+---------+| 4 | 1 | OK || 7 | 2 | OK || 10 | 1024 | OK || 11 | 1024 | OK |+--------+----------------+---------+4 rows in set (0.11 sec)
antdb> CREATE TABLE product (->id int NOT NULL PRIMARY KEY,->productNo varchar(50) DEFAULT NULL,->name varchar(100) DEFAULT NULL,->price decimal(10,2) DEFAULT NULL -> )COMMENT='table_type=sharding,sharding_key=id,sharding_type=hash';+--------+----------------+---------+| NodeId | DistributionId | Message |+--------+----------------+---------+| 4 | 1 | OK || 7 | 2 | OK || 10 | 1024 | OK || 11 | 1024 | OK |+--------+----------------+---------+4 rows in set (0.81 sec)
antdb> select * from antdb_config.antdb_table_sharding_info;+-------------------+--------------+---------------+-------------------+| table_name | col_name | table_type | sharding_type |+-------------------+--------------+---------------+-------------------+| ./ctest/product | id | sharding | hash |+-------------------+--------------+---------------+-------------------+1 row in set (0.01 sec)
antdb> INSERT INTO product values(1, 'No1001', '产品1', 15.23),(2, 'No1002', '产品2', 18.50),(3, 'No1003', '产品3', 8.99);
[antdb@508d5fdc9a1e ~]$ antdb -uroot -p123456 -h127.0.0.1 -P5000antdb> call crab.switch_mode(0);+------------+------+------+| NAME | FROM | TO |+------------+------+------+| CRAB_MODE | 1 | 0 |+------------+------+------+1 row in set (0.00 sec)antdb> select * from ctest.product;+----+-----------+---------+-------+| id | productNo | name | price |+----+-----------+---------+-------+| 2 | No1002 |产品2 | 18.50 || 3 | No1003 |产品3 | 8.99 |+----+-----------+---------+-------+2 rows in set (0.00 sec)
[antdb@508d5fdc9a1e ~]$ antdb -uroot -p123456 -h127.0.0.1 -P6000antdb> call crab.switch_mode(0);+------------+------+------+| NAME | FROM | TO |+------------+------+------+| CRAB_MODE | 1 | 0 |+------------+------+------+1 row in set (0.00 sec)antdb> select * from ctest.product;+----+-----------+---------+-------+| id | productNo | name | price |+----+-----------+---------+-------+| 1 | No1001 |产品1 | 15.23 |+----+-----------+---------+-------+1 row in set (0.00 sec)
antdb> select * from information_schema.antdb_table_stats;+----------+---------------+-------------------+----------+-----------------+-------------+| TABLE_ID | NAME | STATS_INITIALIZED | NUM_ROWS | GLOBAL_NUM_ROWS | MANAGE_INFO |+----------+---------------+-------------------+----------+-----------------+-------------+| 1070 | ctest/product | sharding | 0 | 3 | 2:1,1:2, |+----------+---------------+-------------------+----------+-----------------+-------------+1 row in set (0.00 sec)

点击了解 往期精彩







