MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装
MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center/community
MongoDB:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.0-signed.msi
根据你的系统下载 32 位或 64 位的 .msi 文件,下载后双击该文件,按操作提示安装即可。
安装过程中,你可以通过点击 “Custom(自定义)” 按钮来设置你的安装目录。
下一步安装 “install mongoDB compass” 不勾选,否则可能要很长时间都一直在执行安装,MongoDB Compass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装,下载地址:https://www.mongodb.com/download-center/compass。
如果安装过程中提示“Service ‘MongoDB Server…”,选择 Ignore,这是权限不够
如果出现上面的提示,则说明此时MongoDB服务未成功启动,打开CMD输入一下代码,"D:\mongoDB\data"是MongoDB数据库位置,需提前创建好
mongod --dbpath="D:\mongoDB\data"
启动MongoDB服务
net start MongoDB
关闭MongoDB服务
net stop MongoDB
如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。或者在Path环境变量里面加入“MongoDB安装目录\bin”,就可以全局使用mongo相关的命令了
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
> mongo
MongoDB shell version: 3.0.6
connecting to: test
……
由于它是一个JavaScript shell,您可以运行一些简单的算术运算:
> 2 + 2
4
>
db 命令用于查看当前操作的文档(数据库):
> db
test
>
插入一些简单的记录并查找它:
> db.user.insert({name:'magichuang'})
WriteResult({ "nInserted" : 1 })
> db.user.find()
{ "_id" : ObjectId("5604ff74a274a611b0c990aa"), "name" : "magichuang" }
MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包。
下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。
# 下载
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.9.tgz
# 解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.9.tgz
# 将解压包拷贝到指定目录
mv mongodb-linux-x86_64-rhel70-4.0.9/ /usr/local/mongodb
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中(临时环境变量):
export PATH=/bin:$PATH
为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb 。
也可以加入系统环境变量使其永久生效
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/bashrc
vim /etc/bashrc
# 在最后一行加上
export PATH=$PATH:/usr/local/mongodb/bin
MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
以下实例中我们将data目录创建于根目录下(/)。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(–dbpath)。
mkdir -p /data/db
你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。
$ ./mongod
2019-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal
2019-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed
2019-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16
2019-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52
2019-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7
如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。
MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
$ cd /usr/local/mongodb/bin
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
……
由于它是一个JavaScript shell,您可以运行一些简单的算术运算:
> 2+2
4
> 3+6
9
现在让我们插入一些简单的数据,并对插入的数据进行检索:
> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }
>
第一个命令将数字 10 插入到 runoob 集合的 x 字段中。
MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest 。
注意:该功能只适用于 MongoDB 3.2 及之前的早期版本。
$ ./mongod --dbpath=/data/db --rest
MongoDB 的 Web 界面访问端口比服务的端口多1000。
如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017。
MongoDB 提供了 OSX 平台上 64 位的安装包,你可以在官网下载安装包。
接下来我们使用 curl 命令来下载安装:
# 进入 /usr/local
cd /usr/local
# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz
# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz
# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
export PATH=/usr/local/mongodb/bin:$PATH
此外你还可以使用 OSX 的 brew 来安装 mongodb:
sudo brew install mongodb
如果要安装支持 TLS/SSL 命令如下:
sudo brew install mongodb --with-openssl
安装最新开发版本:
sudo brew install mongodb --devel
1、首先我们创建一个数据库存储目录 /data/db:
sudo mkdir -p /data/db
启动 mongodb,默认数据库目录即为 /data/db:
sudo mongod
# 如果没有创建全局路径 PATH,需要进入以下目录
cd /usr/local/mongodb/bin
sudo ./mongod
再打开一个终端进入执行以下命令:
$ cd /usr/local/mongodb/bin
$ ./mongo
MongoDB shell version v4.0.9
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3c12bf4f-695c-48b2-b160-8420110ccdcf") }
MongoDB server version: 4.0.9
……
> 1 + 1
2
注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。
sudo mongod --dbpath=/data/db
集群背景:随着业务数据和并发量的增加,若只使用一台MongoDB服务器,存在着断电和数据风险的问题,故采用Mongodb复制集的方式,来提高项目的高可用、安全性等性能。MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许从硬件故障和服务中断中恢复数据。
集群模式:主从集群、副本集集群、分片集群
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。
在本教程中我们使用同一个MongoDB来做MongoDB主从的实验, 操作步骤如下:
1、关闭正在运行的MongoDB服务器。
现在我们通过指定 --replSet 选项来启动mongoDB。–replSet 基本语法格式如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
mongod --dbpath="C:\data\shard1\data\set1 --logpath="C:\data\shard1\logs\set1.log" --port=27017 --shardsvr --replSet=shard1
以上实例会启动一个名为shard1的MongoDB实例,其端口号为27017。
启动后打开命令提示框并连接上mongoDB服务。
在Mongo客户端使用命令rs.initiate()来启动一个新的副本集。
我们可以使用rs.conf()来查看副本集的配置
查看副本集状态使用 rs.status() 命令
添加副本集的成员,我们需要使用多台服务器来启动mongo服务。进入Mongo客户端,并使用rs.add()方法来添加副本集的成员。
rs.add() 命令基本语法格式如下:
>rs.add(HOST_NAME:PORT)
假设你已经启动了一个名为mongod1.net,端口号为27017的Mongo服务。 在客户端命令窗口使用rs.add() 命令将其添加到副本集中,命令如下所示:
>rs.add("mongod1.net:27017")
MongoDB中你只能通过主节点将Mongo服务添加到副本集中, 判断当前运行的Mongo服务是否为主节点可以使用命令db.isMaster() 。
MongoDB的副本集与我们常见的主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
MongoDB中使用分片集群架构图
上图中主要有如下所述三个主要组件:
分片逻辑图
分片设计思想
分片为应对高吞吐量与大数据量提供了方法。使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量。举例来说,当插入一条数据时,应用只需要访问存储这条数据的分片
使用分片减少了每个分片存储的数据。
例如,如果数据库1tb的数据集,并有4个分片,然后每个分片可能仅持有256 GB的数据。如果有40个分片,那么每个切分可能只有25GB的数据。
三台Centos7服务器,各节点角色规划如下:
192.168.46.209 | 192.168.46.45 | 192.168.46.90 |
---|---|---|
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主节点 | shard server1 副节点 | shard server1 仲裁 |
shard server2 仲裁 | shard server2 主节点 | shard server2 副节点 |
shard server3 副节点 | shard server3 仲裁 | shard server3 主节点 |
mongos:27017
config:30000
shard1:27001
shard2:27002
shard3:27003
1、下载并解压 tgz(以下演示的是 64 位 Linux上的安装) 。
# 下载
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.9.tgz
# 解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.9.tgz
# 将解压包拷贝到指定目录
mv mongodb-linux-x86_64-rhel70-4.0.9/ /usr/local/mongodb
2、MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中(临时环境变量):
export PATH=/bin:$PATH
为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb 。
也可以加入系统环境变量使其永久生效
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/bashrc
vim /etc/bashrc
# 在最后一行加上
export PATH=$PATH:/usr/local/mongodb/bin
分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/{data,log}
mkdir -p /usr/local/mongodb/shard1/{data,log}
mkdir -p /usr/local/mongodb/shard2/{data,log}
mkdir -p /usr/local/mongodb/shard3/{data,log}
1、配置
vim /usr/local/mongodb/conf/config.conf
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 30000
fork = true
configsvr = true
#副本集名称
replSet=configs
2、启动三台服务器的config server
mongod -f /usr/local/mongodb/conf/config.conf
3、登录任意一台配置服务器,初始化配置副本集
#连接
mongo --port 30000
#配置config变量,"_id" : "configs"应与配置文件中配置的replSet=configs一致,"members"中的"host"为三个节点的ip和port
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.46.209:30000" },
{_id : 1, host : "192.168.46.45:30000" },
{_id : 2, host : "192.168.46.90:30000" }
]
}
# 回车之后看到如下提示
{
"_id" : "configs",
"members" : [
{
"_id" : 0,
"host" : "192.168.46.209:30000"
},
{
"_id" : 1,
"host" : "192.168.46.45:30000"
},
{
"_id" : 2,
"host" : "192.168.46.90:30000"
}
]
}
# 初始化副本集
rs.initiate(config)
# 看到如下提示说明配置成功
{
"ok" : 1,
"operationTime" : Timestamp(1534907024, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1534907024, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"$clusterTime" : {
"clusterTime" : Timestamp(1534907024, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
1、设置第一个分片副本集(三个节点)
vim /usr/local/mongodb/conf/shard1.conf
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
#副本集名称
replSet=shard1
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard1 server
mongod -f /usr/local/mongodb/conf/shard1.conf
登陆任意一台服务器的mongo(非仲裁节点服务器),初始化副本集
#连接
mongo --port 27001
#定义副本集配置,第三个节点的
"arbiterOnly":true 代表其为仲裁节点。
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.46.209:27001" },
{_id : 1, host : "192.168.46.45:27001" },
{_id : 2, host : "192.168.46.90:27001" , arbiterOnly: true }
]
}
#回车之后提示如下信息
{
"_id" : "shard1",
"members" : [
{
"_id" : 0,
"host" : "192.168.46.209:27001"
},
{
"_id" : 1,
"host" : "192.168.46.45:27001"
},
{
"_id" : 2,
"host" : "192.168.46.90:27001",
"arbiterOnly" : true
}
]
}
#初始化副本集配置
rs.initiate(config);
2、设置第二个分片副本集(三个节点)
vim /usr/local/mongodb/conf/shard2.conf
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 27002
fork = true
#副本集名称
replSet=shard2
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard2 server
mongod -f /usr/local/mongodb/conf/shard2.conf
登陆任意一台服务器的mongo(非仲裁节点服务器),初始化副本集
mongo --port 27002
#定义副本集配置
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.46.209:27002" , arbiterOnly: true },
{_id : 1, host : "192.168.46.45:27002" },
{_id : 2, host : "192.168.46.90:27002" }
]
}
#初始化副本集配置
rs.initiate(config);
3、设置第三个分片副本集(三个节点)
vim /usr/local/mongodb/conf/shard3.conf
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath = /usr/local/mongodb/shard3/data
logpath = /usr/local/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 27003
fork = true
#副本集名称
replSet=shard3
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard3 server
mongod -f /usr/local/mongodb/conf/shard3.conf
登陆任意一台服务器的mongo(非仲裁节点服务器),初始化副本集
mongo --port 27003
#定义副本集配置
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.46.209:27003" },
{_id : 1, host : "192.168.46.45:27003" , arbiterOnly: true},
{_id : 2, host : "192.168.46.90:27003" }
]
}
#初始化副本集配置
rs.initiate(config);
vim /usr/local/mongodb/conf/mongos.conf
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 27017
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/192.168.46.209:30000,192.168.46.45:30000,192.168.46.90:30000
#设置最大连接数
maxConns=20000
启动三台服务器的mongos server
mongos -f /usr/local/mongodb/conf/mongos.conf
我们目前已经搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效,登陆任意一台mongos
mongo --port 27017
#串联路由服务器与分片副本集
sh.addShard("shard1/192.168.46.209:27001,192.168.46.45:27001,192.168.46.90:27001")
sh.addShard("shard2/192.168.46.209:27002,192.168.46.45:27002,192.168.46.90:27002")
sh.addShard("shard3/192.168.46.209:27003,192.168.46.45:27003,192.168.46.90:27003")
#查看集群状态
sh.status()
#可看到如下所示信息
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5d919fa03c8cfc9977d6a9e2")
}
shards:
{ "_id" : "shard1", "host" : "shard1/192.168.46.209:27001,192.168.46.45:27001", "state" : 1 }
{ "_id" : "shard2", "host" : "shard2/192.168.46.45:27002,192.168.46.90:27002", "state" : 1 }
{ "_id" : "shard3", "host" : "shard3/192.168.46.209:27003,192.168.46.90:27003", "state" : 1 }
active mongoses:
"4.0.9" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。登录任意一台mongos,准备让指定的数据库、指定的集合分片生效。
mongo 192.168.46.209:27017
#使用admin数据库
use admin
#指定test_db分片生效
db.runCommand( { enablesharding :"test_db"});
#回车之后可看到如下提示
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1534917663, 6),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1534917663, 6)
}
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "test_db.table1",key : {id: "hashed"} } )
#回车之后看到如下提示
{
"collectionsharded" : "test_db.table1",
"collectionUUID" : UUID("19629078-d4d0-4fc7-a371-2d7c330f77b3"),
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1534917720, 14),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1534917720, 14)
我们设置test_db的table1表需要分片,根据id自动分片到shard1,shard2,shard3上面去。要这样设置是因为不是所有mongodb的数据库和表都需要分片!
查看测试结果
#使用test_db
use test_db
#插入10000条测试数据
for (var i = 1; i <= 10000; i++)db.table1.save({id:i,"test1":"testval1"});
#查看分片情况,可以看到1000条数据分布于三个片上
db.table1.stats();
或
sh.status()
分别查看shard1上的test_db数据库的table1集合条数,三台服务器分布还是比较均匀的
mongo 192.168.46.209:27001
use test_db
db.table1.find().count()
mongodb的启动顺序是,先启动所有节点配置服务器,在启动所有节点的分片,最后启动所有节点的mongos
mongod -f /usr/local/mongodb/conf/config.conf
mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf
mongos -f /usr/local/mongodb/conf/mongos.conf
关闭时,直接killall杀掉所有进程即可
killall mongod
killall mongos
cd /etc/systemd/system
分别为config、shard1、shard2、shard3、mongos编写service文件,如下
vim mongo-config.service
[Unit]
Description=mongo-config
[Service]
user=root
group=root
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/config.conf
TimeoutStopSec=0
Restart=always
RestartSec=15s
TimeoutStartSec=30s
#ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/config.conf --shutdown
[Install]
WantedBy=multi-user.target
Alias=mongoc
vim mongo-shard1.service
[Unit]
Description=mongo-shard1
Requires=mongo-config.service
After=mongo-config.service
[Service]
user=root
group=root
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard1.conf
TimeoutStopSec=0
Restart=always
RestartSec=15s
TimeoutStartSec=30s
#ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard1.conf --shutdown
[Install]
WantedBy=multi-user.target
Alias=mongosh1
vim mongo-shard2.service
[Unit]
Description=mongo-shard2
Requires=mongo-shard1.service
After=mongo-shard1.service
[Service]
user=root
group=root
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard2.conf
TimeoutStopSec=0
Restart=always
RestartSec=15s
TimeoutStartSec=30s
#ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard2.conf --shutdown
[Install]
WantedBy=multi-user.target
Alias=mongosh2
vim mongo-shard3.service
[Unit]
Description=mongo-shard3
Requires=mongo-shard2.service
After=mongo-shard2.service
[Service]
user=root
group=root
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard3.conf
TimeoutStopSec=0
Restart=always
RestartSec=15s
TimeoutStartSec=30s
#ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard3.conf --shutdown
[Install]
WantedBy=multi-user.target
Alias=mongosh3
vim mongos.service
[Unit]
Description=mongos
Requires=mongo-shard3.service
After=mongo-shard3.service
[Service]
user=root
group=root
Type=forking
ExecStart=/usr/local/mongodb/bin/mongos -f /usr/local/mongodb/conf/mongos.conf
TimeoutStopSec=0
Restart=always
RestartSec=15s
TimeoutStartSec=30s
#ExecStop=/usr/local/mongodb/bin/mongos -f /usr/local/mongodb/conf/mongos.conf
[Install]
WantedBy=multi-user.target
添加文件权限,设置开机自启
chmod +x mongos.service
systemctl daemon-reload
systemctl enable mongo-config.service
systemctl enable mongo-shard1.service
systemctl enable mongo-shard2.service
systemctl enable mongo-shard3.service
systemctl enable mongos.service
注意!使用systemctl的方式设置开机自启,因此种方式的先天限制,我们mongo设置的最大连接数并不能按照我们设置的20000来生效,会发现按照系统默认1024的80%生效,即819,解决此方法我们可以修改系统配置文件即可,修改这个配置文件需要重启系统才能生效!
vim /etc/systemd/system.conf
打开或者添加如下两行配置即可
DefaultLimitCORE=infinity
DefaultLimitNOFILE=64000
--quiet # 安静输出
--port arg # 指定服务端口号,默认端口27017
--bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend # 使用追加的方式写日志
--priority # Primary节点优先级,越高优先级越高
--shardsvr # shard服务实例
--configsvr # MongoDB需要1或3个configsver实例
--pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
--keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
--unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
--fork # 以守护进程的方式运行MongoDB,创建服务器进程
--auth # 启用验证
--cpu # 定期显示CPU的CPU利用率和iowait
--dbpath arg # 指定数据库路径
--diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb # 设置每个数据库将被保存在一个单独的目录
--journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg # 启用日志诊断选项
--ipv6 # 启用IPv6选项
--jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
--maxConns arg # 最大同时连接数 默认2000
--noauth # 不启用验证
--nohttpinterface # 关闭http接口,默认关闭27018端口访问
--noprealloc # 禁用数据文件预分配(往往影响性能)
--noscripting # 禁用脚本引擎
--notablescan # 不允许表扫描
--nounixsocket # 禁用Unix套接字监听
--nssize arg (=16) # 设置信数据库.ns文件大小(MB)
--objcheck # 在收到客户数据,检查的有效性,
--profile arg # 档案参数 0=off 1=slow, 2=all
--quota # 限制每个数据库的文件数,设置默认为8
--quotaFiles arg # number of files allower per db, requires --quota
--rest # 开启简单的rest API
--repair # 修复所有数据库run repair on all dbs
--repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
--slowms arg (=100) # value of slow for profile and console log
--smallfiles # 使用较小的默认文件
--syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo # 打印一些诊断系统信息
--upgrade # 如果需要升级数据库 * Replicaton 参数
# 查询所有数据库列表:
show dbs
# 切换数据库
use 数据库名
# 查看数据库的状态
db.stats()
# 查看当前数据库下有哪些表
show collections
# 查看表的记录条数
db.table.find().count()
# 查看表的大小
db.表名.dataSize()
# 删除表
db.表名.drop()
# 删除当前的数据库
db.dropDatabase()
# 改变节点优先级,过修改priority的值来实现,priority的值设的越大,就优先成为主)
conf = rs.conf()
conf.members[3].priority = 3
rs.reconfig(conf)
MongoDB启动服务出现“服务没有响应控制功能”错误
在命令行敲出如下代码后再启动服务出“服务没有响应控制功能”
mongod --dbpath "C:\MongoDB\data\db" --logpath "C:\MongoDB\data\log\mongo.log" --install --serviceName "MongoDB"
MongoDB 分片(sharding)+副本集(replSet)集群搭建
解决 Win10 安装 MongoDB 4.0 无法启动服务的问题
菜鸟教程-MongoDB教程
MongoDB 复制集节点增加移除及节点属性配置
MongoDB分片实战
mongodb副本集高可用架构
MongoDB副本集(一主两从)读写分离、故障转移功能环境部署记录
MongoDB开启用户密码访问