巨杉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,下载地址在:
https://docs.docker.com/docker-for-windows/install/

对于 Linux 用户则可以直接使用 yum 或 apt-get 进行安装:
https://docs.docker.com/install/linux/docker-ce/centos/
https://docs.docker.com/install/linux/docker-ce/ubuntu/

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 应用。灵活将分布式数据库结合容器使用,能够使用户快速构建开发测试环境,大幅度降低开发过程中的基础设施维护成本。

原文地址:https://blog.51cto.com/13722387/2421958

时间: 2024-10-22 12:36:04

巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 服务器的相关文章

使用Nodejs搭建Web服务器

使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到Nodejs中几个比较重要的模块:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容 3.显示图片资源 4.自动下载以.apk/.docx/.zip结尾

巨杉Tech | 使用 SequoiaDB 分布式数据库搭建JIRA流程管理系统

介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.很多企业与互联网公司都在使用Jira作为内部流程管理系统,进行团队协作与问题单管理. JIRA的后台数据库可以选择使用嵌入式数据库或MySQL/PGSQL等专业数据库.一般来说,大部分企业选择MySQL作为底层的数据存储.但是,随着问题工单的不断积累,对于较大型企业来说MySQL所支撑的数据量可能很快达到瓶颈.用户可以选择使用SequoiaD

Nodejs搭建web服务器实现简单的登陆

本服务器采用了node-koa(2.0):koa是Express下的一个web框架. 搭建步骤: 1.首先我们创建一个web-koa目录,在目录下创建app.js,package.json,start.js三个文件. 2.然后我们来编辑最基本的package.json文件,如下: $ npm init { "name": "myapp", "version": "1.0.0", "description":

微信小程序开发入门(一),Nodejs搭建本地服务器

1.  如何模拟真实环境中,读取服务端数据,首先需要使用Nodejs搭建一个本地服务器的环境. 在搭建web服务器之前,需要先安装node.js(安装版本最好为6.9.x) 安装后node.js,接下来就需要安装http的镜像文件 npm install http-server -g(windows下)sudo npm install http-server -g(linux和mac下)接下来在桌面创建一个文件夹 cd 文件夹名字http-server这时候,就会显示在8080端口下运行的一个本

NodeMCU入门(4):搭建Web服务器,配置网络连接

准备工作 1.NodeMCU模块 2.ESPlorer v0.2.0-rc6 3.NodeMCU-HTTP-Server 搭建web服务器 下载https://github.com/wangzexi/NodeMCU-HTTP-Server文件,并上传到NodeMCU中 修改init.lua文件,可参看NodeMCU-HTTP-Server Example -- init.lua --------------------- -- wifi --------------------- print('

搭建web服务器环境

搭建web服务器的环境(配置PHP的工作环境): 首先要配置php,在Apache的配置文件夹中httpd.conf中配置 1把php配置成Apache的一个功能模块 LoadModule php5_module "F:\class22\amp\php\php5apache2_2.dll" 2.指定.php 后缀的文件交给PHP的功能模块处理 AddType apalication/x-httpd-php .php 3.确定PHP的配置文件php.ini的路径 PHPIniDir &q

linux搭建web服务器

linux httpd 假设服务器地址为192.168.80.20/24 1.   将准备安装的httpd软件包共享给everyone , (1)在linux上mount.cifs  //真机IP地址/共享文件夹名   /media / ls  /meidia/ 查看 tar    xjvf   httpd-2.4.10.tar.bz2    -C  /usr/src       解压至/usr/src下 下面两个插件是httpd2.4以后的版本所需要的 http://ftp.jaist.ac.

如何搭建web服务器 使用Nginx搭建反向代理服务器

转载   如何搭建web服务器 使用Nginx搭建反向代理服务器 :   http://blog.csdn.net/w13770269691/article/details/6977727 引言:最近公司有台服务器遭受DDOS攻击,流量在70M以上,由于服务器硬件配置较高所以不需要DDOS硬件防火 墙.但我们要知道,IDC机房是肯定不允许这种流量一直处于这么高的,因为没法具体知道后面陆续攻击的流量会有多大,如果流量过大就会导致整个IDC网络 瘫痪.我们都知道北方的数据中心和南方的数据中心从带宽出

Ubuntu 用 apache2 搭建 web 服务器 建wordpress博客

主要有5个步骤分别是: 1: 安装mysql. 2: 安装apache2 3: 安装php5 及其组件 4: 安装wordpress 第1步:安装mysql  这步非常简单.... sudo apt-get install mysql-server 输入用户名和密码..... 测试一下....就完成了 第2步: 安装apache2 sudo apt-get install apache2 安装完成 在浏览器里输入127.0.0.1就可以看到apache2的测试页 **apache2安装好后,默认