在Docker中运行Nuodb - 第1部分:在Docker容器中部署Nuodb数据库
在Noodb,我们不仅努力改进我们的分布式SQL数据库引擎,还可以更轻松地将NuodB进入CI / CD管道。 NuodB是ANSI标准和酸兼容的SQL数据库,适用于所有常见部署模型,例如裸机,虚拟机,云和混合云,以及最近的基于集装箱的环境,如Red Hat OpenShift容器平台。在其核心,Nuodb旨在具有高度可扩展的和容错能力,具有在分布式架构上加载的能力。
如果您想在Docker中尝试Nuodb的社区版(CE),我们可以提供运行最新版Nuodb的Nuodb Docker容器。容器图像可用 Docker. Hub. ,我们将不断更新更新,以便在每个云和基于集装箱的环境中提高部署。
Nuodb Community Edition(CE)是NOODB的完整功能版本,但仅限于一个存储管理器(SM)和三个事务引擎(TE)流程。社区版是免费的,并允许用户以自己的速度自我评估诺福布。有关更多信息,请参阅 社区版下载 page.
在我们开始之前有关诺博德的更多信息......
如果您不熟悉Nuodb的架构,请阅读我们的阅读 建筑白皮书。您还可以查看我们的电子书 NOODB和Docker. 适合高级架构讨论。
NuodB体系结构跨三个单独的组件分发管理和数据库处理。分离管理员和数据库函数允许Nuodb利用AWS自动缩放组或Kubernetes'自动播放POD等服务,以提高Nuodb的交易引擎(TES)和存储管理器(SMS)进程的吞吐量和高可用性。因此,在云本机环境中,我们建议您在自己的容器中运行每个Nuodb进程。
每个Noodb容器不必位于同一主机上,但需要在同一叠加网络上才能彼此通信。或者,您可以将主机端口映射到容器以连接到较大的网络上。我们还建议将TE容器放在同一主机上作为申请。这允许您的应用程序与缓存的数据库一起在本地通信,并且之间没有网络跳跃。
NOODB流程:
- 管理员服务 负责管理域和数据库状态。管理服务还负责将客户端应用程序连接到Nuodb TE进程的负载平衡功能。
- 存储管理器(SMS) 负责确保磁盘数据持久性并将更改复制到新的启动SMS。每个SM由单个管理服务管理。
- 交易引擎(TES) 负责将客户端应用程序连接到数据库并处理SQL事务。它们还执行数据表的内存数据缓存以优化SQL性能。每个TE由单个管理员服务管理。
在Docker中使用NOODB开始
既然您对NOODB架构有很大的根本性理解,让我们继续在Docker中部署第一个NOODB数据库 Docker运行 这将展示如何部署NOODB数据库的实际基础。
笔记: 如果您已经使用Docker撰写并希望快速追踪,以了解如何使用诺福布使用 Docker. 撰写请跳到 在Docker中运行Nuodb - 第4部分:使用Docker Compose 并重新访问Docker博客2和3以后了解有关视觉监控的更多信息以及如何使用NuodB使用公共SQL执行GUI工具。
第1步:将Docker安装到Rhel / CentOS,Ubuntu或MacOS环境中
该演示旨在将Nuodb CE运行在单个服务器或台式计算机上,以演示使用Nuodb的值和优点。我正在使用MacBook并从中安装了Docker 麦克斯的Docker.
笔记: 您可能需要配置Docker以允许您的用户帐户运行 Docker. 未要求的命令 苏达 pre-fix.
第2步:拉动Nuodb容器图像的副本
安装Docker后,将Nuodb CE容器图像拉到本地Docker Repo中。此命令需要几分钟才能完成。
Docker. pull nuodb/nuodb-ce:latest
第3步:创建Docker网络
Docker. network create nuodb-net
第4步:启动管理服务
让我们通过启动几个诺福德管理员服务来获得Nuodb。管理服务(及其对等体)是Nuodb及其域管理层的单个固定点。当SM和TE进程开始时,他们需要知道他们开始的管理程序的名称。
从命令行中,运行以下命令:
Docker运行 -d --name nuoadmin1 \ --hostname nuoadmin1 \ --network nuodb-net \ --publish 8888:8888 \ --volume nuoadmin-raft-1:/var/opt/nuodb \ --env nuodb_domain_entrypoint.=nuoadmin1 \ nuodb/nuodb-ce:latest nuoadmin
要创建一个容错管理员管理层,通过运行以下命令创建两个管理员服务:
Docker运行 -d --name nuoadmin2 \ --hostname nuoadmin2 \ --network nuodb-net \ --publish 8889:8888 \ --volume nuoadmin-raft-2:/var/opt/nuodb \ --env nuodb_domain_entrypoint.=nuoadmin1 \ nuodb/nuodb-ce:latest nuoadmin docker run -d --name nuoadmin3 \ --hostname nuoadmin3 \ --network nuodb-net \ --publish 8890:8888 \ --volume nuoadmin-raft-3:/var/opt/nuodb \ --env nuodb_domain_entrypoint.=nuoadmin1 \ nuodb/nuodb-ce:latest nuoadmin
笔记: 创建其他管理员服务时,--Publish参数中的第一个端口号为递增1.按示例您的第二个管理员服务将具有该值 8889:8888 。 此外, nuodb_domain_entrypoint. 变量必须仍然存在 nuoadmin1. !!此值表示其他管理员服务将对等待加入NOODB域的Leader管理服务。
以下示例,请继续创建第三个管理员服务。要确认NuodB管理服务,请成功创建并激活和连接,键入以粗体文本突出显示的命令。
$ Docker. exec -it nuoadmin1 nuocmd show domain server version: 4.0.4-2-019a14f800, server license: Community server time: 2020-01-22T19:33:24.566, client token: bd4dafec9dff90867aa61c73a55b6b32d4013868 Servers: [Nuoadmin1] Nuoadmin1:48005(Leader,Leader = Nuoadmin1)活动:连接* [Nuoadmin2] Nuoadmin2:48005(追随者,Leader = Nuoadmin1)有效:连接 [Nuoadmin3] Nuoadmin3:48005(追随者,Leader = Nuoadmin1)有效:连接 Databases:
第5步:启动数据库存储管理器(SM)
要启动Nuodb数据库,请通过运行以下命令启动Storage Manager(SM)进程。此命令将创建一个名为的数据库 测试 使用数据库登录凭据 DBA. 和密码 守门员 .
Docker运行 -d --name test-sm-1 \ --hostname test-sm-1 \ --network nuodb-net \ --volume test-arch-vol-1:/var/opt/nuodb \ nuodb/nuodb-ce:latest nuodocker \ --api-server nuoadmin1:8888 \ start sm --db-name test \ --server-id nuoadmin1 \ --dba-user dba \ --dba-password goalie
笔记: 我们使用使用持久存储卷创建了我们的管理员服务和SM流程 - 体积 关于我们的码头的论点 跑步 命令。我们强烈建议使用持久存储卷来确保如果删除或删除容器(出于任何原因),则下次替换容器启动它将找到已存在的存储卷并重用它 - 拾取它的位置最后的。在NOODB的情况下,新启动的管理员或Storage Manager容器将与其相同类型的已存在过程同步;如果可用,则在Nuodb积极地再次使用之前。
第6步:启动数据库事务引擎(TE)
通过运行以下命令启动事务引擎(TE)进程。使用 - 标签 参数是可选的。使用数据库进程标签允许Nuodb管理流程为客户端用户应用程序分配与所需标签名称匹配的TE。
Docker运行 -d --name test-te-1 \ --hostname test-te-1 \ --network nuodb-net \ nuodb/nuodb-ce:latest nuodocker \ --api-server nuoadmin1:8888 \ start te --db-name test \ --server-id nuoadmin1 \ --labels "te te1"
通过重新运行上面的命令替换突出显示,通过启动另一个te来缩减数据库 1 价值 2。在这个例子之后,继续创建第三个te。
要确认NuodB数据库已正确创建,请键入:
$ Docker. exec -it nuoadmin1 nuocmd show domain server version: 4.0.4-2-019a14f800, server license: Community server time: 2020-01-22T19:43:05.116, client token: 131e645a39b2be1535f51d043db0aaa4d5435a47 Servers: [Nuoadmin1] Nuoadmin1:48005(Leader,Leader = Nuoadmin1)活动:连接* [Nuoadmin2] Nuoadmin2:48005(追随者,Leader = Nuoadmin1)有效:连接 [Nuoadmin3] Nuoadmin3:48005(追随者,Leader = Nuoadmin1)有效:连接 Databases: test [RUNNING] [SM] Test-SM-1 / 192.168.0.5:48006(默认)[start_id = 0] [server_id = nuoadmin1] [pid = 42] [node_id = 1]监视:运行 [te] test-te-3 / 192.168.0.8:48006(默认)[start_id = 1] [server_id = nuoadmin3] [pid = 42] [node_id = 4]监视:运行 [TE] test-te-1/192.168.0.6:48006(默认)[start_id = 2] [server_id = nuoadmin1] [pid = 41] [node_id = 2] MONITORED:RUNNING [te] test-te-2 / 192.168.0.7:48006(默认)[start_id = 3] [server_id = nuoadmin2] [pid = 42] [node_id = 3]监视:运行
运行SQL.
现在您有一个运行的Nuodb数据库,让我们运行一些SQL语句!您可以通过安装Nuodb Sample“Hockey”数据库轻松实现此操作。
将终端窗口打开到NuoDmin1容器:
Docker. exec -it nuoadmin1 bash
您现在已连接到Nuodmin1容器。您的命令提示符将改为以下内容:
Bash-4.2 $
然后,运行以下命令:
nuosql [email protected] --schema hockey --user dba --password goalie </opt/nuodb/samples/quickstart/sql/create-db.sql >& /dev/null nuosql [email protected] --schema hockey --user dba --password goalie </opt/nuodb/samples/quickstart/sql/Players.sql >& /dev/null nuosql [email protected] --schema hockey --user dba --password goalie </opt/nuodb/samples/quickstart/sql/Teams.sql >& /dev/null nuosql [email protected] --schema hockey --user dba --password goalie </opt/nuodb/samples/quickstart/sql/Scoring.sql >& /dev/null
完毕。您现在有一个样本曲棍球播放器和团队数据库!您可以对曲棍球架构运行您想要的任何SQL。
这里有一些例子。首先,使用nuodb sql运行工具nuosql登录数据库。
SQL练习1。
Bash-4.2 $ nuosql. [email protected] --schema hockey --user dba --password goalie SQL> use hockey; SQL> show tables; Tables in schema HOCKEY HOCKEY PLAYERS SCORING TEAMS VW_PLAYER_STATS is a view SQL> select /* top 10 goal scorers in single season */ firstname, lastname, birthyear, s.year "YEAR PLAYED", t.name "TEAM", s.goals from scoring s, players p, teams t where s.playerid = p.playerid and s.year = t.year and s.teamid = t.teamid order by s.goals desc limit 10; FIRSTNAME LASTNAME BIRTHYEAR YEAR PLAYED TEAM GOALS ---------- --------- ---------- ------------ ------------------- ------ Wayne Gretzky 1961 1981 Edmonton Oilers 92 Wayne Gretzky 1961 1983 Edmonton Oilers 87 Brett Hull 1964 1990 St. Louis Blues 86 Mario Lemieux 1965 1988 Pittsburgh Penguins 85 Bobby Hull 1939 1974 Winnipeg Jets 77 Phil Esposito 1942 1970 Boston Bruins 76 Alexander Mogilny 1969 1992 Buffalo Sabres 76 Teemu Selanne 1970 1992 Winnipeg Jets 76 Real Cloutier 1956 1978 Quebec Nordiques 75 Wayne Gretzky 1961 1984 Edmonton Oilers 73 SQL> select /* top all-time cummulative goal scorers */ firstname, lastname, birthyear, count(s.year) "YEARS PLAYED", round(avg(s.goals),2) "AVG GOALS/YR", sum(s.goals) "TOT GOALS" from scoring s, players p, teams t where s.playerid = p.playerid and s.year = t.year and s.teamid = t.teamid group by firstname, lastname, birthyear order by sum(s.goals) desc limit 10; FIRSTNAME LASTNAME BIRTHYEAR YEARS PLAYED AVG GOALS/YR TOT GOALS ---------- --------- ---------- ------------- ------------- ---------- Gordie Howe 1928 32 30.47 975 Wayne Gretzky 1961 23 40.87 940 Bobby Hull 1939 24 38.04 913 Brett Hull 1964 21 35.29 741 Mike Gartner 1959 23 31.96 735 Marcel Dionne 1951 19 38.47 731 Phil Esposito 1942 19 37.74 717 Mark Messier 1961 27 25.74 695 Steve Yzerman 1965 22 31.45 692 Mario Lemieux 1965 17 40.59 690 SQL>
SQL练习2。
Nuodb支持ANSI标准SQL,另外,在其他供应商的SQL RDBMS产品中发现的许多字符串,日期和算术函数。玩得开心,尝试一些自己的SQL。
以下是上面使用ANSI SQL 92语法重写的第一个SQL语句的示例。运行此SQL语句以确认SQL结果与第一个SQL语句完全相同。
SQL> select /* top goal scorers in single season */ firstname, lastname, birthyear, s.year "YEAR PLAYED", t.name "TEAM", s.goals from scoring s join players using (playerid) join teams t using (year,teamid) order by s.goals desc Limit 10;
SQL练习3。
使用时连接到数据库时 nuosql. 命令,默认情况下,通过默认的循环负载均衡器进行连接以获取事务引擎(TE)。以下是,如果您想根据标签值连接到特定TE,您如何覆盖。回想一下,当我们创建我们的TES时,我们为他们分配了每个特定的标签!
尝试此命令:
Bash-4.2 $ nuosql. [email protected] --user dba --password goalie --connection-property "LBQuery=round_robin(first(label(te te1) any))" SQL> select nodeid, clientinfo, created from system.connections; NODEID CLIENTINFO CREATED ------- ----------- -------------------------- 2 nuosql 2018-12-07 18:37:02.671364 SQL>
通知 nuosql. 命令指定首先连接到标记为TE1的TE,如果它找不到一个,则只需连接到“任何”TE。
SELECT查询显示NUOSQL会话连接到NodeID 2.如果您运行 Nuocmd显示领域 命令,您将在下面演示的数据库进程的NOODB域中看到(在此示例中)TE1在数据库进程的域中,请参阅蓝色亮点。
Bash-4.2 $ Nuocmd显示领域
服务器版本:3.3-1-14DF3B390,服务器许可证:社区
服务器时间:2018-12-07T19:06:58.749,客户端令牌:7B51AF9937F32EFBDBC1E800E04251276751ACD5
服务器:
[Nuoadmin1] Nuoadmin1:48005(Leader,Leader = Nuoadmin1)活动:连接*
[Nuoadmin2] Nuoadmin2:48005(追随者,Leader = Nuoadmin1)有效:连接
[Nuoadmin3] Nuoadmin3:48005(追随者,Leader = Nuoadmin1)有效:连接
数据库:
test [RUNNING]
[SM] Test-SM-1 / 192.168.0.5:48006(默认)[start_id = 0] [server_id = nuoadmin1] [pid = 42] [node_id = 1]监视:运行
[te] test-te-3 / 192.168.0.8:48006(默认)[start_id = 1] [server_id = nuoadmin3] [pid = 42] [node_id = 4]监视:运行
[TE] TEST-TE-1 /192.168.0.6:48006(默认)[start_id = 2] [server_id = nuoadmin1] [pid = 41] [node_id = 2] MONITORED:RUNNING
[te] test-te-2 / 192.168.0.7:48006(默认)[start_id = 3] [server_id = nuoadmin2] [pid = 42] [node_id = 3]监视:运行
你可以自己尝试使用相同的 nuosql. 命令,而是直接连接到te TEST-TE-2 或者 TEST-TE-3 使用正确的标签规范 te2 or te3.
完成后,键入 出口 退出 nuoadmin1. container.
Bash-4.2 $ exit
如何关闭并重新启动nuodb
要关闭并重新启动数据库,请刚发出Nuodb Shutdown Database命令,删除数据库SM和TE容器,并重新创建它们。此命令将删除数据库容器。
Docker. exec -it nuoadmin1 nuocmd shutdown database --db-name test docker rm -f test-sm-1 test-te-1 test-te-2 test-te-3
要证明数据库已关闭,现在处于非运行状态,运行:
Docker. exec -it nuoadmin1 nuocmd show domain
要再次启动数据库,请重新运行前面列出的相同Docker运行命令以创建新的SM容器和三个新TE容器。当新的SM进程开始时,它将发现已存在的存储卷 Test-Arch-Vol-1 并安装它。因此,您的数据库将从最后离开的位置开始。要演示此问题,请登录Nuodb SQL工具 nuosql. 正如你之前的那样。您会注意到您的样本 曲棍球 架构及其数据仍将存在。
清理 - 删除数据库
使用容器时,清理很容易。您可以通过删除Nuodb容器,存储卷和Docker网络来简单地删除数据库, NOODB-NET. .
Docker. rm -f nuoadmin1 nuoadmin2 nuoadmin3 docker rm -f test-sm-1 test-te-1 test-te-2 test-te-3 docker volume rm -f nuoadmin-raft-1 nuoadmin-raft-2 nuoadmin-raft-3 docker volume rm -f test-arch-vol-1 docker network rm nuodb-net
下一步
从这个系列开始准备更多?查看Docker博客中的诺福布的其余部分:
- 在Docker中运行Nuodb - 第2部分:扩展,连续可用性和视觉监控
- 在Docker中运行Nuodb - 第3部分:如何使用诺福德的常用SQL执行GUI工具
- 在Docker中运行Nuodb - 第4部分:使用Docker Compose
从2019年1月7日的原始出版日期更新