【巨杉數據庫SequoiaDB】巨杉 Tech | 幾分鐘實現巨杉數據庫容器化部署

隨着業務負載的不斷加重,容器化、虛擬化也成爲各類在線應用必須要具備的能力。對於分佈式數據庫,容器化也是提升快速部署、提高運維效率的一個很好的路徑。

我們重新優化了 Docker部署的方式,幫助大家更快的上手SequoiaDB集羣,本文就將介紹基於 Docker 的SequoiaDB分佈式集羣快速部署。

1.集羣配置

我們將在六個容器中部署一個多節點,高度可用的 SequoiaDB 集羣,如下所示:

(本文以 SequoiaDB v3.2.3 版本爲例)

該集羣包括一個協調器節點、一個目錄節點、三個數據組,每個數據組有三個副本數據節點和一個 MySQL 實例節點。

  1. 環境

​​​​​​​
OS :  Ubuntu 18
Docker Version : 18.09.7
Docker Compose Version: 1.25.3
Database Version : SequoiaDB 3.2.3
MySql Client: Sequoiasql-mysql
Cluster Deployment : 1 coordinator, 1 catalog, 3 data nodes, and 1 MySQL instance

2.1 Docker安裝

2.1.1 Docker

對於在不同平臺上的 Docker 安裝,用戶可以參閱 Docker 安裝指南。

sudo apt-get install -y docker.io

2.1.2 Docker-compose

Docker compose是一個用於定義和部署在YAML文件中定義的多容器泊塢應用程序的工具(i.e: docker-compose.yaml)。​​​​​​​
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2.1.3 MySQL 客戶端

安裝 MySQL 客戶端(如果尚未安裝)

sudo apt install mysql-client-core-5.7

  1. SequoiaDB分佈式集羣部署

定義 SequoiaDB 集羣配置 "sequoiadb_containers/docker-compose.yaml",用戶有兩個選項可以下載所需的軟件包。

選項1:克隆repo地址 

(點擊文末【閱讀原文】前往獲取軟件包)

選項2:手動下載(保留相同的目錄結構)

(點擊文末【閱讀原文】前往獲取軟件包)

3.1 部署 SequoiaDB 集羣

docker-compose up 命令將:

    - 如果沒有在本地找到,可前往dockerhub下載鏡像

    - 創建所需的容器

    - 啓動容器

    - 初始化 SequoiaDB 集羣和 MySQL 實例

1)部署集羣​​​​​​​
cd sequoiadb_containers (或者到docker-compose的目錄。yaml文件下載)
sudo docker-compose up -d

2)檢查集羣的狀態

$ sudo docker-compose ps
Name Command State Ports

     sequoiadb_containers_catalog_1   sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_coord_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data1_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data2_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data3_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_mysql_1     sh -c chmod +x /startup.sh ...   Up      0.0.0.0:3310->3310/tcp

3)等待集羣被部署和 MySQL 連接到協調器節點,用戶可以按如下方式檢查集羣狀態。​​​​​​​

檢查 coordinator 日誌

     $ sudo docker-compose logs coord
     ...
     ...
     coord_1    | ************ Deploy SequoiaDB ************************
     coord_1    | Create catalog: catalog:11800
     coord_1    | Create coord:   coord:11810
     coord_1    | Create data:    data1:11820
     coord_1    | Create data:    data2:11820
     coord_1    | Create data:    data3:11820
     coord_1    | Create data:    data1:11830
     coord_1    | Create data:    data2:11830
     coord_1    | Create data:    data3:11830
     coord_1    | Create data:    data1:11840
     coord_1    | Create data:    data2:11840
     coord_1    | Create data:    data3:11840
     coord_1    | SDB Cluster successfully created.

     # 檢查mysql日誌
     $ sudo docker-compose logs mysql
     ...
     ...
     mysql_1    | >>> Waiting for COORD node to come up at (coord:11810)...
     mysql_1    | >>> Waiting for COORD node to come up at (coord:11810)...
     mysql_1    | >>> Waiting for COORD node to come up at (coord:11810)...
     mysql_1    | Successfully reached COORD node at (coord:11810)
     mysql_1    | COMMAND: /init.sh --port=3310 --coord=coord:11810
     mysql_1    | Creating SequoiaSQL instance: MySQLInstance
     mysql_1    | Modify configuration file and restart the instance: MySQLInstance
     mysql_1    | Restarting instance: MySQLInstance
     mysql_1    | Opening remote access to user root
     mysql_1    | Restarting instance: MySQLInstance
     mysql_1    | Instance MySQLInstance is created on port 3310, default user is root
     mysql_1    | Init command returned: 0

