mongodb集群配置

来源:互联网 发布:java 方法名拼写出来 编辑:程序博客网 时间:2024/06/04 23:21

1.mongodb

mongodb是一个基于分布式文件存储的数据库,旨在为web应用提供可扩展的高性能数据存储解决方案。

2.mongodb分布式应用原理

mongodb集群包括一定数量的mongod(分片存储数据)、mongos(路由处理)、config server(配置节点)、clients(客户端)、arbiter(仲裁节点:为了选择某个分片存储数据节点作为主节点)。

shards:一个shard为一组mongod,通常一组为两台,主从或互为主从,这一组mongod中的数据是相同的。
mongos:可以有多个,相当于一个控制中心,负责路由和协调操作,使得集群想一个整体的系统。
config server:存储集群的信息,包括分片和块数据信息,主要存储块数据信息,每个config server上都有一份所有数据信息的拷贝,以保证每台config server上的数据的一致性。
shard key:为了分割数据集,需要制定分片key的格式,类似于用于索引的key格式,通常有一个活多个字段组成以分发数据。

3.mongodb分布式部署方式


4.集群模式

两台机子部署

注意:config server只能是单数

搭建配置过程

1.两台服务器分别启动相应的mongod进程:

192.168.65.138

./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath /data/shard11 --logpath /data/shard11/shard11.log --rest./mongod --fork --shardsvr --port 27018 --replSet mySet --dbpath /data/shard12 --logpath /data/shard12/shard12.log --rest

192.168.51.83

./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath /data/shard2 --logpath /data/shard2/shard2.log --rest 

2.初始化replica set

用mongo连接其中一个mongod,执行:

./mongo 192.168.65.138:27017>config = {_id:'mySet',members:[{_id:0,host:'192.168.65.138:27017',priority:2},{_id:1,host:'192.168.51.83:27017',priority:1},{_id:2,host:'192.168.65.138:27018',arbiterOnly:true}]}>rs.initiate(config)>rs.status()

注意:

27018对应的mongod,它们只负责在某个node down掉后,进行vote选举新的master,它们本身并不存储数据备份。

rs.initiate(config)失败原因:192.168.51.83防火墙问题。


3.配置config server

192.168.65.138

./mongod --fork --configsvr --port 20000 --dbpath /data/config --logpath /data/config/config.log --rest

4.配置route server

192.168.51.83

./mongod --fork --port 30000 --chunkSize 256 --configdb 192.168.65.138:20000 --logpath /data/mongos/mongos.log

5.配置集群分片

连接到mongos进程,并切换到admin数据库做一下配置

192.168.51.83

./mongo 192.168.51.83:30000>use admin>db.runCommand({addshard:'mySet/192.168.65.138:27017,192.168.51.83:27017'})>db.runCommand({enablesharding:'test'})>db.runCommand({listshards:1})>printShardingStatus()>db.runCommand({shardcollection:'test.test',key:{_id:1},unique:true})

解释:

use admin

db.runCommand({addshard:'mySet/192.168.65.138:27017,192.168.51.83:27017'})    //添加shard server实例

db.runCommand({enablesharding:'test'})    //设置test数据库可执行分片

db.runCommand({listshards:1})    //列出所有的shard server

printShardingStatus()    //查看sharding信息

db.runCommand({shardcollection:'test.test',key:{_id:1},unique:true})    //对现有的表执行sharding


6.测试

连接到mongos (接5)

>for(var i=1;i<=2014;i++)db.test.save({id:i,value1:'123',value2:'123',value3:'123',value4:'123'})>db.test.stats()


7.索引

db.test.ensureIndex({id: 1}, {unique: true,dropDups: true}); db.test.dropIndexes();                                         

注意:创建索引和删除索引


5.监控配置

   早在去年已经出现MongoDBRedis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控。cacti的模板一直在更新,若企业已经用到nosql这种非关系数据库如mongodb和redis。可按照以下教程,对mongodb和redis进行监控。

该模板可以监控以下资源:

mongodb:

redis:


一、下载模板:

wgethttp://mysql-cacti-templates.googlecode.com/files/better-cacti-templates-1.1.8.tar.gz

二、配置ssh公私钥无需密码登录:

因为cacti监控mongodb是需要登录到mongodb的服务端运行mongo的状态获取命令,所以需要ssh连接登录。

所以需要配置非交互式帐号密码登录。这里采用公私钥模式。

先在监控服务器生成一对公私钥。


  1. ssh-keygen ##如果是root用户,生成的默认目录为/root/.ssh下2个文件id_rsa(公钥) id_rsa.pub(私钥)

  2. cd /root/.ssh/ && chmod 600 id_rsa*     把这2个文件修改权限,为600

  3. ssh-copy-id -i /root/.ssh/id_rsa root@192.168.200.1  #加被监控节点公私钥认证

id_rsa.pub复制出来,放到被监控机器上,然后公钥的内容追加到需要被监控的主机也就是mongodb和redis的服务端。追加到.ssh/authorized_keys

然后用ssh连接你所安装mongodb或者redis的服务端,如果不需输密码连接上。则正常。下面就可以开始添加监控文件了。

三、配置监控脚本:


  1. mongodb或redis的监控所需到的是你下载目录中的better-cacti-templates-1.1.8\scripts下的

  2. ss_get_by_ssh.php 这个脚本 这个脚本需要放在cacti的服务端

  3. 如果你cacti是装到/var/www/html/cacti/目录下。

  4. 把该文件放在其下面的scripts目录下。别忘了看下权限。要有执行权限。

然后修改该文件。主要修改一下选项,大概在40行。

  1. # ============================================================================

  2. $ssh_user   = 'root';                          # SSH username

  3. $ssh_port   = 22;                               # SSH port

  4. $ssh_iden   = '-i /root/.ssh/id_rsa';     # SSH identity

  5. ##修改根据你的配置,你的ssh连接用户,还有认证私钥的位置。

大该在50行,还可以修改其默认的去探测的端口(如果redis不是正常默认端口启动需要修改这些)。

  1. $memcache_port = 11211;                   # Which port memcached listens on

  2. $redis_port    = 6379;                    # Which port redis listens on

如果是mongodb不是正常端口启动,则需要这样修改。找到以下字段,添加红色字段,这里注意mongo这个命令一定要找对。

  1. function mongodb_cmdline ( $options ) {

  2. return “echo \”db._adminCommand({serverStatus:1, repl:1})\” | /usr/local/mongo/mongodb/bin/mongo –port 10000″;

  3. }

配置完后保存退出。

可以先用测试命令测一下。语法如下:

  1. 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

如果有数据输出。则表示正常。


四、在cacti里添加mongodb和redis模板:

4.1 模板导入

模板目录为better-cacti-templates-1.1.8\templates

4.2 导入后对被监控机添加模板:

4.3 添加后为其绘图:

五:实际效果测试:




本文部分引用地址:

http://freeze.blog.51cto.com/1846439/884925

http://wenku.baidu.com/link?url=Oc3qynyXXLbaQXnoU7Eiwl3JZpY8DJAh0S7fCyPDAiYZubWG3nbrLC0ZgvaNTDHZIf7JsxUdYbn_5JmRkEZs98gvv6d6Lt1M7y-CTizOA8G

(涉及到三台服务器与四台服务器mongodb集群配置)


0 0
原创粉丝点击