mongodb windows 集群搭建
准备三台机器,系统:windows 8
192.168.1.1 192.168.1.2 192.168.1.3
每台机器上安装mongodb 服务,步骤:
- 下载以下文件并依次执行安装
-
clearcompressionflag.exe Windows8.1-KB2919442-x64.msu Windows8.1-KB2932046-x64.msu Windows8.1-KB2934018-x64.msu Windows8.1-KB2937592-x64.msu Windows8.1-KB2938439-x64.msu Windows8.1-KB2959977-x64.msu
Windows8.1-KB2919355-x64.msu Windows8.1-KB2999226-x64.msu - 下载 vc_redist.x64.exe 并安装
- 下载文件 mongodb-win32-x86_64-2008plus-ssl-4.0.6-singed.mis 并安装。如果报错 无法启动服务,那么到mongodb 安装目录,这里是 C:\Program Files\MongoDB\Server\4.0\bin 内修改配置文件mongod.cfg,注释掉 mp 配置项(最后一行)。
- 修改配置文件 mongod.cfg,增加如下配置, XXX 是副本集名称。
-
replication: replSetName: XXX
- 重启mongodb 服务,使配置生效
- 命令行打开 mongo
-
mongo --host 192.168.1.1
- 执行以下语句, arbiterOnly:true 表示节点仅用作仲裁节点,如果此节点需要存储数据,则不设置 arbiterOnly,默认为 false。
-
> config={ _id:'XXX', members:[ {_id:0,host:'192.168.1.1:27017'}, {_id:1,host:'192.168.1.2:27017'}, {_id:2,host:'192.168.1.3:27017',arbiterOnly:true}]}
...
> rs.initiate(config) - 查看 设置状态
-
> rs.status()
集群搭建参考 https://www.cnblogs.com/ityouknow/p/7344005.html
集群认证:https://blog.csdn.net/uncle_david/article/details/78713551
下面是我的配置文件
# conf/config.conf ## 配置文件内容 mongodb 4.0 pidfilepath = D:/mongodb-cluster/config/log/configsrv.pid dbpath = D:/mongodb-cluster/config/data logpath = D:/mongodb-cluster/config/log/congigsrv.log logappend = true bind_ip = 0.0.0.0 port = 21000 # fork = true #declare this is a config db of a cluster; configsvr = true #副本集名称 replSet=configs #设置最大连接数 maxConns=20000 keyFile = D:/mongodb-cluster/conf/key.file auth = true
分片配置文件和路由配置文件就不再列出来了,通过上面两个链接的博客内容,很容易得到。
另外在列出搭建集群时常用的命令以及 js 代码,方便复制粘贴,
mongod -f D:\mongodb-cluster\conf\config.conf mongod -f D:\mongodb-cluster\conf\shard1.conf mongod -f D:\mongodb-cluster\conf\shard2.conf mongod -f D:\mongodb-cluster\conf\shard3.conf mongos -f D:\mongodb-cluster\conf\mongos.conf config = {_id:"configs", members: [{_id:0, host:"192.168.2.171:21000"}, {_id:1, host: "192.168.2.172:21000"}, {_id:2,host:"192.168.2.173:21000"}]} config = {_id : "shard1", members : [{_id : 0, host : "192.168.2.171:27001" },{_id : 1, host : "192.168.2.172:27001" },{_id : 2, host : "192.168.2.173:27001" , arbiterOnly: true }]} config = {_id : "shard2", members : [{_id : 0, host : "192.168.2.171:27002", arbiterOnly: true },{_id : 1, host : "192.168.2.172:27002" },{_id : 2, host : "192.168.2.173:27002" }]} config = {_id : "shard3", members : [{_id : 0, host : "192.168.2.171:27003" },{_id : 1, host : "192.168.2.172:27003" , arbiterOnly: true },{_id : 2, host : "192.168.2.173:27003" }]} sh.addShard("shard1/192.168.2.171:27001,192.168.2.172:27001,192.168.2.173:27001") sh.addShard("shard2/192.168.2.171:27002,192.168.2.172:27002,192.168.2.173:27002") sh.addShard("shard3/192.168.2.171:27003,192.168.2.172:27003,192.168.2.173:27003") // auth: db.createUser( { user:"xxx", pwd:"xxx", roles:[{role:"root",db:"admin"}] } )
添加副本集 rs.initiate(config); 时要注意,分片内某节点如果设置为 arbiterOnly:true ,那么不能在这个节点上连接 mongodb 实例,否则会报错,以上面配置为例,分片 2 这个副本集创建时,是在 192.168.2.172 上执行的,如下
# 在 192.168.2.172 节点上执行以下命令 mongo --port 27002 config = {_id : "shard2", members : [{_id : 0, host : "192.168.2.171:27002", arbiterOnly: true },{_id : 1, host : "192.168.2.172:27002" },{_id : 2, host : "192.168.2.173:27002" }]} rs.initiate(config);
其他命令我都是在 192.168.2.171 上的 mongo shell 里执行。
也有地方建议不使用仲裁节点,同时配置副本集中节点数量为奇数,
config = {_id : "shard1", members : [{_id : 0, host : "192.168.2.171:27001" },{_id : 1, host : "192.168.2.172:27001" },{_id : 2, host : "192.168.2.173:27001" }]}