MongoDB主从 副本集 分片集群安装
2016-01-22 17:58
639 查看
############################### 主从开始 ########################################## 最简单主从 http://www.codefrom.com/paper/MongoDB学习札记第六篇之主从复制 mongod --master --dbpath /opt/mongo1/ --port 10000 mongod --slave --dbpath /opt/mongo2/ --port 10001 --source 127.0.0.1:10000 --slavedelay 600 延迟600s,可防止误删除数据库 连接方式 mongo 127.0.0.1:10000 mongo --host 127.0.0.1 --port 10000 登陆到从执行show dbs报错 解决办法 1 临时生效 执行rs.slaveOk() 或 db.getMongo().setSlaveOk(); 2 永久生效 vi ~/.mongorc.js 增加一行rs.slaveOk(); 3 方法三:在程序连接mongodb的XML配置文件增加 slave-ok="true"也支持直接从secondary中读 http://www.cnblogs.com/htynkn/archive/2011/10/30/2229467.html ############################### 主从结束 ################################################# ############################### 副本集 Replica-Set 开始 ################################## http://webinglin.github.io/2015/06/09/MongoDB学习札记-第八篇-Replica-Set-实战/ MongoDB Replica Set使用经验分享理论篇 http://www.linuxidc.com/Linux/2015-02/113296.htm ======================================================================================== 一个Replica Set中的成员角色有三种:Primary,Secondary和Arbiter。 Primary 接收来自客户端的所有的写操作,一个Replica Set中有且只有一个Primary。Primary如果宕掉,Replica Set会自动选举一个Secondary成为Primary。 Primary将它data sets的所有操作都记录到oplog中。 Secondary Secondary从Primary复制oplog,然后将oplog中的操作应用到自己的data sets。Secondary和Primary之间是异步复制,也就是Secondary中的数据可能 不是最新的。默认情况下,Secondary不可读不可写,但是可以通过设置运行客户端从Secondary读。 Arbiter Arbiter不需要维护自己的data sets,只是当Primary挂掉之后参与投票选择哪个Secondary可以升级为Primary。当Replica Set中的成员个数为偶数个时, 就需要添加一个Arbiter用于投票选举哪个可以升级为Primary。Arbiter对硬件的要求很低。不能在Primary或者Secondary主机上运行Arbiter。 Hidden:这类节点是不能够被客户端制定IP引用,也不能被设置为主节点,但是可以投票,一般用于备份数据。 Delayed:可以指定一个时间延迟从primary节点同步数据。主要用于备份数据,如果实时同步,误删除数据马上同步到从节点,恢复又恢复不了。 Non-Voting:没有选举权的secondary节点,纯粹的备份数据节点。 一个Replica Set可以最多拥有12个成员,但是只有7个成员可以同时参与投票选举成为Primary,如果成员数量超过12,就需要使用Master-Slave主从复制方式。 部署一个Replica Set至少需要三个成员,一个Arbiter,一个Secondary和一个Primary或者一个Primary,两个Secondary。 ====================================================================================== mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据 请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。 config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置 服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的 状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台, 只要还有存货, mongodb集群就不会挂掉。 shard,这就是传说中的分片了。 一共三台机器 owl8 10.45.13.133 主 mongos config replica set owl5 10.45.12.205 从 mongos config replica set owl6 10.45.12.196 从 mongos config replica set 每一台服务器分别启动配置服务器 mongod --configsvr --dbpath /opt/config --port 21000 --logpath /bak/logs/mongo/config.log --fork 每一台服务器分别启动mongos服务器 mongos --configdb 10.45.13.133:21000,10.45.12.205:21000,10.45.12.196:21000 --port 20000 --logpath /bak/logs/mongo/mongos.log --fork Replica Set 在三台机器执行 两种方法 --replSet 指定副本集名称 mongod --dbpath /opt/mongo --replSet rs0 #前台执行,显示日志 mongod --fork --dbpath /opt/mongo --replSet rs0 --oplogSize 5000 --logpath /opt/mongo/mongod.log #后台执行 按配置文件启动 mongod -f /etc/mongod.conf ############################################################################################# # mongod.conf # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /bak/logs/mongo/mongod.log # Where and how to store data. storage: dbPath: /opt/mongo journal: enabled: true directoryPerDB: true # syncPeriodSecs: 60 # engine: # mmapv1: # wiredTiger: engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 6 # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /opt/mongo/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 127.0.0.1,10.45.13.133 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: #replication: replication: oplogSizeMB: 5000 replSetName: rs0 #sharding: ## Enterprise-Only Options #auditLog: #snmp: ######################################################################### 安装失败,清理文件命令 ps -ef|grep -v "grep\|tail"|grep mongo|awk '{print $2}'|xargs kill -15 rm -f /tmp/mongodb-27017.sock rm -rf /opt/mongo/* rm -f /opt/mongo/WiredTiger.turtle sync echo "1" >/proc/sys/vm/drop_caches echo "0" >/proc/sys/vm/drop_caches mongod -f /etc/mongod.conf tail -f /bak/logs/mongo/mongod.log owl8 10.45.13.133 owl5 10.45.12.205 owl6 10.45.12.196 登陆到其中一台 #使用admin数据库 use admin config = {_id:"rs0",members:[ {_id:0,host:"10.45.13.133:27017"}, {_id:1,host:"10.45.12.205:27017"}, {_id:2,host:"10.45.12.196:27017"}]} #monogo 副本集一些命令 登陆到mongod执行 #初始化 rs.initiate(config); rs.conf() #查看配置 查看节点状态 rs.status() state: 1表示当前可以进行读写,2表示不能读写 health: 1表示是正常的,0异常 动态添加节点,删除节点 必须要在 Primary 节点中进行 rs.remove("10.172.229.12:27017") rs.add("10.172.229.12:27017") replSetStepDown命令下架主节点。这个命令可以登录主节点使用 db.adminCommand({replSetStepDown : 1}) Mongodb权威指南 215页 把主节点变为备份节点,并维持60秒.如果这段时间没有新的主节点被选举出来,这个节点可以要求重新选举 rs.stepDown() rs.stepDown(600) 主节点变为备份节点,并维持600秒 如果杀不掉可以使用强制开关 db.adminCommand({replSetStepDown : 1, force : true}) 阻止选举 rs.freeze 如果对主节点做一些维护,不希望这段时间将其他成员选举为主节点,可以在每个备份节点执行freeze,强制他们始终处理备份节点 rs.freeze(600) 也可以加时间限制 rs.freeze(0) 维护完成后,如果想释放其他成员, 执行rs.freeze(0) 即可 修改mongodb oplog size 默认,oplog大小会占用64位的实例5%的可用磁盘空间。 查询oplog的大小及保存的操作记录持续的时长 rs0:PRIMARY>db.printReplicationInfo() 查询从节点的数据源列表,其中有数据滞后的时间 rs0:SECONDARY> db.printSlaveReplicationInfo() Mongos Config 配置 ################################## #串联路由服务器 将副本集转换为分片 登陆到其中一台mongos mongo --port 20000 方法一 use admin db.runCommand( { addshard : "rs0/10.45.13.133:27017,10.45.12.205:27017,10.45.12.196:27017"}); 方法二 sh.addShard("rs0/10.45.13.133:27017,10.45.12.205:27017,10.45.12.196:27017") 设置为Arbiter使用以下方法 {_id:2,host:"10.45.12.196:27017",arbiterOnly:true}]} #查看分片服务器的配置 use admin db.runCommand( { listshards : 1 } ); sh.status() 这个命令也可以查看 ############################### 副本集 Replica-Set 结束 ################################## ############################### 分片集群开始 ################################## http://webinglin.github.io/2015/06/10/MongoDB学习札记-第十篇-分片集群搭建/ https://docs.mongodb.org/manual/tutorial/choose-a-shard-key/ 环境准备 config Server 10.172.229.12:27000 mongos 10.172.229.12:28000 shards 10.172.229.12:29001 10.172.229.12:29002 10.172.229.12:29003 第一步: 创建分片实验需要的目录 mkdir -p /opt/shard/s1 mkdir -p /opt/shard/s2 mkdir -p /opt/shard/s3 mkdir -p /opt/shard/log mkdir -p /opt/shard/config 第二步: 启动configServer mongod --configsvr --dbpath /opt/shard/config/ --fork --logpath /opt/shard/log/configsvr.log --logappend --port 27000 第三步: 启动mongos mongos --configdb 10.172.229.12:27000 --port 28000 --fork --logpath /opt/shard/log/mongs.log 第四步: 启动所有的shard分片 mongod --dbpath /opt/shard/s1/ --port 29001 --fork --logpath /opt/shard/log/s1.log --shardsvr --logappend mongod --dbpath /opt/shard/s2/ --port 29002 --fork --logpath /opt/shard/log/s2.log --shardsvr --logappend mongod --dbpath /opt/shard/s3/ --port 29003 --fork --logpath /opt/shard/log/s3.log --shardsvr --logappend 第五步: 将shard添加到mongos中 并配置 mongo --port 28000 #使用admin数据库 use admin sh.addShard("10.172.229.12:29001") sh.addShard("10.172.229.12:29002") sh.addShard("10.172.229.12:29003") 使用下面两个命令来配置需要分片的数据库及集合以及对应的片键 sh.enableSharding("test") sh.shardCollection("test.users",{"username":1,"_id":1}) 验证分片集群部署情况 先往mongos插入100条数据,然后通过 db.users.stats() 查看集合的状态,发现集合被切分到三个分片中了,虽然第一个分片数据量比较多,其他两个分片 数据量相对较少 (这个和片键 sharding key 的设置有关,我没有详细看官网关于shard key设置的文章,所以这里的片键设置比较简单,随意。) for(var i=0; i<100; i++) { db.users.insert({"username":"" + i,age:i*2 , addr:"ardr"+i}) } db.users.stats() 查看集合状态 这时候如果用mongo客户端去连接 29001 , 29002, 29003端口,会发现只有集合的部分数据是可见的 ############################### 分片集群结束 ##################################
相关文章推荐
- MongoDB 3.0 新增特性一览
- MongoDB 3.0 新增特性一览
- mongodb事务
- MongoDB学习笔记之Mongoose的使用
- MongoDB分片
- Nodejs+Extjs+Mongodb开发第一天 Nodejs环境搭建
- MongoDB去除_class属性
- Windows下安装MongoDB心得与攻略
- mongodb中投票节点作用
- mongodb
- java程序连接MongoDB副本集测试
- mongodb 启动时的警告问题
- MongoDB 参数配置
- MongoDB 入门之查询(find)
- MongoDB主从复制
- 面对Schema free的MongoDB,如何规范你的schema
- MongoDB的冷备份与热备份
- MongoDB学习分享 泽0715 新浪博客
- MongoDB 查询超时异常的原因及解决办法
- MongoDB 3.2 测试环境副本集搭建