ITPub博客

首页 > 数据库 > 国内数据库 > KunlunBase 快速入门 1.0

KunlunBase 快速入门 1.0

原创 国内数据库 作者:KunlunDB 时间:2022-04-07 11:16:32 0 删除 编辑

一、了解KunlunBase


1.1 KunlunBase产品基本概念&架构

 

KunlunBase是一个开源、高性能的分布式关系数据库,支持混合负载(HTAP)、PB级数据量管理并提供毫秒延迟的新一代数据库解决方案。

 

1.1.1 集群组件架构图


 

1.2 KunlunBase主要组件:

 

1.2.1 KunlunServer(计算节点)         

 

计算节点运行无状态计算&查询引擎,与Kunlun Storage进行交互执行SQL 任务,采用异步通信模式,一个计算节点可以协调多个存储节点执行数据处理(增删改查)任务。计算节点从元数据集群获取集群元数据并在本地持久化。Kunlun Server的SQL层兼容PostgreSQL和MySQL协议(开发中......),各个计算节点独立处理SQL计算。Kunlun Server支持标准SQL连接。

 

1.2.2 KunlunStorage(存储节点)


采用Shared-nothing架构,各存储节点运行一定数目的存储引擎实例,用来持久化应用(用户)数据。存储引擎执行计算节点发起SQL语句(在XA事务中的分支)。可以使用MGR单主模式或Binlog强同步模式做集群高可用。

 

1.2.3 Meta Cluster(元数据集群)


用来存储着若干个昆仑分布式数据库集群的元数据,及分布式事务两阶段提交的commit log。元数据集群采用一主两从的部署模式。


集群管理(Cluster_mgr)作为守护进程运行,‎负责监控和维护每一个存储集群及其节点的replication状态、集群计算节点与存储节点之间的元数据和状态同步、处理分布式事务节点故障处理等。集群管理器提供API供第三方管理软件调用。


节点管理(Node_mgr)在集群的每一台机器运行,检测该机器上所有计算节点,以及存储节点的状态,对所有节点实例进行保活管理。并通过HTTP接口接收集群管理的命令,进行节点实例安装,删除等功能。

 

1.2.4 Xpanel(运维监控平台)

 

KunlunBase的运维管理模块,可以对整个集群环境进行管理和监控。Xpanel可以监控集群各个节点的操作系统及各关键组件的重要信息,包括操作系统资源,操作系统错误日志,计算&存储引擎的关键日志错误信息等。


KunlunDMP是 KunlunBase备份恢复工具,DataPump是数据加载工具,支持 MySQL,PostgreSQL逻辑备份和数据的加载。



二、快速安装


一键安装流程

 

2.1 安装环境&配置需求

 

2.1.1 硬件配置

 

开发及测试环境(最低要求)


2.1.2 Linux 操作系统版本要求



2.2 规划集群拓扑

 

以一个三台服务器的配置为例:

 

做为开发测试环境,每台服务器的硬件最低配置为:4核CPU , 16G内存。(如果仅作功能测试,可以下载 KunlunBase docker映像安装,普通笔记本就可以部署 KunlunBase 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

     

    cd进入kunlunnative/cluster下:

      cd kunlunnative/cluster

       

      获取最新的版本的下载包:以0.9.1为例(如有其它最新版本请用最新版本)

       

      进入泽拓官网,点击产品下载;


       


      或者直接wget最新的二进程包。

        wget


        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-certificate

                                       

                                      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/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_dsacat .ssh/id_dsa.pub >>.ssh/authorized_keyschmod 0600 .ssh/authorized_keys

                                                          点击阅读原文

                                                          推荐阅读

                                                          KunlunBase架构介绍
                                                          KunlunBase技术优势介绍
                                                          KunlunBase技术特点介绍
                                                          PostgreSQL vs MySQL TPC-H 测试
                                                          Kunlun-Storage vs PostgreSQL OLTP 测试


                                                          来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70011764/viewspace-2885947/ ,如需转载,请注明出处,否则将追究法律责任。

                                                          请登录后发表评论 登录
                                                          全部评论

                                                          注册时间:2021-12-27

                                                          • 博文量
                                                            103
                                                          • 访问量
                                                            31403