一、理解KunlunDB
1.1 KunlunDB产品基本概念&架构
KunlunDB是一个开源、高性能的分布式关系数据库,反对混合负载(HTAP)、PB级数据量治理并提供毫秒提早的新一代数据库解决方案。
1.1.1 集群组件架构图
1.2 KunlunDB次要组件:
1.1.2 KunlunServer(计算节点)
计算节点运行无状态计算&查问引擎,与Kunlun Storage进行交互执行SQL 工作,采纳异步通信模式,一个计算节点能够协调多个存储节点执行数据处理(增删改查)工作。计算节点从元数据集群获取集群元数据并在本地长久化。Kunlun Server的SQL层兼容PostgreSQL和MySQL协定(开发中……),各个计算节点独立解决SQL计算。Kunlun Server反对规范SQL连贯。
1.1.3 KunlunStorage(存储节点)
采纳Shared-nothing架构,各存储节点运行肯定数目的存储引擎实例,用来长久化利用(用户)数据。存储引擎执行计算节点发动SQL语句(在XA事务中的分支)。能够应用MGR单主模式或Binlog强同步模式做集群高可用。
1.1.4 Meta Cluster(元数据集群)
用来存储着若干个昆仑分布式数据库集群的元数据,及分布式事务两阶段提交的commit log。元数据集群采纳一主两从的部署模式。
集群治理(Cluster_mgr)作为守护过程运行,负责监控和保护每一个存储集群及其节点的replication状态、集群计算节点与存储节点之间的元数据和状态同步、解决分布式事务节点故障解决等。集群管理器提供API供第三方管理软件调用。
节点治理(Node_mgr)在集群的每一台机器运行,检测该机器上所有计算节点,以及存储节点的状态,对所有节点实例进行保活治理。并通过HTTP接口接管集群治理的命令,进行节点实例装置,删除等性能。
1.1.5 Xpanel(运维监控平台)
KunlunDB的运维治理模块,能够对整个集群环境进行治理和监控。Xpanel能够监控集群各个节点的操作系统及各要害组件的重要信息,包含操作系统资源,操作系统谬误日志,计算&存储引擎的要害日志错误信息等。
KunlunDMP是KunlunDB备份复原工具,DataPump是数据加载工具,反对 MySQL,PostgreSQL逻辑备份和数据的加载。
二、疾速装置
一键装置流程
2.1 装置环境&配置需要
2.1.1 硬件配置
开发及测试环境(最低要求)
2.1.2 Linux 操作系统版本要求
2.2 布局集群拓扑
以一个三台服务器的配置为例:
做为开发测试环境,每台服务器的硬件最低配置为:4核CPU , 16G内存。(如果仅作功能测试,能够下载KunlunDB docker映像装置,一般笔记本就能够部署KunlunDB docker装置指南)
表格1-1
2.3 装置环境筹备
装置之前,要确保服务器操作系统环境满足以下要求:
所有节点所在机器须为Linux,装置了bash,sed,gzip,python2, python2-dev等工具或者库。python2可执行程序设置为python2。
所有集群节点所在机器曾经正确设置好用户,节点将以该用户启动,该用户可能运行sudo而不须要明码。
配置防火墙,开发所有install.json 配置文件波及的端口。
对于装置存储节点的机器,须要事后装置以下库(此处为ubuntu 20.04): libncurses5 libaio-dev。
对于装置计算节点的机器,须要事后装置以下库(此处为ubuntu 20.04): libncurses5 libicu66python-setuptools gcc
在centos上装置,参考附录2。
对于装置动作,须要事后将二进制公布包(kunlun-cluster-manager-0.9.1.tgz,kunlun-server-0.9.1.tgz,kunlun-storage-0.9.1.tgz)放入当前目录. 此外,工具运行机器和节点所在机器间网络不能太慢,因为须要将公布包传递到这些机器上。
对于装置的所有机器,须要设置装置用户及root用户的主动登录验证
设置结束后ssh username@host.com
ubuntu能够参考:ubuntu登录主动验证。
centos能够参考:centos登录主动验证。
如果在该步骤提醒sudo:须要明码,能够参考:sudonopasswd
2.4 下载安装包
抉择一台服务器:
通过git clone形式在gitee上拉kunlun-scripts包:
git clone https://github.com/zettadb/cloudnative.git
cd进入kunlunnative/cluster下:
cd kunlunnative/cluster
获取最新的版本的下载包:以0.9.1为例(如有其它最新版本请用最新版本)
进入泽拓官网http://downloads.zettadb.com/,点击产品下载;
或者间接wget最新的二过程包。
wget https://zettatech.tpddns.cn:14443/dailybuilds/enterprise/kunlun-cluster-manager-0.9.1.tgz --no-check-certificatewget https://zettatech.tpddns.cn:14443/dailybuilds/enterprise/kunlun-server-0.9.1.tgz--no-check-certificatewget https://zettatech.tpddns.cn:14443/dailybuilds/enterprise/kunlun-storage-0.9.1.tgz--no-check-certificate
2.5 配置一键装置参数文件
前提:三台服务器创立用户名为kunlun的用户,配置好三台主机间的信赖关系。
在一台服务器上操作:Server1
以kunlun用户登录
进入cluster目录,进入到install.json文件目录
编辑install.json文件:附录的example文件是依据表格1-1的布局做的配置,能够依据理论状况批改。
2.6 执行装置
装置过程将用到generate_scripts.py生成脚本,action为install,config为刚刚编辑的配置文件install.json,defuser设置为默认工作用户。
defuser: 大部分或者全副机器都能够应用该用户,如无该默认用户则应用配置文件里machines的user(本人指定)
defbase: 大部分或者全副机器都能够创立该默认工作目录,如无奈创立默认工作目录则应用配置文件里machines的basedir(本人指定)
第一步:
$python2 generate_scripts.py--action=install --config=install.json --defuser=kunlun --defbase=/kunlun
第二步:
$bash install/commands.sh
急躁期待30分钟左右分钟,只有不呈现!!!FAILURES!!!或者其它谬误就代表装置胜利了。
其余指令:
一键进行集群 stop:defbase为默认工作目录,Action为stop
defbase: 大部分或者全副机器都能够创立该默认工作目录,如无奈创立默认工作目录则应用配置文件里machines的basedir(本人指定)
$python2 generate_scripts.py --action=stop--config=install.json --defbase=/kunlun$bash stop/commands.sh
一键启动集群 start:action为start
$python2 generate_scripts.py --action=start--config=install.json --defbase=/kunlun$bash start/commands.sh
一键革除集群 clean:action为clean
$python2 generate_scripts.py --action=clean --config=install.json --defbase=/kunlun --sudo$bash clean/commands.sh
应用该命令前,工作目录不能够先革除,否则脚本无奈找到工作目录,无奈执行该命令,应用结束后再打消工作目录。
三、验证装置是否胜利
登录计算节点:
$psqlpostgres://abc:abc@127.0.0.1:5401/postgres
查看集群节点信息:
postgres=# select name ,id ,when_created from pg_shard; name | id | when_created--------+----+-------------------------------shard1 | 1 |2021-12-22 03:58:59.599486+08shard2 | 2 |2021-12-22 03:58:59.599486+08Shard3 | 3 |2021-12-22 03:58:59.599486+08
创立一个分区表测试:
CREATETABLE testtable (id int primary key, name char(8)) partition by hash(id);CREATETABLE testtable_p1 PARTITION OF testtable FOR VALUES WITH (MODULUS 4, REMAINDER 0);CREATETABLE testtable_p2 PARTITION OF testtable FOR VALUES WITH (MODULUS 4, REMAINDER 1);CREATETABLE testtable_p3 PARTITION OF testtable FOR VALUES WITH (MODULUS 4, REMAINDER 2);CREATETABLE testtable_p4 PARTITION OF testtable FOR VALUES WITH (MODULUS 4, REMAINDER 3);
查看表信息:
插入数据:
insert intotesttable(id) values (1);insert intotesttable(id) values (2);insert intotesttable(id) values (3);insert intotesttable(id) values (4);
查看表散布状况
postgres=# select relname,relshardid from pg_class where reltype<>0 and relname like'%testtable%';
集群曾经能够失常工作。
四、基准性能测试
4.1 筹备环境
4.1.1 在装置的环境种,进入如下目录:
/home/kunlun/cloudnative/Tools/sysbench-tpcc
4.1.2 装置sysbench
间接apt-get install sysbench或者yum installsysbench
4.1.3 筹备数据:
主机、端口、数据库、用户、明码、表数量、scale数量、线程数、运行工夫s
./prepare.sh hostport dbname user pwd table_num scale_num threads_num times./prepare.sh127.0.0.1 5401 postgres abc abc 1 1 1
4.2 运行压测:
./run.sh 1
测试后果:
五、附录1:install.json
{ "machines":[ { "ip":"192.168.0.11", "basedir":"/kunlun", "user":"kunlun" }, { "ip":"192.168.0.12", "basedir":"/kunlun", "user":"kunlun" }, { "ip":"192.168.0.13", "basedir":"/kunlun", "user":"kunlun" } ], "cluster":{ "name":"clust1", "meta":{ "nodes":[ { "is_primary":true, "ip":"192.168.0.11", "port":6001, "xport":60010, "mgr_port":60011, "innodb_buffer_pool_size":"64MB", "data_dir_path":"/data1", "log_dir_path":"/data1/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.12", "port":6002, "xport":60020, "mgr_port":60021, "innodb_buffer_pool_size":"64MB", "data_dir_path":"/data2", "log_dir_path":"/data2/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.13", "port":6003, "xport":60030, "mgr_port":60031, "innodb_buffer_pool_size":"64MB", "data_dir_path":"/data3", "log_dir_path":"/data3/log", "user":"kunlun", "election_weight":50 } ] }, "comp":{ "nodes":[ { "id":1, "name":"comp1", "ip":"192.168.0.11", "port":5401, "user":"abc", "password":"abc", "datadir":"/pgdatadir" }, { "id":2, "name":"comp2", "ip":"192.168.0.12", "port":5401, "user":"abc", "password":"abc", "datadir":"/pgdatadir" }, { "id":3, "name":"comp3", "ip":"192.168.0.13", "port":5401, "user":"abc", "password":"abc", "datadir":"/pgdatadir" } ] }, "data":[ { "nodes":[ { "is_primary":true, "ip":"192.168.0.11", "port":6004, "xport":60040, "mgr_port":60041, "innodb_buffer_pool_size":"4000MB", "data_dir_path":"/data4", "log_dir_path":"/data4/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.12", "port":6005, "xport":60050, "mgr_port":60051, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data5", "log_dir_path":"/data5/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.13", "port":6006, "xport":60060, "mgr_port":60061, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data6", "log_dir_path":"/data6/log", "user":"kunlun", "election_weight":50 } ] }, { "nodes":[ { "is_primary":true, "ip":"192.168.0.12", "port":6007, "xport":60070, "mgr_port":60071, "innodb_buffer_pool_size":"4000MB", "data_dir_path":"/data7", "log_dir_path":"/data7/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.11", "port":6008, "xport":60080, "mgr_port":60081, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data8", "log_dir_path":"/data8/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.13", "port":6009, "xport":60090, "mgr_port":60091, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data9", "log_dir_path":"/data9/log", "user":"kunlun", "election_weight":50 } ] }, { "nodes":[ { "is_primary":true, "ip":"192.168.0.13", "port":6010, "xport":60100, "mgr_port":60101, "innodb_buffer_pool_size":"4000MB", "data_dir_path":"/data7", "log_dir_path":"/data7/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.11", "port":6011, "xport":60110, "mgr_port":60111, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data8", "log_dir_path":"/data8/log", "user":"kunlun", "election_weight":50 }, { "is_primary":false, "ip":"192.168.0.12", "port":6012, "xport":60120, "mgr_port":60121, "innodb_buffer_pool_size":"3000MB", "data_dir_path":"/data9", "log_dir_path":"/data9/log", "user":"kunlun", "election_weight":50 } ] } ], "clustermgr":{ "ip":"192.168.0.11" } }}
六、附录2:CentOS补充指南
6.1 装置必要软件包及依赖(所有主机)
yum install -ypython-setuptools ncurses-libs icu libicu libaio readline python-psycopg2wget --no-check-certificatehttps://zettatech.tpddns.cn:14443/thirdparty/mysql-connector-python.el7.x86_64.rpmyum localinstall -ymysql-connector-python.el7.x86_64.rpm
6.2 用户环境&网络配置
6.2.1 kunlun用户SUDO免密(所有主机)chmod u+w /etc/sudoers
chmod u+w /etc/sudoers,为sudoers文件增加写权限。
而后用vi关上这一文件
vi /etc/sudoers
, 找到如下两行并减少kunlun用户及组
##Allow root to run any commands anywhereroot ALL=(ALL) ALLkunlun ALL=(ALL) NOPASSWD:ALL## Allows people in group wheel to run all commands%wheel ALL=(ALL) ALLkunlun ALL=(ALL) NOPASSWD:ALL
而后执行命令chmod u-w /etc/sudoers,撤销write权限。
6.2.2 SSH免密登录
6.2.2.1 各台主机配置主机名(依据状况批改):
/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.0.130 centos7b192.168.0.139 centos7c192.168.0.142 centos7d192.168.0.130 localhost
6.2.2.2 配置近程SSH免密(近程)
chmod 755 ~/.ssh
cd /home/kunlun/.ssh
如果“.ssh”目录不存在,请在/home/hadoop目录执行mkdir ~/.ssh命令创立。
执行以下命令后,如果提醒,就始终按“Enter”键,直至生成公钥。(每台机器)
ssh-keygen -t rsa
拷贝公钥到服务器(要登录下来的那台服务器)
scp id_rsa.pubkunlun@centos7c:/home/kunlun/.ssh/authorized_keys_from_centos7b
登录到要被登录的服务器()进入./ssh目录
cd~/.ssh
将客户端发送来的公钥文件进行合并
cat authorized_keys_from_centos7b >> authorized_keys
批改目录权限:
chown kunlun: .ssh chown kunlun: .ssh/* chmod 700 .ssh chmod 600 .ssh/*
6.2.2.3 配置本机SSH免密(本机-第一台装置的服务器)
ssh-keygen -t dsa -P '' -f .ssh/id_dsacat .ssh/id_dsa.pub >>.ssh/authorized_keyschmod 0600 .ssh/authorized_keys
KunlunDB我的项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb
END