KunlunDB 快速入門 1.0

KunlunDB發表於2022-04-07

一、瞭解KunlunDB


1.1 KunlunDB產品基本概念&架構

 

KunlunDB是一個開源、高效能的分散式關聯式資料庫,支援混合負載(HTAP)、PB級資料量管理並提供毫秒延遲的新一代資料庫解決方案。

 

1.1.1 叢集元件架構圖


KunlunDB 快速入門 1.0

 

1.2 KunlunDB主要元件:

 

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(運維監控平臺)

 

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安裝指南)

KunlunDB 快速入門 1.0

表格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為例(如有其它最新版本請用最新版本)

       

      進入澤拓官網,點選產品下載;


      KunlunDB 快速入門 1.0

       


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

        wget 


        2.5 配置一鍵安裝引數檔案

         

        前提:三臺伺服器建立使用者名稱為kunlun的使用者,配置好三臺主機間的信任關係。

         

        在一臺伺服器上操作:Server1

        kunlun使用者登入

        進入 cluster 目錄,進入到 install.json 檔案目錄

        KunlunDB 快速入門 1.0

         

        編輯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);

                         

                        檢視錶資訊:

                        KunlunDB 快速入門 1.0

                         

                        插入資料:  

                          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%';

                             


                            KunlunDB 快速入門 1.0

                            叢集已經可以正常工作。



                            四、基準效能測


                            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


                                  測試結果:

                                  KunlunDB 快速入門 1.0



                                  五、 附錄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


                                                          來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011764/viewspace-2885947/,如需轉載,請註明出處,否則將追究法律責任。