couchbase
容器本应是短暂的,因此可以很好地扩展以用于无状态应用程序。 有状态的容器(例如Couchbase)需要区别对待。 管理Docker容器的持久性概述了如何管理有状态容器的持久性。
该博客将说明如何使用Docker Volume Plugins和Portworx创建有状态的容器。
为什么选择Portworx?
Portworx是易于部署的容器数据服务,可提供持久性,复制,快照,加密,安全的RBAC等。 一些好处是:
- 容器粒度卷 – Portworx可以在每个主机上占用多个EBS卷,并聚合容量并派生每个容器的容器粒度虚拟(软)卷。
- 跨可用区HA – Portworx将在跨可用区的多个计算实例中以块级别保护数据。 随着复制控制器在不同节点上重新启动Pod,数据仍将在那些节点上具有高可用性。
- 支持企业数据操作 – Portworx在可用物理卷之上实施容器粒度快照,服务等级以及分层。
- 易于部署和配置 -Portworx本身作为容器部署,并与业务流程工具集成。 DevOps可以以编程方式提供具有任何属性的容器粒度存储,例如大小,服务等级,加密密钥等。
设置AWS EC2实例
Portworx仅在Linux或CoreOS上运行。 在AWS EC2上设置Ubuntu实例:
- 使用
m3.medium
实例类型启动Ubuntu 14.04实例。 确保将端口8091添加到入站安全规则。 这样,以后便可以访问Couchbase Web Console 。 - 使用以下命令登录到EC2实例:
ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@<public-ip>
- 更新Ubuntu实例:
sudo apt-get update
- 安装Docker:
curl -sSL https://get.docker.com/ | sh
curl -sSL https://get.docker.com/ | sh
获取适用于Ubuntu的Docker可获得更多详细说明。 - 启用
sudo usermod -aG docker ubuntu
命令的非root用户访问权限:sudo usermod -aG docker ubuntu
- 从EC2实例注销并重新登录
创建AWS EBS卷
- 如docs中所述,使用EC2控制台为10GB创建EBS卷。
- 从EC2控制台获取实例ID。 使用此实例ID将此卷附加到EC2实例,使用默认设备名称
/dev/sdf.
/dev/sdf.
- 在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集装箱
- 每个节点的物理存储结构,集群中所有已配置的卷及其容器映射都存储在etcd集群中。 启动一个etcd集群:
docker run -v \/data/varlib/etcd \-p 4001:4001 \-d \portworx/etcd:latest
- 默认情况下,不允许共享根安装的卷。 使用以下命令启用此功能:
sudo mount --make-shared /
有关更多信息,请参见Ubuntu配置和共享安装 。
- 带有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中提供了有关此命令的完整详细信息。
- 使用
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"
- 使用
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卷
- 让我们创建一个Docker卷:
docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvol
有关此命令的更多详细信息,请参见使用Docker创建卷 。
- 使用
docker volume ls
命令检查可用卷的列表:DRIVER VOLUME NAME local 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159 pxd cbvol local f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073
如图所示,
cbvol
是使用pxd
驱动程序创建的。
带有Portworx卷的Couchbase
- 使用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映射。 - 通过http:// <public-ip>:8091登录到Couchbase Web Console,使用登录
Administrator
和password
作为密码。 - 转到数据桶并创建一个新的数据桶pwx:
- 在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
etcd
,px-dev
和db
容器正在运行。 - 杀死
db
容器:docker container rm -f db
- 重新启动数据库容器为:
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
couchbase