巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 服务器
容器化技术的出现大大简化了应用开发人员在构建底层基础设施的工作。SequoiaDB 巨杉数据库于3.2.1版本正式推出了 Docker 容器化部署方案,本文将会基于 SequoiaDB 巨杉数据库与Nodejs的 Docker 镜像搭建一个简易的 Web 服务器。
1、规划部署
我们将会搭建一个三分区三副本的高可用 SequoiaDB 巨杉数据库。同时,我们将会创建一个 SequoiaDB 巨杉数据库的 MySQL 实例,用以提供 Nodejs 作为数据源。
|
容器角色 |
容器名/IP:端口 |
分区组 |
镜像版本 |
|
数据库协调节点 |
coord_catalog/172.17.0.2:11810 |
SYSCoord |
sequoiadb/sequoiadb:v3.2.1 |
|
数据库编目节点 |
coord_catalog/172.17.0.2:11800 |
SYSCatalog |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区1副本1 |
sdb_data1/172.17.0.3:11820 |
group1 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区1副本2 |
sdb_data2/172.17.0.4:11820 |
group1 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区1副本3 |
sdb_data3/172.17.0.5:11820 |
group1 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区2副本1 |
sdb_data2/172.17.0.4:11830 |
group2 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区2副本2 |
sdb_data3/172.17.0.5:11830 |
group2 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区2副本3 |
sdb_data1/172.17.0.3:11830 |
group2 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区3副本1 |
sdb_data3/172.17.0.5:11840 |
group3 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区3副本2 |
sdb_data1/172.17.0.3:11840 |
group3 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据分区3副本3 |
sdb_data2/172.17.0.4:11840 |
group3 |
sequoiadb/sequoiadb:v3.2.1 |
|
数据库 MySQL实例 |
mysql/172.17.0.6:3306 |
- |
sequoiadb/sequoiasql-mysql:v3.2.1 |
|
Nodejs Web 服务器 |
nodetest/172.17.0.7:3000 |
- |
node:latest |
2、安装 Docker 环境
对于已经安装了 Docker 环境的读者可以跳过本章节。对于之前没有使用过 Docker 的读者可以通过本章节安装本地 Docker 环境。
Docker 可以运行在绝大部分主流操作系统上,包括常用的 Windows、Mac 以及 Linux 的多个版本均可支持。
对于 Mac 用户可以安装 Docker Desktop for Mac,下载地址在:
|
https://hub.docker.com/editions/community/docker-ce-desktop-mac |
对于 Windows 用户可以安装 Docker Deskop for Windows,下载地址在:
对于 Linux 用户则可以直接使用 yum 或 apt-get 进行安装:
3、搭建 SequoiaDB 巨杉数据库集群
3.1、将 SequoiaDB 引擎与 SequoiaSQL-MySQL 数据库实例下载至本地
|
docker pull sequoiadb/sequoiadb:v3.2.1 docker pull sequoiadb/sequoiasql-mysql:v3.2.1 |
3.2、启动数据库引擎容器
|
docker run -it -d --name coord_catalog sequoiadb/sequoiadb:v3.2.1 docker run -it -d --name sdb_data1 sequoiadb/sequoiadb:v3.2.1 docker run -it -d --name sdb_data2 sequoiadb/sequoiadb:v3.2.1 docker run -it -d --name sdb_data3 sequoiadb/sequoiadb:v3.2.1 |
3.3、验证各个容器的 IP 地址
|
docker inspect --format '{{ .NetworkSettings.IPAddress}}' coord_catalog docker inspect --format '{{ .NetworkSettings.IPAddress}}' sdb_data1 docker inspect --format '{{ .NetworkSettings.IPAddress}}' sdb_data2 docker inspect --format '{{ .NetworkSettings.IPAddress}}' sdb_data3 |
预期输出结果为:
|
172.17.0.2 172.17.0.3 172.17.0.4 172.17.0.5 |
3.4、部署 SequoiaDB 巨杉数据库引擎集群
|
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' |
预期输出结果为:
|
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 |
3.5、启动 MySQL 实例容器
|
docker run -it -d -p 3306:3306 --name mysql sequoiadb/sequoiasql-mysql:v3.2.1 |
3.6、验证 IP 地址
|
docker inspect --format '{{ .NetworkSettings.IPAddress}}' mysql |
预期输出结果为:
|
172.17.0.6 |
3.7、创建 MySQL 实例
|
docker exec mysql "/init.sh" --port=3306 --coord='172.17.0.2:11810' |
其中 coord 参数填写协调节点所在的 IP 地址与监听端口。
预期输出结果为:
|
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 |
4、登录 MySQL 并创建一个测试表
4.1、得到 MySQL 实例的容器 ID
|
docker ps --filter name=mysql --format {{.ID}} |
预期结果为 MySQL 实例容器所在的 Container ID:
|
cc17df22a908 |
4.2、登录 MySQL 实例命令行
|
docker exec -it cc17df22a908 "/opt/sequoiasql/mysql/bin/mysql" -h 127.0.0.1 -u root |
其中 -it 参数为 MySQL 实例的容器 ID,预期结果为:
|
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, 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.
No entry for terminal type "xterm"; using dumb terminal settings. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> |
4.3、创建数据库与表,并创建一条测试数据
|
create database sample; use sample; create table t1 ( c1 varchar(100)); insert into t1 values ("SequoiaDB"); select * from t1; |
预期输出结果为:
|
+-----------+ | c1 | +-----------+ | SequoiaDB | +-----------+ 1 row in set (0.02 sec) |
5、创建 Nodejs 服务
5.1、创建 app.js 文件
|
var express = require('express'); //引入express模块 var mysql = require('mysql'); //引入mysql模块 var app = express(); //创建express的实例 var connection = mysql.createConnection({ //创建mysql实例 host:'172.17.0.6', port:'3306', user:'root', password:'', database:'sample' }); var sql = 'SELECT * FROM t1'; connection.connect(); app.get('/',function (req,res) { connection.query(sql, function (err,result) { if(err){ console.log('[SELECT ERROR]:',err.message); } res.send('Hello: ' + result[0].c1 ) ; }); }); app.listen(3000,function () { ////监听3000端口 console.log('Server running at 3000 port'); }); |
代码中的 host 使用 MySQL 实例的 IP 地址。
5.2、创建 package.json 文件
|
{ "name": "nodetest", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1", "mysql": "^2.17.1" } } |
5.3、创建 Dockerfile 文件
|
FROM node:latest RUN mkdir -p /usr/src/
COPY package.json /usr/src/ COPY app.js /usr/src/ WORKDIR /usr/src/
RUN npm install #定义程序默认端口 EXPOSE 3000 #运行程序命令 CMD ["node","app.js"] |
5.4、当前目录中应仅包含三个文件
|
$ ls -la total 24 drwxr-xr-x 5 sequoiadb staff 160 7 16 15:22 . drwxr-xr-x 94 sequoiadb staff 3008 7 16 10:50 .. -rw-r--r-- 1 sequoiadb staff 206 7 16 12:24 Dockerfile -rw-r--r-- 1 sequoiadb staff 766 7 16 12:27 app.js -rw-r--r-- 1 sequoiadb staff 278 7 16 12:03 package.json |
5.5、创建 Nodejs 服务镜像
|
docker build -t nodetest . |
5.6、运行 Nodejs 服务容器
|
docker run -d -p 3000:3000 nodetest |
5.7、打开浏览器,连接本地的 3000 端口

5.8、更改数据库中的记录,可以看到浏览器显示的内容随之发生调整
|
$ docker exec -it cc17df22a908 "/opt/sequoiasql/mysql/bin/mysql" -h 127.0.0.1 -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 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.
No entry for terminal type "xterm"; using dumb terminal settings. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use sample; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed mysql> update t1 set c1="Node" where c1="SequoiaDB"; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 |
刷新浏览器后显示:

6、小结
本文展示了如何通过 SequoiaDB 巨杉数据库的 Docker 容器,结合 Nodejs 快速搭建一个 Web 应用。灵活将分布式数据库结合容器使用,能够使用户快速构建开发测试环境,大幅度降低开发过程中的基础设施维护成本。
巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 服务器的更多相关文章
- nodejs搭建web服务器初级
nodejs搭建简单的web服务器 1.1简介 Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快 ...
- 巨杉Tech | 使用 SequoiaDB 分布式数据库搭建JIRA流程管理系统
介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.很多企业与互联网公司都在使用Jira作为内部 ...
- nodejs搭建web服务器
一.代码结构 //1.引入相关模块 var http=require("http") var url=require("url") var fs=require ...
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- nodejs搭建web服务教程
nodejs搭建web服务教程 先安装nodejs 然后 命令node js文件 即可开启服务了 输出如下 Magic happens on port 9011 你查看端口可以看到tcp 0 0 :: ...
- 记录一些服务端术语和搭建web服务器
菜单快捷导航 服务端常用术语 搭建web服务器和配置虚拟主机 记录一些服务端方面的常用术语 1.CS架构和BS架构 1.1 CS架构 CS(Client/Server),基于安装包类型的桌面或手机软件 ...
- NodeJS搭建HTTPS服务器
[NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d
- 在Win7系统中搭建Web服务器
局 域网Web服务器的主要功能是实现资源共享,同时借助于局域网服务器访问页面可有效的实现信息的同步.利用Web服务器,我们随时随地都可以将自己的信息 上传到服务器端,让其它关注你的用户能在第一时间内了 ...
- 轻松使用Nginx搭建web服务器
如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,“一哥”( ...
随机推荐
- 【DTOJ】1001:长方形周长和面积
DTOJ 1001:长方形周长和面积 解题报告 2017.11.05 第一版 ——由翱翔的逗比w原创 题目信息: 题目描述 已知长方形的长和宽,求长方形的周长和面积? 输入 一行:空格隔开的两个整 ...
- KVM-virsh 创建虚拟网络
创建网络 创建配置文件 vim /etc/libvirt/qemu/networks/nfsnobody.xml #创建一个名为nfsnobody的虚拟网络 <network> <n ...
- 谷歌BBR拥塞算法内核更新
为什么想到这个呢,算法什么的又不太懂,这是 因为搭建VPN + BBR 与之简直绝配 有的人搭建SSR ,配一个什么锐速,还需要降内核版本, 而且还容易出错,降了之后更加容易出现兼容性问题,所以偶尔看 ...
- Bounce 弹飞绵羊 HYSBZ - 2002 分块
//预处理出以这个点为起点并跳出这个块的次数和位置 //更新一个点的弹力系数可以只更新这个点以及这个块内之前的点 #include<stdio.h> #include<algorit ...
- C语言再学习part2-重新认识C语言词汇
迷阳迷阳,无伤吾行.无行郗曲,无伤吾足.—庄子 C语言词汇: 标识符 在程序中的变量名.函数名.标号等等成为标识符.其中标识符相在C中只能是字母A~Z,a~z,数字0~9,下划线(_)组成的字符串,并 ...
- 2.Android网络编程-web介绍以及Tomcat安装使用
1.CS和BS CS:Client/Server 客户端和服务器,这种软件往往需要安装.比如QQ.迅雷.播放器. 优点 : 可以减轻服务器端压力,将部分代码写到客户端,并且界面很美观. 缺点 : ...
- 剑指offer-面试题35-复杂链表的复制-链表
/* 题目: 实现一个函数,复制复杂链表,返回复制链表的头节点. */ /* 思路: 第一步,复制一个链表S‘,插在原链表S中. 第二步,链表S’复制链表S的random指针. 第三步:拆分链表S和S ...
- PhpCms V9调用指定栏目子栏目文章的方法
PhpCms V9调用指定栏目子栏目文章的方法 第一种,直接写父类id {pc:content action="lists" catid="父类id" num= ...
- Linux 进程调度笔记(一)
主要讨论的是单核 CPU 的情况下,进行调度的一些算法和思路.讨论都是基于单核 CPU 的条件下进行. 在内存中,无论对于用户而言有多少个进程,但在 CPU 运行的时候,总是只有只执行一个进程.进程调 ...
- pyjsonrpc的使用
pyjsonrpc的使用 客户端 JsonRpcClient.py #!usr/bin/env python2.7 # -*- coding: utf-8 -*- import ssl import ...