看到这个标题时先别慌,哈哈……
“3M”是我自个命名的简称,分别是mongo、mongod和mongos;有时候我们很容易弄混淆这三者的概念和作用,现对它们做个简单的区分描述。
(1)mongo:mongo是一个有关MongoDB的可交互的JS shell接口;对管理员和开发人员来说,在直接测试查询和操作MongoDB数据库时mongo提供了强有力的接口能力。此外,它还为MongoDB实例提供了一种完全可用的JS环境。在MongoDB服务安装包中包含了mongo命令工具,同时MongoDB也提供独立mongo命令工具的包。简单来说mongo就是一个shell命令工具。
(2)mongod:mongod是MongoDB系统中最主要的守护进程,它处理数据的请求、管理数据访问权限和完成后台的管理操作。简单来说,只要MongoDB服务正常启动了,那么mongod就是该服务的一个实例,并且是在后台一直运行着。
(3)mongos:在分片集群中,mongos实例在客户应用程序和分片集群之间提供一个入口,也就是说在分片集群中所有的请求操作都需要通过mongos实例进行协调,它就是客户应用访问数据库的入口。mongos实例向分片组中进行路由查询和读写操作。从应用的角度来说,mongos实例的行为与其它任何的MongDB实例都是一样的。简单来说,mongos是特指MongoDB集群中路由服务器实例,扮演着一个承上启下的角色,类似一个请求分发中心,把应用的请求转发到对应的分片服务器上。在生产环境一般会部署多台mongos实例服务器,作为应用请求的入口,避免服务中断。