本文档主要介绍了mongodb安装,添加副本集、分片及日常维护操作,mongodb2.4.10支持hash分区,针对大并发访问,提供了较好的性能,建议使用ssd硬盘
mongodb安装
下载Mongodb 软件                                                                    
wget  http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.10.tgz               
创建用户组app和账号app                                                              
groupadd app                                                                        
useradd  app –g  app                                                             
创建数据目录、日志目录、配置文件目录                                                
su – app                                                                           
mkdir shard                                                                         
mkdir logs                                                                          
mkdir conf                                                                          
解压缩软件包                                                                        
tar xzvf  mongodb-linux-x86_64-2.4.10.tgz –C  /home/app                            
mv mongodb-linux-x86_64-2.4.10  mongodb2.4.10      
创建配置文件                                                                                            
vi  /home/app/conf/shard.conf                                                                           
配置选项:                                                                                              
dbpath = /home/app/shard                                                                                
bind_ip=10.0.0.1                                                                                        
port = 27018                                                                                            
logpath = /home/app/logs/shard.log                                                                      
logappend = true                                                                                        
replSet = rs1                                                                                           
shardsvr = true                                                                                         
fork = true                                                                                             
启动mongod服务                                                                                          
numactl --interleave=all  /home/app/mongodb2.4.10/bin/mongod -f  /home/app/conf/shard.conf              
在第二个host上启动同样的mongod服务                                                                      
numactl --interleave=all  /home/app/mongodb2.4.10/bin/mongod -f  /home/app/conf/shard.conf              
配置选项修改:                                                                                          
bind_ip=10.0.0.2                                                                                        
在第三个host上配置仲裁者服务                                                                 
配置选项:                                                                                   
vi  /home/app/conf/arbiter.conf                                                              
dbpath = /home/app/arbiter                                                                   
port = 27020                                                                                 
logpath = /home/app/logs/arbiter.log                                                         
logappend = true                                                                             
fork = true                                                                                  
启动仲裁者:                                                                                 
numactl --interleave=all   /home/app/mongodb2.4.10/bin/mongod -f  /home/app/conf/arbiter.conf

部署副本集                                                                                   
连接主节点mongod:                                                                           
/home/app/mongodb2.4.10/bin/mongo  --host  10.0.0.1  --port 27018                            
为副本集添加成员:                                                                           
rs.add(“10.0.0.1:27018”)                                                                   
rs.add(“10.0.0.2:27018”)                                                                   
rs.addArb(“10.0.0.3:27020”)                                                                

设置成员优先级:                                                                            
var config = rs.config()                                                                    
config.members[0].priority = 2                                                              
config.members[1].priority = 1                                                              
rs.reconfig(config)                                                                         
                                                                                            
查看副本集状态:                                                                            
rs.status() / rs.isMaster()  / rs.conf()                                                  
                                                                                            
创建配置服务器  (建议3台,避免单点故障)                                                                            
配置选项:                                                                                  
vi  /home/app/conf/config.conf                                                              
dbpath = /home/app/configdb                                                                 
port = 27019                                                                                
logpath = /home/app/logs/config.log                                                         
logappend = true                                                                            
configsvr = true                                                                            
fork = true                                                                                 
启动配置服务器进程:                                                                        
numactl --interleave=all   /home/app/mongodb2.4.10/bin/mongod -f  /home/app/conf/config.conf

创建mongos服务                                                                                     
配置选项:                                                                                         
vi  /home/app/conf/route.conf                                                                      
configdb = 10.0.0.3:27019                                                                          
logpath = /home/app/logs/route.log                                                                 
logappend = true                                                                                   
fork = true                                                                                        
启动mongos进程:                                                                                   
numactl --interleave=all   /home/app/mongodb2.4.10/bin/mongos -f  /home/app/conf/route.conf        
                                                                                                   
启动分片集群                                                                                       
将副本集添加为分片:                                                                               
sh.addShard(“rs1/10.0.0.1:27018”)                                                                
                                                                                                   
查看集群状态:                                                                                     
sh.status()                                                                                        
 
对数据库启用分片:(集合也需要分片,命令见分片集群常用管理命令)                                
sh.enableSharding(“tts_test”)                   
                                                  
分片集群配置成功
mongodb 安装配置及日常维护-LMLPHP


分片集群常用管理命令                                                                   
创建索引:                                                                             
db.users.ensureIndex("xx" : 1 }                                                      
db.users.ensureIndex(("xx" : 1 }),{"background" : true } )         1或-1代表索引的方向                    
散列片键(使用HASH分片,解决部分分片负载不均衡问题) :                                                                            
db.users.ensureIndex({"username": "hashed"})
sh.shardCollection("app.users",{"username": "hashed"})                            

压缩数据:                                                                           
db.runCommand({"compact" : "collname"})     空间不会减小,但是占用资源较多                                                                                         
释放空间:                                                                           
进入数据库 db.repairDatabase()    
replSet 架构,可以停掉数据库,然后删除数据目录,从新从复制组中全同步数据,这个时候要考虑 oplog 的尺寸
1)将 primary stepDown,不出意外新的 primary 会起来;
2)将原 primary kill 掉;
3)删掉所有 data 数据(调用 repair 很慢,真不如干掉重新来);
4)再重启动原 primary 的进程;
5)以此循环完成整个复制组的全部重建。
                                                              
主从切换:                                                                           
rs.stepDown([secs])    
查看复制:                                                                           
db.printReplicationInfo()                                                            
db.printSlaveReplicationInfo()                                                                     
停止服务:                                                                           
kill   pid                                                                           
db.shutdownServer()                                                                  
db.adminCommand({"shutdown" : 1})                                                    

均衡器管理
sh.getBalancerState()
sh.isBalancerRunning()
sh.setBalancerState(true)                                                #关闭均衡器sh.setBalancerState(false)

mongodb状态监控
mongostat它的输出有以下几列:
insert 每秒插入次数
query 每秒查询次数
update 每秒更新次数
delete 每秒删除次数
getmore 每秒执行getmore次数
command 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
flushs 每秒执行fsync将数据写入硬盘的次数。
mapped 所有的被mmap的数据量
vsize 虚拟内存使用量
res 物理内存使用量
faults 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
locked % 被锁的时间百分比,尽量控制在50%以下吧
idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
qr 客户端等待从 MongoDB 实例读取数据的队列长度。
qw 客户端等待向 MongoDB 实例写入数据的队列长度。
ar 执行读取操作的活动客户端的数目。
aw 执行写入操作的活动客户端的数目。
netIn MongoDB 收到的网络流量,这包括 mongostat 本身的流量。
netOut MongoDB 发送的网络流量,这包括 mongostat 本身的流量。
conn 打开连接的总数。
set 副本集的名称(如适用)。
repl 节点的复制状态。(M:主版本,SEC:次,REC:恢复,UNK:未知,SLV:从属)

                
                             
09-29 08:24