mongodb分布集群
1、shards:一个shard为一组mongod,通常一组为两台,主从或互为主从,这一组mongod中的数据时相同的,具体可见《mongodb分布式之数据复制》。数据分割按有序分割方式,每个分片上的数据为某一范围的数据块,故可支持指定分片的范围查询,这同google的BigTable 类似。数据块有指定的最大容量,一旦某个数据块的容量增长到最大容量时,这个数据块会切分成为两块;当分片的数据过多时,数据块将被迁移到系统的其他分片中。另外,新的分片加入时,数据块也会迁移。
2、mongos:可以有多个,相当于一个控制中心,负责路由和协调操作,使得集群像一个整体的系统。mongos可以运行在任何一台服务器上,有些选择放在shards服务器上,也有放在client 服务器上的。mongos启动时需要从config servers上获取基本信息,然后接受client端的请求,路由到shards服务器上,然后整理返回的结果发回给client服务器。
3、config server:存储集群的信息,包括分片和块数据信息。主要存储块数据信息,每个config server上都有一份所有块数据信息的拷贝,以保证每台config server上的数据的一致性。
4、shard key:为了分割数据集,需要制定分片key的格式,类似于用于索引的key格式,通常由一个或多个字段组成以分发数据,比如:
{ name : 1 }
{ _id : 1 }
{ lastname : 1, firstname : 1 }
{ tag : 1, timestamp : -1 }
mongoDB的分片为有序存储(1为升序,-1为降序),shard key相邻的数据通常会存在同一台服务
(数据块)上。
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
tar zxvf mongodb-linux-2.0.4.tgz
cp -fr mongodb-linux-*2.0.4/* /data/mongodb/
mkdir -p /data/mongodb/data/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #创建数据存储目录
mkdir -p /data/mongodb/log/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#创建日志存储目录
mkdir -p /data/mongodb/config/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #创建配置存储目录
mkdir -p /data/mongodb/arbiter/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#创建仲裁节点存储目录
mongod --fork --bind_ip 127.0.0.1 --port 11811 --dbpath /data0/mongodb/data --directoryperdb --logpath /data0/mongodb/log/db1.log --logappend ?--nohttpinterface
netstat -ntlp|grep mongod
简单的参数说明:
–logpath 日志文件路径
–master 指定为主机器
–slave 指定为从机器
–source 指定主机器的IP地址
–pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
–logappend 日志文件末尾添加
–port 启用端口号
–fork 在后台运行
–only 指定只复制哪一个数据库
–slavedelay 指从复制检测的时间间隔
–auth 是否需要验证权限登录(用户名和密码)
–noauth 不需要验证权限登录(用户名和密码)
1.Shard分片--
第一组分片 ?
192.168.200.226: ? ?
/data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
#启动rep1分片的一个数据节点
/data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log ? #启动路由节点,读取201.226上的配置节点的配置文件,(在配置节点启动后启动)
/data/mongodb/bin/mongod --replSet rep1 --fork --port 11814 --dbpath /data/mongodb/arbiter --directoryperdb --logpath /data/mongodb/log/arbiter.log --logappend --nohttpinterface
#启动分片的仲裁节点
192.168.201.226: ? ?
/data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
#启动rep1分片的第二个数据节点
/data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
#启动第二个路由节点 (在配置节点启动后启动)
2.ConfigServer---
? ?#启动config server ?
? ?192.168.201.226: ? ?
? ? ? ?/data/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config --port 11812 --fork --logpath /data/mongodb/log/mc.log
#启动配置节点,注意配置节点应该优先启动,不然路由节点读取不到配置节点信息则会启动失败。
3.Mongos路由---
? ?#启动mongos,指定config server, chunkSize 256M
? ?192.168.201.226:
? ? ? ?/data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
#启动路由节点
4.配置replSet: 连接任一mongod members
mongo 192.168.201.226:11813
config = {_id: 'rep1', members: [
{_id: 0, host: '192.168.200.226:11813', priority: 2}, ? ? ? ? ? ? ? ? ? ?#priority 为定义优先级,默认为1,高优先级会被认为是主节点优先启用。
{_id: 1, host: '192.168.201.226:11813'},
{_id: 2, host: '192.168.200.226:11814', arbiterOnly: true}]
}
? ?rs.initiate(config);
? ?rs.status()
5.连接mongos增加shard 80G
? ?mongo 192.168.201.226:11811/admin
? ?show dbs
? ?use admin
? ?db.runCommand({addshard:'rep1/192.168.201.226:11813,192.168.200.226:11813',maxsize:81920})
? ?db.runCommand({listshards:1})
6.连接mongos增加创建test库和c1集合,并测试
? ?mongo 192.168.201.226:11811/admin
? ?db.runCommand({enablesharding:'test'})
? ?printShardingStatus()
? ?db.runCommand({shardcollection:'test.auto_increment_id', key:{_id:1}, unique : true})
? ?db.runCommand({shardcollection:'test.c1', key:{_id:1}, unique : true})
? ?for (var i = 1; i <= 100; i++)db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"})
? ?db.c1.stats()
db.createCollection("cap_coll", {capped:true, size:100000, max:100});
db.mycoll.validate();
?
7.检查: db.printCollectionStats()
?
8.管理: mongo 127.0.0.1:11811
show dbs
use admin
show collections
db.serverStatus()
db.shutdownServer()
exit
9.索引:
db.product_data.ensureIndex({data_id: 1}, {unique: true,dropDups: true}); #创建索引
db.product_data.dropIndexes(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #删除索引
# wget http://pecl.php.net/get/mongo-1.2.6.tgz ? ?
# tar zxvf mongo-1.2.6.tgz ? ?
# cd mongo-1.2.6 ? ?
# /usr/local/php5/bin/phpize ? ?
# ./configure --enable-mongo=share--with-php-config=/usr/local/php5/bin/php-config ? ?
# make && make installl ?
将生成的拓展mongo.so文件添加到php.ini中,重启php-fpm,或者apache,然后查看下phpinfo()
请编辑php.ini文件。添加如下一行:
extension=mongo.so
然后用php输出:phpinfo,就可以看到mongo的信息了。。这样就说明你安装成功的了!
ssh-keygen ##如果是root用户,生成的默认目录为/root/.ssh下2个文件id_rsa(公钥) id_rsa.pub(私钥)
cd /root/.ssh/ && chmod 600 id_rsa* ? ? 把这2个文件修改权限,为600
ssh-copy-id -i /root/.ssh/id_rsa root@192.168.200.1 ?#加被监控节点公私钥认证
mongodb或redis的监控所需到的是你下载目录中的better-cacti-templates-1.1.8\scripts下的
ss_get_by_ssh.php 这个脚本 这个脚本需要放在cacti的服务端。
如果你cacti是装到/var/www/html/cacti/目录下。
把该文件放在其下面的scripts目录下。别忘了看下权限。要有执行权限。
# ============================================================================
$ssh_user ? = 'root'; ? ? ? ? ? ? ? ? ? ? ? ? ?# SSH username
$ssh_port ? = 22; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # SSH port
$ssh_iden ? = '-i /root/.ssh/id_rsa'; ? ? # SSH identity
##修改根据你的配置,你的ssh连接用户,还有认证私钥的位置。
$memcache_port = 11211; ? ? ? ? ? ? ? ? ? # Which port memcached listens on
$redis_port ? ?= 6379; ? ? ? ? ? ? ? ? ? ?# Which port redis listens on
function mongodb_cmdline ( $options ) {
return “echo \”db._adminCommand({serverStatus:1, repl:1})\” | /usr/local/mongo/mongodb/bin/mongo –port 10000″;
}
php /var/www/html/scripts/ss_get_by_ssh.php --type mongodb --host 192.168.200.1 --items c,de,df,dg,dh,di,dj,dk,dl,dm,dn,do,dp,dq,dr,ds,dt,du
?