搭建 Gluster 模拟环境(Vagrant与Docker)
2017-03-03 本文已影响267人
左蓝
最近为了可以让一些内网运行的应用同步到外网,也就是在校内校外都可以访问我自己搭建在宿舍的服务,遂研究起了这些玩意。
Puppet-Gluster + Vagrant
$ sudo service nfs start
$ git clone --recursive https://github.com/purpleidea/puppet-gluster.git
$ cd puppet-gluster/vagrant/gluster/
$ vagrant up puppet && sudo -v && vagrant up
使用 virt-manager 就可以查看本地运行的虚拟机。
Docker
官方似乎提供了镜像,但是不怎么好用,自己写一个啦。
基于 Ubuntu 16.04,目录如下:
.
├── client
│ ├── run.sh
│ └── supervisord.conf
├── Dockerfile
├── Dockerfile.client
├── Dockerfile.server
└── server
├── prepare-gluster.sh
├── run.sh
└── supervisord.conf
2 directories, 8 files
Server 与 Client 都是基于 Dockerfile 构建的,内容如下:
FROM ubuntu:16.04
RUN apt-get update && \
apt-get install -y python-software-properties software-properties-common && \
add-apt-repository -y ppa:gluster/glusterfs-3.10 && \
apt-get update && \
apt-get install -y supervisor glusterfs-client glusterfs-server && \
apt-get autoremove -y python-software-properties software-properties-common && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
这个镜像装了 glusterfs 的 client 与 server 两个软件,然后基于这个镜像分别构建客户端和服务端。
其中 Dockerfile.client 如下:
FROM zuolan/glusterfs
ENV GLUSTER_VOL_NAME vol
ENV GLUSTER_VOL_PATH /volume
ENV GLUSTER_PEER **ChangeMe**
ENV DEBUG 0
COPY client/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY client/*.sh /
RUN mkdir -p /var/log/supervisor ${GLUSTER_VOL_PATH} && \
chmod +x /*.sh
WORKDIR ${GLUSTER_VOL_PATH}
VOLUME ["${GLUSTER_VOL_PATH}"]
CMD ["/run.sh"]
然后是 Dockerfile.server 的内容:
FROM zuolan/glusterfs
ENV GLUSTER_VOL_NAME vol
ENV GLUSTER_REPLICA 2
ENV GLUSTER_BRICK_PATH /volume
ENV GLUSTER_PEER **ChangeMe**
ENV SERVER_IP **ChangeMe**
ENV DEBUG 0
VOLUME ["/volume"]
COPY server/run.sh /run.sh
COPY server/prepare-gluster.sh /prepare-gluster.sh
COPY server/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN mkdir -p /var/log/supervisor && \
chmod +x /*.sh
CMD ["/run.sh"]
两个容器运行在不同的服务器,然后数据卷会通过 NFS 同步。
完整源代码:https://github.com/izuolan/dockerfiles/tree/master/glusterfs