使用Portworx和Couchbase的有状态容器

容器本应是短暂的,因此可以很好地扩展以用于无状态应用程序。 有状态的容器(例如Couchbase)需要区别对待。 管理Docker容器的持久性概述了如何管理有状态容器的持久性。

该博客将说明如何使用Docker Volume Plugins和Portworx创建有状态的容器。

为什么选择Portworx?

Portworx是易于部署的容器数据服务,可提供持久性,复制,快照,加密,安全的RBAC等。 一些好处是:

  1. 容器粒度卷 – Portworx可以在每个主机上占用多个EBS卷,并聚合容量并派生每个容器的容器粒度虚拟(软)卷。
  2. 可用区HA – Portworx将在跨可用区的多个计算实例中以块级别保护数据。 随着复制控制器在不同节点上重新启动Pod,数据仍将在那些节点上具有高可用性。
  3. 支持企业数据操作 – Portworx在可用物理卷之上实施容器细化快照,服务类,分层。
  4. 易于部署和配置 – Portworx本身作为容器进行部署,并与业务流程工具集成。 DevOps可以以编程方式提供具有任何属性的容器粒度存储,例如大小,服务等级,加密密钥等。

设置AWS EC2实例

Portworx仅在Linux或CoreOS上运行。 在AWS EC2上设置Ubuntu实例:

  1. 使用m3.medium实例类型启动Ubuntu 14.04实例。 确保将端口8091添加到入站安全规则。 这样,以后便可以访问Couchbase Web Console 。
  2. 使用以下命令登录到EC2实例: ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@<public-ip>
  3. 更新Ubuntu实例: sudo apt-get update
  4. 安装Docker: curl -sSL https://get.docker.com/ | sh curl -sSL https://get.docker.com/ | sh 获取适用于Ubuntu的Docker可获得更多详细说明。
  5. sudo usermod -aG docker ubuntu命令启用非root用户访问权限: sudo usermod -aG docker ubuntu
  6. 从EC2实例注销并重新登录

创建AWS EBS卷

  1. 如docs中所述,使用EC2控制台为10GB创建EBS卷。
  2. 从EC2控制台获取实例ID。 使用此实例ID将此卷附加到EC2实例,使用默认设备名称/dev/sdf.

    /dev/sdf.

  3. 在EC2实例中使用lsblk命令来验证该卷是否已附加到该实例:
    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0   8G  0 disk
    └─xvda1 202:1    0   8G  0 part /
    xvdb    202:16   0  30G  0 disk /mnt
    xvdf    202:80   0  10G  0 disk

Portworx集装箱

  1. 每个节点的物理存储结构,集群中所有已配置的卷及其容器映射都存储在etcd集群中。 启动一个etcd集群:
    docker run -v \/data/varlib/etcd \-p 4001:4001 \-d \portworx/etcd:latest
  2. 默认情况下,不允许共享根安装的卷。 使用以下命令启用此功能:
    sudo mount --make-shared /

    有关更多信息,请参见Ubuntu配置和共享安装 。

  3. 带有Docker Engine的服务器上的PX-Developer(px-dev)容器将该服务器转变为横向扩展存储节点。 另一方面,PX-Enterprise提供了多集群和多云支持,受管理的存储可以在内部部署,也可以在AWS等公共云中进行。
    对于此博客,我们将启动一个px-dev容器:
    docker run --restart=always --name px -d --net=host \--privileged=true                             \-v /run/docker/plugins:/run/docker/plugins    \-v /var/lib/osd:/var/lib/osd:shared           \-v /dev:/dev                                  \-v /etc/pwx:/etc/pwx                          \-v /opt/pwx/bin:/export_bin:shared            \-v /var/run/docker.sock:/var/run/docker.sock  \-v /var/cores:/var/cores                      \-v /usr/src:/usr/src                           \--ipc=host                                    \portworx/px-dev -daemon -k etcd://localhost:4001 -c cluster1 -s /dev/xvdf

    使用Docker运行PX可获得有关此命令的完整详细信息。

  4. 使用docker container logs -f px查找日志,并注意以下语句:
    time="2017-02-16T05:33:26Z" level=info msg="Initialize the scheduler client and the scheduler watch" 
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/containers" 
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/volumes" 
    time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/nodes/list"
  5. 使用sudo /opt/pwx/bin/pxctl status检查可用于Portworx的附加卷的sudo /opt/pwx/bin/pxctl status以查看输出:
    Status: PX is operational
    Node ID: 679b79b1-f4c3-413e-a8e0-c527348647c9IP: 172.31.25.21 Local Storage Pool: 1 poolPool    IO_Priority    Size    Used    Status    Zone    Region0    LOW        10 GiB    266 MiB    Online    a    us-west-1Local Storage Devices: 1 deviceDevice    Path        Media Type        Size        Last-Scan0:1    /dev/xvdf    STORAGE_MEDIUM_SSD    10 GiB        16 Feb 17 05:33 UTCtotal            -            10 GiB
    Cluster SummaryCluster ID: cluster1Node IP: 172.31.25.21 - Capacity: 266 MiB/10 GiB Online (This node)
    Global Storage PoolTotal Used        :  266 MiBTotal Capacity    :  10 GiB

    它显示了可用和已使用的总容量。