3.2 驗證MySQL連接

$ mysql -h 127.0.0.1 -P 3310 -u root

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.25 Source distribution

     Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

     Oracle is a registered trademark of Oracle Corporation and/or its
     affiliates. Other names may be trademarks of their respective
     owners.

     Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

     mysql>

驗證SequoiaDB配置:

mysql> show variables like 'sequoiadb%';
+---------------------------------------+-------------+
| Variable_name | Value |
+---------------------------------------+-------------+
| sequoiadb_bulk_insert_size | 2000 |
| sequoiadb_conn_addr | coord:11810 |
| sequoiadb_debug_log | OFF |
| sequoiadb_execute_only_in_mysql | OFF |
| sequoiadb_optimizer_select_count | ON |
| sequoiadb_password | |
| sequoiadb_replica_size | 1 |
| sequoiadb_selector_pushdown_threshold | 30 |
| sequoiadb_use_autocommit | ON |
| sequoiadb_use_bulk_insert | ON |
| sequoiadb_use_partition | ON |
| sequoiadb_user | |
+---------------------------------------+-------------+
12 rows in set (0.01 sec)

     mysql> show storage engines;
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
     | Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
     | SequoiaDB          | DEFAULT | SequoiaDB storage engine(Community). Plugin: eebcb4f, Driver: 3.2.3, BuildTime:  | YES          | NO   | NO         |
     | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
     | PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
     | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)                   | NO           | NO   | NO         |
     | MyISAM             | YES     | MyISAM storage engine                                                            | NO           | NO   | NO         |
     | CSV                | YES     | CSV storage engine                                                               | NO           | NO   | NO         |
     | ARCHIVE            | YES     | Archive storage engine                                                           | NO           | NO   | NO         |
     | InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys                       | YES          | YES  | YES        |
     | FEDERATED          | NO      | Federated MySQL storage engine                                                   | NULL         | NULL | NULL       |
     | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
     10 rows in set (0.00 sec)

3.3 測試
       

用戶可以使用 MySQL 命令創建數據庫和表:

mysql> create database sample;
Query OK, 1 row affected (0.01 sec)

     mysql> use sample;
     Database changed
     mysql>  create table t1 (c1 int);
     Query OK, 0 rows affected (0.47 sec)

     mysql> show table status;
     +------+-----------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------+----------+----------------+---------+
     | Name | Engine    | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation   | Checksum | Create_options | Comment |
     +------+-----------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------+----------+----------------+---------+
     | t1   | SequoiaDB |      10 | Fixed      |    0 |              0 |           0 |   8796093022208 |       131072 |         0 |           NULL | NULL        | NULL        | NULL       | utf8mb4_bin |     NULL |                |         |
     +------+-----------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------+----------+----------------+---------+
     1 row in set (0.03 sec)
  1. 集羣管理

       

4.1 stop/start cluster

使用up命令創建 SequoiaDB 集羣后,它可以停止並按如下方式啓動。

Note:            

"stop"命令不會刪除容器,因此不會丟失任何數據。             

4.1.1 stop 命令

$ sudo docker-compose stop
Stopping sequoiadb_containers_mysql_1 ... done
Stopping sequoiadb_containers_coord_1 ... done
Stopping sequoiadb_containers_data2_1 ... done
Stopping sequoiadb_containers_data1_1 ... done
Stopping sequoiadb_containers_catalog_1 ... done
Stopping sequoiadb_containers_data3_1 ... done

     $ sudo docker-compose ps
                Name                         Command                State     Ports
     ------------------------------------------------------------------------------
     sequoiadb_containers_catalog_1   sh -c chmod +x /startup.sh ...   Exit 137        
     sequoiadb_containers_coord_1     sh -c chmod +x /startup.sh ...   Exit 137        
     sequoiadb_containers_data1_1     sh -c chmod +x /startup.sh ...   Exit 137        
     sequoiadb_containers_data2_1     sh -c chmod +x /startup.sh ...   Exit 137        
     sequoiadb_containers_data3_1     sh -c chmod +x /startup.sh ...   Exit 137        
     sequoiadb_containers_mysql_1     sh -c chmod +x /startup.sh ...   Exit 137

