如果不想自己制做镜像,可以直接拉取助教做好的镜像
执行下面的指令,然后直接到 3配置MongoDB Replica Set
docker pull registry.cn-hangzhou.aliyuncs.com/ybbh/mongodb-repl:latest
如果自己打镜像,按照下面的做法,
Docker拉取一个镜像,这里使用ubuntu,其它发行版也可以
docker pull ubuntu
使用docker进入Linux Shell
docker run -it ubuntu:latest /bin/bash
apt-key需要gnupg gnupg1 gnupg2
apt-get update
apt-get install gnupg gnupg1 gnupg2
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt-get update
apt-get install -y mongodb-org
确认安装MongoDB成功后,就可以把镜像保存下来,方便的复制多个副本,减少了很多重复的配置工作。
docker commit [container-id] mongodb-repl
container-id可以用docker ps命令查看
改一个更短的镜像名
docker tag registry.cn-hangzhou.aliyuncs.com/ybbh/mongodb-repl:latest mongodb-repl:latest
用拉取的镜像开启一个shell
docker run --interactive --tty mongodb-repl bash
在shell中编辑配置文件/etc/mongod.conf(这里是使用写配置文件的方式,在命令行里指定对应的参数也可) replication选项加入replSetName
replication:
replSetName: replset
绑定本机所有IP
net:
port: 27017
bindIp: 0.0.0.0
docker commit [container-id] mongodb-repl
为了让MongoDB replica set中的各个实例能互连,这里用docker创建一个虚拟的子网,每个实例都可以拥有这个子网中的一个IP
docker network create --subnet 192.168.10.1/25 mongodb-repl
如果从镜像创建一个容器,执行下面的操作:
docker run --detach --net=mongodb-repl --ip 192.168.10.2 mongodb-repl mongod --config /etc/mongod.conf
docker run --detach --net=mongodb-repl --ip 192.168.10.3 mongodb-repl mongod --config /etc/mongod.conf
docker run --detach --net=mongodb-repl --ip 192.168.10.4 mongodb-repl mongod --config /etc/mongod.conf
这样,使用前面创建的子网,启动了3个mongodb的容器,每一个容器获得一个了IP
也可以用--publish选项把容器里的端口映射到宿主机的端口,这样就可以通过宿主机访问容器
如下面的命令把容器的27017端口映射为本地宿主的27017端口
docker run --detach --net=mongodb-repl --ip 192.168.10.20 --publish 27017:27017 registry.cn-hangzhou.aliyuncs.com/ybbh/mongodb-repl mongod --config /etc/mongod.conf
这里启动了3个mongodb的容器,使用前面创建的子网,每一个容器获得一个了IP
也可以把容器里的端口映射到本机的端口,这样就可以在宿主机方问容器
对于已经关闭的容器,想重新启动(同一个容器只能执行一个实例),执行:
docker start [container]
开启一个同网段的一个bash容器
docker run --interactive --tty --net=mongodb-repl --ip 192.168.10.10 mongodb-repl bash
在容器开启mongo shell,连到replica set中的任意一台机器
mongo 192.168.10.2/local
MongoDB指定了replica set name,各个MongoDB实例需要知道彼此的host/ip和port
在mongo shell中初始化replica set, 执行
rs.initiate(
{
_id: "replset",
version: 1,
members: [
{ _id: 0, host : "192.168.10.2:27017" },
{ _id: 1, host : "192.168.10.3:27017" },
{ _id: 2, host : "192.168.10.4:27017" }
]
}
)
rs.conf()
rs.status()
以上节实验课的例子为例,访问上面我们建好的高可用replica set
java -jar JavaDriverExample-1.0-SNAPSHOT.jar mongodb://192.168.10.2:27017,192.168.10.3:27017,192.168.10.4:27017/?replicaSet=replset
了解以下内容:
4)Replication有关的参数含义,如write concern, read concern