容器模式部署

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 利用 LXC 来实现类似 VM 的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。

SequoiaDB 巨杉数据库为用户提供了 Docker 镜像,用户可以通过镜像快速部署集群进行开发和测试工作 。本文主要讲解如何在 Linux 系统上安装 Docker 应用并拉取 SequoiaDB 巨杉数据库的镜像进行安装部署,同时也展示了如何在部署后的环境中进行 MySQL 实例的CRUD操作。

集群配置

用户可以在五个容器中部署一个多节点高可用 SequoiaDB 集群。集群包含一个协调节点与编目节点,三个三副本数据节点,与一个 MySQL 实例节点。

主机名IP分区组软件版本
Coord 协调节点172.17.0.2:11810SYSCoordSequoiaDB
Catalog编目节点172.17.0.2:11800SYSCatalogGroupSequoiaDB
Data1数据节点1172.17.0.3:11820group1SequoiaDB
Data2数据节点2172.17.0.4:11820group1SequoiaDB
Data3数据节点3172.17.0.5:11820group1SequoiaDB
Data1数据节点2172.17.0.4:11830group2SequoiaDB
Data2数据节点3172.17.0.5:11830group2SequoiaDB
Data3数据节点1172.17.0.3:11830group2SequoiaDB
Data1数据节点3172.17.0.5:11840group3SequoiaDB
Data2数据节点1172.17.0.3:11840group3SequoiaDB
Data3数据节点2172.17.0.4:11840group3SequoiaDB
MySQL实例172.17.0.6:3306-SequoiaSQL-MySQL

Linux Docker 环境部署 SequoiaDB

1.下载镜像并上传至服务器

  1. wget http://cdn.sequoiadb.com/images/tools/sequoiadb_docker_image.tar.gz

2.解压 sequoiadb_docker_image.gz

  1. tar -zxvf sequoiadb_docker_image.tar.gz

3.恢复镜像 sequoiadb.tar

  1. docker load -i sequoiadb.tar

4.恢复镜像 sequoiasql-mysql.tar

  1. docker load -i sequoiasql-mysql.tar

5.启动四个 SequoiaDB 容器

  1. docker run -it -d --name coord_catalog sequoiadb/sequoiadb:latest
  2. docker run -it -d --name sdb_data1 sequoiadb/sequoiadb:latest
  3. docker run -it -d --name sdb_data2 sequoiadb/sequoiadb:latest
  4. docker run -it -d --name sdb_data3 sequoiadb/sequoiadb:latest

6.查看四个容器的容器 ID

  1. docker ps -a | awk '{print $NF}'

7.查看四个容器的容器对应的 IP 地址

  1. docker inspect coord_catalog | grep IPAddress |awk 'NR==2 {print $0}'
  2. docker inspect sdb_data1 | grep IPAddress |awk 'NR==2 {print $0}'
  3. docker inspect sdb_data2 | grep IPAddress |awk 'NR==2 {print $0}'
  4. docker inspect sdb_data3 | grep IPAddress |awk 'NR==2 {print $0}'

8.部署 SequoiaDB 集群。根据集群规划以及各个容器的 IP 地址,在对应参数填入各自的地址与端口号(建议存储空间在30G以上):

  1. docker exec coord_catalog "/init.sh" \
  2. --coord='172.17.0.2:11810' \
  3. --catalog='172.17.0.2:11800' \
  4. --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'

9.启动一个 MySQL 实例容器,并查看启动容器的 ID

  1. docker run -it -d -p 3306:3306 --name mysql sequoiadb/sequoiasql-mysql:latest

10.查看容器 IP 地址

  1. docker inspect mysql | grep IPAddress | awk 'NR==2 {print $0}'

11.将 MySQL 实例注册入协调节点:

  1. docker exec mysql "/init.sh" --port=3306 --coord='172.17.0.2:11810'

12.进入 mysql 容器

  1. docker exec -it mysql /bin/bash

13.查看 mysql 实例状态

  1. /opt/sequoiasql/mysql/bin/sdb_sql_ctl status

14.进入 coord_catalog 容器,查看 SequoiaDB 存储引擎节点列

  • 查看 sequoiadb 容器名称

    1. docker ps -a | awk '{print $NF}'
  • 进入 coord_catalog 容器查看编目节点和协调节点

    1. docker exec -it coord_catalog /bin/bash
  • 切换 sdbamdin 用户(sdbadmin用户密码:sdbadmin)

    1. su sdbadmin
  • 查看编目节点和协调节点列表

    1. sdblist t all l
  • 退出容器

    1. exit

数据库对接开发

1.进入 mysql 容器中

  1. docker exec -it mysql /bin/bash

2.启动 mysql(如未启动)

  1. /opt/sequoiasql/mysql/bin/sdb_sql_ctl start MySQLInstance

3.登录到 MySQL Shell

  1. /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root

4.创建新数据库 company,并切换到 company

  1. CREATE DATABASE company;
  2. USE company;

5.在 company 数据库中创建数据表 employee

  1. CREATE TABLE employee
  2. (
  3. empno INT AUTO_INCREMENT PRIMARY KEY,
  4. ename VARCHAR(128),
  5. age INT
  6. );

6.在表 employee 中插入如下数据:

  1. INSERT INTO employee (ename, age) VALUES ("Jacky", 36);
  2. INSERT INTO employee (ename, age) VALUES ("Alice", 18);

7.查询 employee 表中的数据

  1. SELECT * FROM employee;

8.退出 mysql 容器

  1. quit

9.进入 coord_catalog 容器中,并进入 SequoiaDB Shell 交互式界面,使用 JavaScript 连接协调节点,并获取数据库连接:

  1. docker exec -it coord_catalog /bin/bash
  2. su sdbadmin
  3. sdb
  4. var db = new Sdb("localhost", 11810);

10.使用 insert() 向 SequoiaDB 集合中写入记录

  1. db.company.employee.insert( { ename: "Abe", age: 20 } );

11.使用 find() 方法从集合中查询数据记录

  1. db.company.employee.find( { ename: "Abe" } );

12.使用 update() 方法将集合中的记录进行修改

  1. db.company.employee.update( { $set: { ename: "Ben" } }, { ename: "Abe" } );

13.使用 find() 方法从集合中查询数据记录,查看是否修改

  1. db.company.employee.find( { ename: "Ben" } );

14.使用 remove() 方法从集合中删除数据

  1. db.company.employee.remove( { ename: "Ben" } );

15.使用 find() 方法从集合中查询数据记录,查看是否删除

  1. db.company.employee.find( { ename: "Ben" } );

总结

使用 SequoiaDB 巨杉数据库提供基于 Docker 的镜像用户可以快速创建一个数据库集群,快速上手巨杉数据库的操作。