Docker卷

  1. 让我们创建一个Docker卷:
    docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvol

    有关此命令的更多详细信息,请参见使用Docker创建卷 。

  2. 使用docker volume ls命令检查可用的卷列表:
    DRIVER              VOLUME NAME
    local               70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159
    pxd                 cbvol
    local               f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073

    如图所示, cbvol是使用pxd驱动程序创建的。

带有Portworx卷的Couchbase

  1. 使用Portworx卷创建一个Couchbase容器:
    docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase

    注意将所有Couchbase数据存储在容器中的/opt/couchbase/var如何映射到主机上的cbvol卷。 该卷由Portworx映射。

  2. 通过http:// <public-ip>:8091登录到Couchbase Web Console,使用登录Administratorpassword作为密码。
  3. 转到数据桶,然后创建一个新的数据桶pwx:
  4. 在EC2实例中,请参见容器列表:
    ubuntu@ip-172-31-25-21:~$ docker container ls
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                                                                               NAMES
    8ae763d9d53b        arungupta/couchbase    "/entrypoint.sh /o..."   5 minutes ago       Up 5 minutes        0.0.0.0:8091-8094->8091-8094/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18093/tcp   db
    5423bcd9b426        portworx/px-dev        "/docker-entry-poi..."   14 minutes ago      Up 14 minutes                                                                                                           px
    cf3c779a4459        portworx/etcd:latest   "/entrypoint.sh /b..."   21 minutes ago      Up 21 minutes       2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp                                                     youthful_jepsen

    etcdpx-devdb容器正在运行。

  5. 杀死db容器:
    docker container rm -f db
  6. 重新启动数据库容器为:
    docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase

    现在,由于cbvol再次映射到/opt/couchbase/var ,因此在重新启动/opt/couchbase/var保留数据。 可以通过访问Couchbase Web控制台并检查先前创建的pwx存储桶来验证这一点。

另一个有趣的观点是为什么数据库不用于容器? 。 仅仅因为有了Docker,并不意味着您所有的数据库需求都应该被Docker化。 但是,如果需要,则有很多选择,可以在生产级应用程序中使用。

想更多地了解如何在容器中运行Couchbase?

  • 容器上的Couchbase
  • Couchbase开发人员门户
  • @couchhasedev和@couchbase

翻译自: https://www.javacodegeeks.com/2017/03/stateful-containers-using-portworx-couchbase.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java和jvm_java 和 JVM

C和Java的区别指针&#xff1a;java中不存在指针的概念&#xff0c;编程者无法直接通过指针来直接访问内存&#xff0c;有利于维护java程序的安全多重继承&#xff1a;C支持多重继承&#xff0c;java不支持多重继承&#xff0c;但是允许一个类继承多个接口来实现多重继承的问题…

Redis 集群_主从复制_哨兵模型

1 redis集群简介 1.1 集群的概念 所谓的集群&#xff0c;就是通过添加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让服务器达到一个稳定、高效的状态。 1.1.1 使用redis集群的必要性 问题&#xff1a;我们已经部署好了redis&#xff0c;并且能启动一个redis&#…

java 7 update 17_Java version 7, Update 17 is NOT recongnized by FireFox version 19.0.2

选择的解决方案Reply to my own post:Out of all the solutions posted regarding Java install problems, I gleaned one thing: A re-install of Java and a re-install of Firefox may well solve the problem.Well, for me, thus far, it has.The simple steps I followed:…

英语中的国籍,国家和地区

英语中对于国籍&#xff0c;国家的表述是不一样的&#xff0c;我时常迷糊于此。前些日子我发现了一本英语奇书《Practical English Usage》&#xff0c;这本书回答了我许多英语中的疑问。下面的内容也就是将该书的第364条抄一下。 1&#xff0c;Introduction In order to refer…

junit测试方法_JUnit测试方法订购

junit测试方法直到版本4.10为止的Junit都使用反射API返回的测试类中测试方法的顺序作为测试方法执行的顺序– Class.getMethods&#xff08;&#xff09; 。 引用getMethods&#xff08;&#xff09;api的Javadoc&#xff1a; 返回的数组中的元素未排序&#xff0c;并且没有任…

java非阻塞锁_Java并发问题的非阻塞解决方案

转自http://blog.csdn.net/u011277203/article/details/9223545在并发环境中&#xff0c;对于共享资源通常会采用显式的锁机制(比如synchronized或ReentrantLock)来保证在任意时刻只会有一条线程访问这些变量&#xff0c;并且这些变量的修改对随后获取锁的线程是可见的。无法获…

Java垃圾收集器:G1GC何时将CMS强制退出?

