mongodb-Windows-分布式-(一)

407 阅读4分钟

1.连接本地mongodb mongodb://jevy:112244@localhost:27017/?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false

  1. 在阿里云上安装 mongodb数据库,然后用docker 数据卷指定到数据库的位置。 我这里是直接使用docker 安装的mongodb 参考链接:www.runoob.com/docker/dock…
    使用以下命令来查看是否已安装了 mongo:
docker images

image.png 2.2 进入镜像 并启动 现在没有启动:

image.png 2.3 安装mongodb 并启动镜像:

3.MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

  • Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
  • Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
  • Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。 Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,通常将 Replica Set 和 Sharding 两种技术结合使用
  1. 从新安装mongodb,并写入数据,这次条理清晰一些, 首先安全组通道设置好了。

image.png 参考我以前写的文章 juejin.cn/post/704965…

 docker run -itd --name docker_mongo -p 27018:27017 mongo:4.4.10 --auth

-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务

我这里设置为 容器的27018 端口:为了方便以后区分分布式。

image.png 5. 查看所有的容器 包括未运行的 docker ps -a 首先启动容器, 然后进入容器。

image.png

  1. 进入容器之后 ,运行mongodb数据库, 在没有创建角色时候,是没办法使用的。
> show dbs;
> use admin;
switched to db admin
> db.createUser({ user:'admin',pwd:'112244',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		},
		"readWriteAnyDatabase"
	]
}
> db.auth('admin', '112244');
1
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

image.png

使用Windows 本地远程链接:失败了

image.png

在docker中的三种链接方式: 也就是说上面设置的docker:27018 并没用。 image.png 7. 查看 容器

image.png 有没有一种可能,Windows远程链接 不上,是因为我27017端口映射到容器的27018,启动不了。 juejin.cn/post/704965… 这里的必须在容器里面设置用户名,远程链接的时候是无法创建的
8、再新建一个容器, 新开一个 安全组。

image.png 9. 删除 容器:
www.jianshu.com/p/79caa1cc4… 创建用户名和密码:
退出容器,并停止容器。
docker 常用命令:cloud.tencent.com/developer/a…

image.png

root@iZwz96a370w2rviffw4q2wZ:~# docker rm docker_mongo image.png 10. 映射一个新的端口 进行测试: docker run -itd --name docker_mongo -p 27017:27018 mongo:4.4.10 --auth

image.png 容器已经运行了,

image.png

设置好账号+密码:切记要重启才能生效: image.png 不然链接不上

image.png 11. 重启一下: 要从容器中退出,才可以重启 root@iZwz96a370w2rviffw4q2wZ:~# docker restart docker_mongo image.png 在已经有用户的情况下,再次想添加用户,行不通

image.png 只有通过了 身份验证,也就是说第一次数据库为空的时候创建的用户名,

image.png 12. mongo 47.106.188.124:27018 -u 'admin' -p '112244' --authenticationDatabase "admin" 连接不上,

image.png 13.设置数据卷的方式尝试: juejin.cn/post/704965… 参考 docker run --name jevy_mongo -p 27017:27019 -v /home/mongo/jevy_mongo:/data/db -d mongo:4.4.10 --auth 跟第10条进行对比: docker run -itd --name docker_mongo -p 27017:27018 mongo:4.4.10 --auth

image.png 也就是说 前面的是服务器 的端口 : 后面的是 容器的端口 数据卷也是 前面-本地文件路劲:容器的数据路劲 所以远程启动不了。

正确的做法是:

#创建3个mongo容器
docker create --name mongo01 -p 27017:27017 -v /home/mongo/rs0-data-01:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all
docker create --name mongo02 -p 27018:27017 -v /home/mongo/rs0-data-02:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all
docker create --name mongo03 -p 27019:27017 -v /home/mongo/rs0-data-03:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all

#启动容器
docker start mongo01 mongo02 mongo03

#进入容器操作
docker exec -it mongo01 /bin/bash

rs.initiate({
_id : "rs0",
members: [
{ _id: 0, host: "192.168.2.118:27017" },
{ _id: 1, host: "192.168.2.118:27018" },
{ _id: 2, host: "192.168.2.118:27019" }
]
})

# 响应
{ "ok" : 1 }

#查询集群状态
rs.status()

后面就简单了,删掉 容器 将正确的 端口对应好: 27018:27107