4.1.2 start 命令        ​​​​​​​

$ sudo docker-compose start
Starting catalog ... done
Starting data1 ... done
Starting data2 ... done
Starting data3 ... done
Starting coord ... done
Starting mysql ... done

     $ sudo docker-compose ps
                Name                         Command               State           Ports         
     --------------------------------------------------------------------------------------------
     sequoiadb_containers_catalog_1   sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_coord_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data1_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data2_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data3_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_mysql_1     sh -c chmod +x /startup.sh ...   Up      0.0.0.0:3310->3310/tcp

     # Verity mysql client is up
     $ sudo docker-compose logs mysql
     Attaching to sequoiadb_containers_mysql_1
     mysql_1    | Starting service sequoiasql-mysql ...
     mysql_1    | ok. (PID: 38)
     ...
     mysql_1    | MySql instance is started

4.2 down/up Cluster
       

4.2.1 down命令

down 命令將停止並刪除SequoiaDB集羣部署的容器。

Note:            

down命令應該謹慎執行,因爲當容器被破壞時無法回滾/恢復。            ​​​​​​​

$ sudo docker-compose down
Stopping sequoiadb_containers_mysql_1 ... done
Stopping sequoiadb_containers_coord_1 ... done
Stopping sequoiadb_containers_data2_1 ... done
Stopping sequoiadb_containers_data1_1 ... done
Stopping sequoiadb_containers_catalog_1 ... done
Stopping sequoiadb_containers_data3_1 ... done
Removing sequoiadb_containers_mysql_1 ... done
Removing sequoiadb_containers_coord_1 ... done
Removing sequoiadb_containers_data2_1 ... done
Removing sequoiadb_containers_data1_1 ... done
Removing sequoiadb_containers_catalog_1 ... done
Removing sequoiadb_containers_data3_1 ... done
Removing network sequoiadb_containers_sequoiadb_net

     $ sudo docker-compose ps
     Name   Command   State   Ports
     ------------------------------

4.2.2 up命令

up命令將創建並啓動爲sequoiadb cluser定義的服務(容器,網絡)。​​​​​​​

$ sudo docker-compose up -d
Creating network "sequoiadb_containers_sequoiadb_net" with the default driver
Creating sequoiadb_containers_data2_1 ... done
Creating sequoiadb_containers_data3_1 ... done
Creating sequoiadb_containers_catalog_1 ... done
Creating sequoiadb_containers_data1_1 ... done
Creating sequoiadb_containers_coord_1 ... done
Creating sequoiadb_containers_mysql_1 ... done

     $ sudo docker-compose ps
                Name                         Command               State           Ports         
     --------------------------------------------------------------------------------------------
     sequoiadb_containers_catalog_1   sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_coord_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data1_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data2_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_data3_1     sh -c chmod +x /startup.sh ...   Up                            
     sequoiadb_containers_mysql_1     sh -c chmod +x /startup.sh ...   Up      0.0.0.0:3310->3310/tcp

     # 驗證MySQL連接
     $ mysql -h 127.0.0.1  -P 3310 -u root
     Welcome to the MySQL monitor.  Commands end with ; or \g.
     Your MySQL connection id is 2
     Server version: 5.7.25 Source distribution

     Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

     Oracle is a registered trademark of Oracle Corporation and/or its
     affiliates. Other names may be trademarks of their respective
     owners.

     Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

     mysql> show storage engines;
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
     | Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
     | SequoiaDB          | DEFAULT | SequoiaDB storage engine(Community). Plugin: eebcb4f, Driver: 3.2.3, BuildTime:  | YES          | NO   | NO         |
     | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
     | PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
     | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)                   | NO           | NO   | NO         |
     | MyISAM             | YES     | MyISAM storage engine                                                            | NO           | NO   | NO         |
     | CSV                | YES     | CSV storage engine                                                               | NO           | NO   | NO         |
     | ARCHIVE            | YES     | Archive storage engine                                                           | NO           | NO   | NO         |
     | InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys                       | YES          | YES  | YES        |
     | FEDERATED          | NO      | Federated MySQL storage engine                                                   | NULL         | NULL | NULL       |
     | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
     +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+

不知道您是否已經動手操作了呢?

SequoiaDB後續也將持續推出系列技術教程,幫助大家更快上手分佈式數據庫,同時更好的理解分佈式數據庫的原理,大家敬請期待!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章