在针对JDK 9&#xff08;2017/4/4&#xff09;提出的JEP中 &#xff0c; Mark Reinhold写道JEP 291 &#xff08;“弃用并发标记扫描&#xff08;CMS&#xff09;垃圾收集器”&#xff09;是“已被放入“建议的在讨论和审查后&#xff0c;由所有者将其定位为目标”。 如果JEP 2…

模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...

一.模块的简介 什么是模块: 模块就是一系列功能的结合体 模块的三种来源: 1.内置的 2.第三方的  3.自定义的 模块的四种表现形式: 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)(***)    2.已被编译为共享库或DLL的C或C扩展…

java dll 乱码_java调用c++ dll出现中文乱码 | 学步园

最近的开发用到了使用java调用本机动态连接库的功能&#xff0c;将文件路径通过java调用C代码对文件进行操作。在调用中如果路径中包含有中文字符就会出现问题&#xff0c;程序运行就会中止。下面用一个小例子&#xff0c;来说明记录下解决的方法。java中传入一个字符串&#x…

每日一问:Android 滑动冲突,你们都是怎样处理的

坚持原创日更&#xff0c;短平快的 Android 进阶系列&#xff0c;敬请直接在微信公众号搜索&#xff1a;nanchen&#xff0c;直接关注并设为星标&#xff0c;精彩不容错过。 在 Android 开发中&#xff0c;滑动冲突总是我们一个无法避免的话题。而对于解决方案却是众说纷纭。比…

java多线程 cpu分配_java多线程总结(转载)

Java 多线程编程总结-------------------------------------------------------------------------------------------------下面的内容是很早之前写的&#xff0c;内容不够充实&#xff0c;而且是基于Java1.4的内容&#xff0c;Java5之后&#xff0c;线程并发部分扩展了相当多…

java设计模式迭代器模式_迭代器模式和Java

java设计模式迭代器模式大家好&#xff0c;在本文中&#xff0c;我们将检查Iterator Pattern 。 我知道你们中许多人已经使用过一种设计模式&#xff0c;但是也许您没有意识到它是模式&#xff0c;或者不知道它的巨大价值。 根据《 Head First Design 》一书&#xff1a; 迭代…

笔记_SQLite入门

1、SQLite是什么&#xff1f; QLite没有单独的服务器进程。 它直接读取和写入普通磁盘文件。 具有多个表&#xff0c;索引&#xff0c;触发器和视图的完整SQL数据库包含在单个磁盘文件中。2、SQLite语法 区分大小写&#xff1a; SQLite不区分大小写。但是&#xff0c;有一些区分…

java线程提交_从Java线程到线程池

线程模型线程模型分为两类&#xff0c;用户级线程(ULT)和内核级线程(KLT)用户级线程(ULT)&#xff1a;user level threads&#xff0c;系统内核对ULT无感知&#xff0c;线程的创建和调度都由用户级APP进程管理&#xff1b;即APP自行管理的线程&#xff0c;就是用户级线程内核级…

使用Spring Boot自动发布和监视API

如果您正在沿着微服务风格的架构前进&#xff0c;那么您将需要接受的一个租户就是自动化。 这种架构风格介绍了许多活动部件。 如果成功&#xff0c;您的环境将具有大量服务API&#xff0c;企业可以将其用于应用程序开发和集成。 这意味着必须有一种方法可以发现可用的API文档…

mysql导入导出

导出1.将数据库mydb导出到e:\mysql\mydb.sql文件中&#xff1a;打开开始->运行->输入cmd 进入命令行模式c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql然后输入密码&#xff0c;等待一会导出就成功了&#xff0c;可以到目标文件中检查是否成功。…

mysql 半同步关闭_MySQL的半同步模式配置

1、什么是半同步&#xff1f;在有一台主服务器、多台从服务器的情况下&#xff0c;主服务器只会等待一台从服务器同步数据。2、为什么要使用半同步&#xff1f;在使用同步模式时&#xff0c;数据的写速度太慢。在使用异步模式时&#xff0c;可能会造成从服务器上的现在存储的数…

GIS集成技术之二:数据集成

一。数据驱动。疑惑&#xff1a;ado.net作为一种通用的数据技术&#xff0c;适用与各种格式的文件各种格式的数据库&#xff0c;为一种通用的编程模型。GIS也提出数据集成&#xff1a;毫无疑问&#xff0c;不陷于某击中数据库。因此&#xff0c;我觉得GIS的中心是数据驱动&…

mysql中的replication_mysql中replication的相关问题总结

首先&#xff0c;要使用mysql中的replication&#xff0c;则需要配置master的my.cnf。例如&#xff1a;复制代码 代码示例:server-id 1log_bin mysql-bin#log_bin /var/log/mysql/mysql-bin.logexpire_logs_days 10max_binlog_size 100M#binlog_do_db include_database_na…

rest spring_带有Spring的REST的ETag

rest spring1.概述 本文将重点介绍ETag – Spring支持&#xff0c;RESTful API的集成测试以及带有curl的使用场景。 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web服务的系列文章的第9篇。 REST with Spring系列&#xff1a; 第1部分 …