劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。 —— 唐·无名氏 《金缕衣》
一、安装MongoDB
通过添加repo源方式
添加repo源 /etc/yum.repos.d/mongodb-org-4.0.repo
编辑repo源,加入以下内容
1
2
3
4
5
6[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc安装 sudo yum install -y mongodb-org
- 可指定安装版本 sudo yum install -y mongodb-org-4.0.9 mongodb-org-server-4.0.9 mongodb-org-shell-4.0.9 mongodb-org-mongos-4.0.9 mongodb-org-tools-4.0.9
- 关闭自动更新,编辑/etc/yum.conf文件加入以下内容
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
通过源码安装
- 下载源码
wget 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 -C /usr/local
- 重命名
mv mongodb-linux-x86_64-rhel70-4.0.9 /usr/local/mongodb-4.0.9
cd /usr/local/mongodb-4.0.9
- 创建data和logs目录
mkdir data && mkdir logs && touch ./logs/mongo.log
- 创建mongodb.conf
1 | 7. 编辑mongodb.conf,加入以下内容 |
通过以上7/8步骤后不能启动,换成如下方式启动成功
- 启动服务
mongod --dbpath=/usr/local/mongodb-4.0.9/data --logpath=/usr/local/mongodb-4.0.9/log/mongo.log --logappend --fork
mongod --help
可查看更多参数设置- 社区版中提供的mongo二进制文件不支持–ssl选项
通过rpm方式
- 下载rpm文件
- mongodb-org-server-4.0.9-1.el7.x86_64.rpm
- mongodb-org-3.2.9-1.el7.x86_64.rpm
- mongodb-org-server-3.2.9-1.el7.x86_64.rpm
- mongodb-org-tools-3.2.9-1.el7.x86_64.rpm
- mongodb-org-mongos-3.2.9-1.el7.x86_64.rpm
- mongodb-org-shell-3.2.9-1.el7.x86_64.rpm
- 安装各个rpm rpm -ivh mongodb-*.rpm
二、Mac下安装
源码安装
- 下载
https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.11.tgz
至/usr/local/src
- 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.11.tgz
- 移动
sudo mv mongodb-osx-x86_64-4.0.11 /usr/local/mongodb-4.0.11
- 切换目录
cd /usr/local/mongodb-4.0.11
- 初始化数据目录和日志目录和日志文件
mkdir data && sudo mkdir logs && sudo touch ./logs/mongo.log
- 创建配置文件
sudo touch mongodb.conf
,加入以下内容: - 修改权限
sudo chmod -R 777 /usr/local/mongodb-4.0.11
1 | dbpath = /usr/local/mongodb-4.0.11/data |
- MAC下新版本(4.2.1)指定
storageEngine=mmapv1
选项时会报错,4.2已废弃此引擎,默认wiredTiger - MAC下提示
Error parsing INI config file: unrecognised option 'nohttpinterface'
- 启动服务
./bin/mongod -f mongodb.conf
,成功则有如下信息:
1 | about to fork child process, waiting until server is ready for connections. |
- 进入mongo
./bin/mongo --port 27017
- 查看db支持的系统方法
db.help()
- 查看db支持的系统方法
1 | DB methods: |
命令安装
三、php扩展安装
- 下载
wget http://pecl.php.net/get/mongodb-1.5.3.tgz
- 解压
tar -zxvf mongodb-1.5.3.tgz
cd mongodb-1.5.3
- /path/phpize
- ./configure –with-php-config=/path/php-config
- make && make install
- 报错
/usr/local/src/mongodb-1.5.3/src/libmongoc/src/libmongoc/src/mongoc/mongoc-rand-common-crypto.c:25:10: fatal error:'Security/Security.h' file not found
- 报错
- 解决
cd mongodb-1.5.3/include
ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Versions/A/Headers/ Security
ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/ CoreFoundation
- make && make install
- 参考
四、各种问题
- MongoDB时间范围查询与like查询
五、进阶列表
常见问题处理
- 连接问题
- 连接超时
- 测试链路是否通畅
telnet IP/Domain port
- 测试链路是否通畅
- 鉴权失败
- 用户或密码错误
- 用户权限不对
not master and slaveOk=false
- 默认情况下MongoDB的读写请求都必须到Primary节点,Secondary是不可读的,设置Secondary可读:
rs.slaveOk()
- 默认情况下MongoDB的读写请求都必须到Primary节点,Secondary是不可读的,设置Secondary可读:
Connection reset by peer
- 实例的连接数已经达到上限,无法再建立更多的网络连接
- 连接数问题
- 查看当前连接数:
db.serverStatus().connections
- 查看连接具体信息:
db.runCommand({currentOp: 1, $all: true})
- 限制连接数数量:在
Connection String URI Format
末尾添加&maxPoolSize=num
- 查看当前连接数:
- 连接超时
- 负载问题
- CPU利用率很高,查看实例正在执行的操作:
db.currentOp()
- 造成实例负载高的典型case
- 并发请求的量太大,超出当前规格的服务能力
- 查询集合时没有合理的建索引,导致全表扫描或排序
- 正在跑一些计算量很大的mapreduce或者aggregation任务
- kill操作:
db.killOp(opid)
,opid来自第一步db.currentOp()
- 造成实例负载高的典型case
- CPU利用率很高,查看实例正在执行的操作:
- 连接问题
使用正确的姿势连接复制集
- Primary节点不是固定的
- MongoDB复制集里Primary节点是不固定的,当遇到复制集轮转升级、Primary宕机、网络分区等场景时复制集可能会选举出一个新的Primary,而原来的Primary则会降级为Secondary,即发生主备切换。
- 当连接复制集时,如果直接指定Primary的地址来连接,当时可能可以正确读写数据的,一旦发生主备切换,原来的Primary会降级为Secondary,此时将无法继续执行写操作,切不可以直连Primary地址。
- 连接时使用Connection String URI Format,如PHP连接时
mongodb://user:'.rawurlencode('password').'@aaap.mongodb.xxx.rds.aliyuncs.com:3717,aaas.mongodb.xxx.rds.aliyuncs.com:3717?replicaSet=mgset-1234
。
- Primary节点不是固定的
使用正确的姿势连接分片集群
- 用户访问分片集群跟访问单个实例类似
- 连接时使用和复制集类似,如PHP连接时:
mongodb://user:'.rawurlencode('password').'@aaap.mongodb.xxx.rds.aliyuncs.com:3717,aaas.mongodb.xxx.rds.aliyuncs.com:3717
,即没有指定复制集名称。
参考