CentOS6.5系统下,MongoDB之Replcia Set集群搭建
准备工作:
官网介绍地址:http://docs.mongodb.org/manual/
MongoDB:一种NoSQL(Not Only SQL)数据库,不仅仅是关系型数据库,它的存储方式是文档式存储。
NoSQL:随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
Mongodb有三种集群搭建方式:Replica Set / Sharding / Master-Slaver。
Replica Set:副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。
下载Mongodb:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
开始配置:
在root用户下,对四台机器进行配置:
vim /etc/sysconfig/network
修改主机名
vim /etc/hosts
修改主机和IP地址的映射
配置后的结果如下:
192.168.154.156 Master
192.168.154.158 Slave1
192.168.154.159 Slave2
192.168.154.160 Slave3
使用U盘将mongodb-linux-x86_64-3.0.6.tgz拷贝到Master的/home/hadoop/下
安装MongoDB:
mkdir /usr/local/mongodb
在"/usr/local"下创建"mongodb"文件夹
cp /home/hadoop/mongodb-linux-x86_64-3.0.6.tgz /usr/local/mongodb
把"mongodb-linux-x86_64-3.0.6.tgz"复制到"/usr/local/mongodb"文件夹中
cd /usr/local/mongodb
打开/usr/local/mongodb文件夹
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz -C /usr/local/mongodb
解压到/usr/local/mongodb文件夹
mv mongodb-linux-x86_64-3.0.6 mongodb
将mongodb-linux-x86_64-3.0.6名字变为mongodb
(注:此时MongoDB的路径为/usr/local/mongodb/mongodb,
其实可以直接把mongodb-linux-x86_64-3.0.6.tgz拷贝到/usr/local/下进行解压,
然后再修改名字,这时mongodb的路径就是/usr/local/mongodb)
建立文件夹:
建立data文件夹:
cd /usr/local/mongodb/
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
建立
或
mkdir -p mongodb/data/{master,slaver,arbiter}
(附:
rm -rf mongodb/data/{master,slaver,arbiter}
删除命令,这个不是必须的)
建立logs文件夹:
mkdir -p /usr/local/mongodb/mongodb/logs
建立conf文件夹:
mkdir -p /usr/local/mongodb/mongodb/conf
在data目录下建立文件夹:
cd /usr/local/mongodb/mongodb/data
touch master.pid
touch slaver.pid
touch arbiter.pid
在logs目录下建立文件夹:
cd /usr/local/mongodb/mongodb/logs
touch master.log
touch slaver.log
touch arbiter.log
在conf目录下建立文件夹:
cd /usr/local/mongodb/mongodb/conf
touch mongodb-master.conf
touch mongodb-slaver.conf
touch mongodb-arbiter.conf
配置mongodb-master.conf:
cd /usr/local/mongodb/mongodb/conf
vim mongodb-master.conf
#mongodb-master.conf
dbpath=/usr/local/mongodb/mongodb/data/master
logpath=/usr/local/mongodb/mongodb/logs/master.log
pidfilepath=/usr/local/mongodb/mongodb/data/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.154.156
port=27017
oplogSize=1000
fork=true
noprealloc=true
配置mongodb-slaver.conf:
cd /usr/local/mongodb/mongodb/conf
vim mongodb-slaver.conf
#mongodb-slaver.conf
dbpath=/usr/local/mongodb/mongodb/data/slaver
logpath=/usr/local/mongodb/mongodb/logs/slaver.log
pidfilepath=/usr/local/mongodb/mongodb/data/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.154.158
port=27017
oplogSize=1000
fork=true
noprealloc=true
smallfiles=true
配置mongodb-arbiter.conf:
cd /usr/local/mongodb/mongodb/conf
vim mongodb-arbiter.conf
#mongodb-arbiter.conf
dbpath=/usr/local/mongodb/mongodb/data/arbiter
logpath=/usr/local/mongodb/mongodb/logs/arbiter.log
pidfilepath=/usr/local/mongodb/mongodb/data/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.154.160
port=27017
oplogSize=1000
fork=true
noprealloc=true
smallfiles=true
配置参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
拷贝到其他主机目录下:
cd /usr/local
打开路径
sudo tar -zcf ./mongodb.tar.gz ./mongodb
压缩
scp ./mongodb.tar.gz Slave1:/home/hadoop
复制到Slave1主机上
同上,复制到Slave2、Slave3中
scp ./mongodb.tar.gz Slave2:/home/hadoop
scp ./mongodb.tar.gz Slave3:/home/hadoop
在其他主机上进行修改:
sudo tar -zxf /home/hadoop/mongodb.tar.gz -C /usr/local
解压到/usr/local路径下
chown -R hadoop:hadoop /usr/local/mongodb
要给"Slave1"服务器上的用户hadoop添加对"/usr/local/mongodb"读权限
注:为了节省空间,意义删除mongodb.tar.gz文件
cd /home/hadoop
打开路径
rm -rf mongodb.tar.gz
删除"mongodb.tar.gz"安装包
// 将第二个Slave节点的mongodb-slaver.conf,改为bind_ip=192.168.154.159,即它自己的ip地址
给主机的hadoop用户增加sudo权限:
http://blog.csdn.net/wang_zhenwei/article/details/48261321
或下面的操作都在root用户下进行
启动mongodb:
cd /usr/local/mongodb/mongodb/bin
进入每个mongodb节点的bin目录下
sudo ./mongod -f ../conf/mongodb-master.conf
sudo ./mongod -f ../conf/mongodb-slaver.conf
sudo ./mongod -f ../conf/mongodb-arbiter.conf
注意配置文件的路径一定要保证正确,可以是相对路径也可以是绝对路径
配置主,备,仲裁节点:
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb
在Master上(192.168.154.156)机器上进行如下操作:
./mongo 192.168.154.156:27017
显示下面的结果:
[hadoop@Master bin]$ ./mongo 192.168.154.156:27017
MongoDB shell version: 3.0.6
connecting to: 192.168.154.156:27017/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-09-07T00:34:15.538-0700 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2015-09-07T00:34:15.538-0700 I CONTROL [initandlisten]
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten]
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten]
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-09-07T00:34:15.539-0700 I CONTROL [initandlisten]
>
use admin
运行结果:
> use admin
switched to db admin
</pre><p></p><p> </p><p>cfg={_id:"testrs",members:[{_id:0,host:'192.168.154.156:27017',priority:3},{_id:1,host:'192.168.154.158:27017',priority:2},{_id:2,host:'192.168.154.159:27017',priority:1},{_id:3,host:'192.168.154.160:27017',arbiterOnly:true}]};</p><p>运行结果:</p><p></p><pre name="code" class="html">> cfg={_id:"testrs",members:[{_id:0,host:'192.168.154.156:27017',priority:3},{_id:1,host:'192.168.154.158:27017',priority:2},{_id:2,host:'192.168.154.159:27017',priority:1},{_id:3,host:'192.168.154.160:20111',arbiterOnly:true}]};
{
"_id" : "testrs",
"members" : [
{
"_id" : 0,
"host" : "192.168.154.156:27017",
"priority" : 3
},
{
"_id" : 1,
"host" : "192.168.154.158:27017",
"priority" : 2
},
{
"_id" : 2,
"host" : "192.168.154.159:27017",
"priority" : 1
},
{
"_id" : 3,
"host" : "192.168.154.160:27017",
"arbiterOnly" : true
}
]
}
rs.initiate(cfg)
使配置生效
运行结果:
> rs.initiate(cfg)
{ "ok" : 1 }
实验:
testrs:OTHER> use test
switched to db test
testrs:PRIMARY> db.user.insert({name:'jack',age:80});
WriteResult({ "nInserted" : 1 })
testrs:PRIMARY> db.user.find();
{ "_id" : ObjectId("55ed49d8ecafcda794a28e84"), "name" : "jack", "age" : 80 }
testrs:PRIMARY> rs.status();
{
"set" : "testrs",
"date" : ISODate("2015-09-07T08:25:35.328Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.154.156:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3081,
"optime" : Timestamp(1441614296, 2),
"optimeDate" : ISODate("2015-09-07T08:24:56Z"),
"electionTime" : Timestamp(1441614117, 1),
"electionDate" : ISODate("2015-09-07T08:21:57Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.154.158:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 220,
"optime" : Timestamp(1441614296, 2),
"optimeDate" : ISODate("2015-09-07T08:24:56Z"),
"lastHeartbeat" : ISODate("2015-09-07T08:25:33.409Z"),
"lastHeartbeatRecv" : ISODate("2015-09-07T08:25:33.520Z"),
"pingMs" : 0,
"syncingTo" : "192.168.154.156:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.154.159:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 220,
"optime" : Timestamp(1441614296, 2),
"optimeDate" : ISODate("2015-09-07T08:24:56Z"),
"lastHeartbeat" : ISODate("2015-09-07T08:25:33.403Z"),
"lastHeartbeatRecv" : ISODate("2015-09-07T08:25:33.599Z"),
"pingMs" : 0,
"syncingTo" : "192.168.154.156:27017",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "192.168.154.160:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 220,
"lastHeartbeat" : ISODate("2015-09-07T08:25:33.568Z"),
"lastHeartbeatRecv" : ISODate("2015-09-07T08:25:33.597Z"),
"pingMs" : 0,
"configVersion" : 1
}
],
"ok" : 1
}
testrs:PRIMARY>
附录:
Tab键,补全;
ll,列举;
pwd,显示当前路径;