Mongodb集群搭建
三台服务器ip地址:192.168.1.1
192.168.1.2
192.168.1.3
- 在三台服务器分别安装mongodb(我采用的是3.2.7版本)
- 使用此命令即可下载: curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.7.tgz(版本可以手动的去更改)
- 安装完成之后比保证每台都能启动成功:由于这种方法安装在/etc/mongodb.conf没有此配置文件,所以要手动的去创建mongodb.conf
- 配置文件如下:根据自己的配置去填写
fork=true #以守护进程的方式运行,创建服务器进程
#安装mongodb时的日志文件
logpath=/alidata/approot/mongodb/mongodb-linux-x86_64-3.2.7/logs/work.log
#日志输出方式
logappend=true
#mongodb的数据库路径
dbpath=/alidata/approot/mongodb/mongodb-linux-x86_64-3.2.7/data/db
#设置副本集的名字
replSet=rs0
#如果原先的mongodb没有数据的话就加上这个配置
directoryperdb=true
主和从的配置文件要一直,log和db可以不同.
- mongodb.conf配置好之后,进入到mongodb的安装目录下面的bin目录执行以下命令:
如果mongodb已经启动,要先杀掉mongodb的启动进程.
./mongod -f /etc/mongodb.conf
查看进程是都正常启动:
ps -ef|grep mongodb
ps -ef|grep mongod
ps -ef|grep mongo
启动成功!
- 然后进步mongodb的bin目录下执行./mongo之后.shou dbs 会报错:
是因为数据得初始化:解决方法:
先试用命令关闭掉mongodb:
./mongod --dbpath=/alidata/approot/mongodb/mongodb-linux-x86_64-3.2.7/data/db/ --shutdown
然后在etc/mongodb.conf配置文件加上配置参数:
oplogSize = 4096
journal = true
然后再次启动: ./mongod -f /etc/mongodb.conf
三台服务器的配置文件都要改为一致,启动成功之后进去到主的mongo
执行命令:
rs.initiate(
{
_id: "rs0",
version: 1,
members: [
{ _id: 0, host : "192.168.1.1:27017", priority: 30},
{ _id: 1, host : "192.168.1.2:27017", priority: 20 },
{ _id: 2, host : "192.168.1.3:27017", priority: 10 }
]
}
)
然后使用命令:rs.ststus()查看下:会出现以下状态:
{
"info" : "run rs.initiate(...) if not yet done for the set",
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94
}
如果显示出来这样就是另外两台写入过数据 :
停掉两台从的 :把数据清空了 或者换一个文件夹
mv db db.bak
mkdir db
chmod -R 777 db
然后启动
再次执行上面的命令:rs.initiate(
{
_id: "rs0",
version: 1,
members: [
{ _id: 0, host : "123.57.8.252:27017", priority: 30},
{ _id: 1, host : "60.205.5.160:27017", priority: 20 },
{ _id: 2, host : "101.201.54.247:27017", priority: 10 }
]
}
)
然后使用命令:rs.status()
然后去从节点看下logs日志
然后使用命令:top 查看下负载
然后在从节点看下同步进程:必须进入到logs目录下面 才能执行以下面的查看进程的命令
使用命令:tail -f work.log
然后进去到主节点使用命令:use test
然后使用命令:find image_weibo.files.find()
如果有数据,就去从节点的mongo执行命令:
rs.slaveOk()
两个从节点都要执行这个命令:
然后使用命令use test
然后使用命令db.image_weibo.files.find() 查看是否有数据 如果有数据就是同步成功了 OK!
然后在主节点插入数据测试:
db.image_weibo.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
已经全部配置成功:当你进去到另外两台从服务器的mongo的时候:
每次都要首先输入:rs.slaveOK()才能往下面去进行:
代码连接主从方法:
$conn=new \MongoClient("mongodb://192.168.1.1:27017,192.168.1.2:27017, 192.168.1.3:27017");
最后插入数据测试:数据能正常同步:!!!!!

浙公网安备 33010602011771号