乐趣区

关于mysql:KunlunDB-指导手册10

一、理解 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-certificate
wget https://zettatech.tpddns.cn:14443/dailybuilds/enterprise/kunlun-server-0.9.1.tgz--no-check-certificate
wget 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+08
shard2 |  2 |2021-12-22 03:58:59.599486+08
Shard3 |  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-psycopg2
wget --no-check-certificatehttps://zettatech.tpddns.cn:14443/thirdparty/mysql-connector-python.el7.x86_64.rpm
yum 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 anywhere
root   ALL=(ALL)       ALL
kunlun ALL=(ALL)      NOPASSWD:ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL)       ALL
kunlun ALL=(ALL)       NOPASSWD:ALL

而后执行命令 chmod u-w /etc/sudoers,撤销 write 权限。

6.2.2 SSH 免密登录
6.2.2.1 各台主机配置主机名(依据状况批改):

/etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.130 centos7b
192.168.0.139 centos7c
192.168.0.142 centos7d
192.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_dsa
cat .ssh/id_dsa.pub >>.ssh/authorized_keys
chmod 0600 .ssh/authorized_keys

KunlunDB 我的项目已开源

【GitHub:】
https://github.com/zettadb

【Gitee:】
https://gitee.com/zettadb

END

退出移动版