爲方便用戶快速體驗,SequoiaDB 巨杉數據庫提供基於 Docker 的鏡像。本文介紹如何在 Docker 環境下部署 SequoiaDB 分佈式集羣環境。mysql
咱們準備在五個容器中部署一個多節點高可用 SequoiaDB 集羣。sql
主機名 | IP | 分區組 | 部署軟件 |
---|---|---|---|
Coord 協調節點 | 172.17.0.2:11810 | SYSCoord | SequoiaDB 3.2.1 |
Catalog編目節點 | 172.17.0.2:11800 | SYSCatalogGroup | SequoiaDB 3.2.1 |
Data1數據節點1 | 172.17.0.3:11820 | group1 | SequoiaDB 3.2.1 |
Data2數據節點2 | 172.17.0.4:11820 | group1 | SequoiaDB 3.2.1 |
Data3數據節點3 | 172.17.0.5:11820 | group1 | SequoiaDB 3.2.1 |
Data1數據節點2 | 172.17.0.4:11830 | group2 | SequoiaDB 3.2.1 |
Data2數據節點3 | 172.17.0.5:11830 | group2 | SequoiaDB 3.2.1 |
Data3數據節點1 | 172.17.0.3:11830 | group2 | SequoiaDB 3.2.1 |
Data1數據節點3 | 172.17.0.5:11840 | group3 | SequoiaDB 3.2.1 |
Data2數據節點1 | 172.17.0.3:11840 | group3 | SequoiaDB 3.2.1 |
Data3數據節點2 | 172.17.0.4:11840 | group3 | SequoiaDB 3.2.1 |
MySQL實例 | 172.17.0.6:3306 | - | SequoiaSQL-MySQL 3.2.1 |
集羣包含一個協調節點與編目節點,三個三副本數據節點,與一個 MySQL 實例節點。docker
Docker 環境 | Mac Docker 2.0.0.3 |
---|---|
容器操做系統版本 | Ubuntu 18 |
數據庫版本 | SequoiaDB 3.2.1 |
集羣部署 | 一個運行協調和編目節點,三個運行數據節點,一個運行 MySQL 實例 |
Docker 在 Linux/Windows/MacOS 平臺安裝方法可參考官方文檔。數據庫
對於 Linux 環境可參考本樣例安裝 Docker 環境。bash
$ apt-get install -y docker.io複製代碼
$ docker pull sequoiadb/sequoiadb
$ docker pull sequoiadb/sequoiasql-mysql複製代碼
$ docker run -it -d --name coord_catalog sequoiadb/sequoiadb:latest
$ docker run -it -d --name sdb_data1 sequoiadb/sequoiadb:latest
$ docker run -it -d --name sdb_data2 sequoiadb/sequoiadb:latest
$ docker run -it -d --name sdb_data3 sequoiadb/sequoiadb:latest複製代碼
$ docker ps -a | awk '{print $NF}';複製代碼
運行結果:分佈式
NAMES
sdb_data3
sdb_data2
sdb_data1
coord_catalog複製代碼
$ docker inspect coord_catalog | grep IPAddress |awk 'NR==2 {print $0}'
$ docker inspect sdb_data1 | grep IPAddress |awk 'NR==2 {print $0}'
$ docker inspect sdb_data2 | grep IPAddress |awk 'NR==2 {print $0}'
$ docker inspect sdb_data3 | grep IPAddress |awk 'NR==2 {print $0}'複製代碼
四條命令的輸出結果分別爲各個容器自身的 IP 地址:測試
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.5",複製代碼
根據集羣規劃以及各個容器的 IP 地址,在對應參數填入各自的地址與端口號。ui
$ docker exec coord_catalog "/init.sh" \
--coord='172.17.0.2:11810' \
--catalog='172.17.0.2:11800' \
--data='group1=172.17.0.3:11820,172.17.0.4:11820,172.17.0.5:11820;group2=172.17.0.4:11830,172.17.0.5:11830,172.17.0.3:11830;group3=172.17.0.5:11840,172.17.0.3:11840,172.17.0.4:11840'複製代碼
該命令輸出結果爲:
spa
Begin generating SequoiaDB conf file
Finish generating SequoiaDB conf file
Restarting sdbcm process, it will take 10 seconds
Deploy...
Execute command: /opt/sequoiadb/tools/deploy/../../bin/sdb -f /opt/sequoiadb/tools/deploy/quickDeploy.js -e ''
************ Deploy SequoiaDB ************************
Create catalog: 172.17.0.2:11800
Create coord: 172.17.0.2:11810
Create data: 172.17.0.3:11820
Create data: 172.17.0.4:11820
Create data: 172.17.0.5:11820
Create data: 172.17.0.4:11830
Create data: 172.17.0.5:11830
Create data: 172.17.0.3:11830
Create data: 172.17.0.5:11840
Create data: 172.17.0.3:11840
Create data: 172.17.0.4:11840複製代碼
$ docker run -it -d -p 3306:3306 --name mysql sequoiadb/sequoiasql-mysql:latest複製代碼
$ docker ps -a | awk '{print $NF}';複製代碼
輸出結果爲包括 MySQL 實例在內的全部容器名:操作系統
NAMES
mysql
sdb_data3
sdb_data2
sdb_data1
coord_catalog複製代碼
$ docker inspect mysql | grep IPAddress | awk 'NR==2 {print $0}'複製代碼
輸出結果爲 MySQL 實例的 IP 地址:
"IPAddress": "172.17.0.6",複製代碼
$ docker exec mysql "/init.sh" --port=3306 --coord='172.17.0.2:11810'複製代碼
輸出結果爲:
Creating SequoiaSQL instance: MySQLInstance
Modify configuration file and restart the instance: MySQLInstance
Restarting instance: MySQLInstance
Opening remote access to user root
Restarting instance: MySQLInstance
Instance MySQLInstance is created on port 3306, default user is root複製代碼
$ mysql -h 127.0.0.1 -P 3306 -u root複製代碼
能夠獲得 MySQL 鏈接成功的輸出:
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, 2019, 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 命令建立數據庫與表:
mysql> create database sample;
Query OK, 1 row affected (0.00 sec)
mysql> use sample;
Database changed
mysql> create table t1 (c1 int);
Query OK, 0 rows affected (0.59 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.16 sec)複製代碼
爲方便用戶重置已經建立了數據庫節點的容器,用戶能夠使用 cleanup.sh 腳本進行本地容器的重置。
$ docker exec mysql /cleanup.sh
$ docker exec coord_catalog /cleanup.sh
$ docker exec sdb_data1 /cleanup.sh
$ docker exec sdb_data2 /cleanup.sh
$ docker exec sdb_data3 /cleanup.sh複製代碼
爲方便用戶快速試用 SequoiaDB 分佈式數據庫,用戶可直接拉取 SequoiaDB 的 Docker 鏡像建立一個分佈式集羣。
該集羣僅爲測試使用,不可直接應用於生產環境。