提到文档,一个新概念JSON,MongoDB的文档相似于JSON对象!mysql
JSON:JavaScript 对象表示法(JavaScript Object Notation)。JSON 是存储和交换文本信息的语法。相似 XML。 JSON 比 XML 更小、更快,更易解析。linux
来看一下JSON文档:sql
{ "employees": [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" } ] }
在NoSQL中是最像关系型数据库的mongodb
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档、数组及文档数组。数据库
关于JSON http://www.w3school.com.cn/json/index.asp(由于基于分布式,因此很容易扩展)json
早期版本使用master-slave,一主一从和MySQL相似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主vim
目前已经淘汰master-slave模式,改成副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主数组
在此架构中还能够创建一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据数据结构
在此架构中读写数据都是在主上,要想实现负载均衡的目的须要手动指定读库的目标server架构
三台机器:
192.168.133.130(primary)
192.168.133.132(secondary) 192.168.133.133(secondary)
注意的是副本集搭建前肯定没有iptables规则和selinux,不然会破坏通讯
早期版本使用master-slave,一主一从和MySQL相似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主
目前已经淘汰master-slave模式,改成副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主
在此架构中还能够创建一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据
在此架构中读写数据都是在主上,要想实现负载均衡的目的须要手动指定读库的目标server
MongoDB支持yum安装,可是版本比较老,因此咱们使用建立一个新的扩展源来安装 cd /etc/yum.repos.d/ vim mongodb.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc yum list |grep mongodb //能够看到mongodb相关的rpm包 yum install -y mongodb-org //安装 vim /etc/mongod.conf # network interfaces net: port: 27017 bindIp: 127.0.0.1,192.168.204.131 # Listen to local interface only, comment to listen on all interfaces. ##添加IP的时候须要用逗号分开,这里须要加上本身的内网ip,三台机器三个ip需注意 replication: oplogSizeMB: 20 ##就和mysql主从以前建立前缀文件同样 replSetName: aminglinux ##注意前面的两个空格 systemctl restart mongod ps aux |grep mongod netstat -lntp |grep mongo mongo --host 192.168.204.131 --port 27017(这里能够直接mongo登陆)##这里也是本身的ip,由于是实验咯
###链接192.168.133.130主,在主上运行命令mongo,或者带上端口或者ip >use admin >config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]} ###准备把那一台当作主就是primary就在那一台上执行这个操做 >rs.initiate(config) ###初始化显示ok即成功 >rs.status() //查看状态 若是两个从上的状态为"stateStr" : "STARTUP", 则须要进行以下操做须要从新配置一下config一下 > var config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]} >rs.reconfig(config) 此时再次查看rs.status()会发现从的状态变为SECONDARY
###主上建库,建集合 >use mydb >db.acc.insert({AccountID:1,UserName:"123",password:"123456"}) >show dbs 从上查看 >show dbs 若出现错误Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },须要执行 >rs.slaveok() 就可使用show dbs了 ###副本集更改权重模拟主宕机 >rs.config()查看权重 默认三台机器权重priority都为1,若是任何一个权重设置为比其余的高,则该台机器立刻切换为primary角色,因此咱们预设三台机器的权重分别为:130:3,132:2,133:1 在主上执行 >cfg = rs.conf() >cfg.members[0].priority = 3 >cfg.members[1].priority = 2 >cfg.members[2].priority = 1 >rs.reconfig(cfg) 这样的话,第二个节点将会成为候选主节点。 主上执行模拟宕机: iptables -I INPUT -p tcp --dport 27017 -j DROP >rs.status() //最后查看主从状态分给了谁