mkdir /data cd /data # 使用xshell上傳軟件
tar xf mongodb-linux-x86_64-rhel62-3.2.10.tgz
mv mongodb-linux-x86_64-rhel62-3.2.10 mongodb
useradd mongod #添加用戶 passwd mongod # 爲用戶設置密碼
chown -R mongod.mongod /data/mongodb
su - mongod
6、建立mongod的關鍵目錄mysql
mkdir -p /data/mongodb/data /data/mongodb/log /data/mongodb/conf cd /data/mongodb ls -l
# 編輯文件 vim ~/.bash_profile #內容 # 添加一行: export PATH=/data/mongodb/bin:$PATH #配置生效一下: source ~/.bash_profile
mongod --logpath=/data/mongodb/log/mongodb.log --dbpath=/data/mongodb/data/ --fork
++++++++++++++++++++++++++++++
#root用戶下:
#編輯文件
vim /etc/rc.local
#最後添加以下代碼:linux
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi
#編輯配置文件redis
vim /etc/security/limits.confsql
#* - nofile 65535
+++++++++++++++++++++++++++++++mongodb
#都修改完成後 重啓虛擬機rebootshell
#vim
su - mongod
mongod --logpath=/data/mongodb/log/mongodb.log --dbpath=/data/mongodb/data/ --fork
#編輯配置文件數組
vim /data/mongodb/conf/mongo.confbash
systemLog: destination: file path: "/data/mongodb/log/mongodb.log" logAppend: true storage: journal: enabled: true dbPath: "/data/mongodb/data/" processManagement: fork: true net: port: 27017
#關閉 mongod -f /data/mongodb/conf/mongo.conf --shutdown #啓動: mongod -f /data/mongodb/conf/mongo.conf
1 help 2 KEYWORDS.help() 3 KEYWORDS.[TAB] 4 db.help() 5 db.stu.help() 6 show 7 use 8 db.help() 9 db.a.help() 10 rs.help() 11 sh.help()
方法1:架構
admin> use app switched to db app app> db.createCollection('a') { "ok" : 1 } app> db.createCollection('b') { "ok" : 1 } > show collections //查看當前數據下的全部集合 a b 或 > db.getCollectionNames() [ "a", "b" ]
方法2:當插入一個文檔的時候,一個集合就會自動建立。
> use oldboy > db.test.insert({name:"zhangsan"}) > db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"}) > show tables; > db.stu.insert({id:102,name:"lisi"}) > db.stu.insert({a:"b",c:"d"}) > db.stu.insert({a:1,c:2}) > db.stu.find({}).pretty() db.stu.find({id:101}).pretty(); { "_id" : ObjectId("5b470168cfdebc16a5a82a97"), "id" : 101, "name" : "zhangsan", "age" : 20, "gender" : "m" } use test db.createUser({ user: "test", pwd: "123", roles: [ { role: "readWrite", db: "oldboy" } ] }) use admin db.createUser({ user: "root", pwd: "root123", roles: [ { role: "root", db: "admin" } ] })
#配置文件中,加入如下配置
vim /data/mongodb/conf/mongo.conf
#在配置文件中添加兩行信息:
security:
authorization: enabled
mongo -utest -p123 10.0.0.200
mongo -uroot -proot123 10.0.0.200/admin 或者 mongo use admin db.auth('root','root123')
mongo -uroot -proot123 10.0.0.53/admin
db.system.users.find().pretty()
# mongo -uroot -proot123 10.0.0.53/admin use app db.dropUser("app03")
須要掌握:不一樣架構的鏈接方法
加上可選仲裁節點
延時節點:爲了邏輯錯誤
隱藏節點
越多從庫存在對主庫的壓力越大
一、規劃
三個以上的mongodb節點(或多實例)
多實例:
(1)多個端口:2801七、2801八、2801九、28020
(2)多套目錄:
mkdir -p /data/mongodb/28017/conf /data/mongodb/28017/data /data/mongodb/28017/log mkdir -p /data/mongodb/28018/conf /data/mongodb/28018/data /data/mongodb/28018/log mkdir -p /data/mongodb/28019/conf /data/mongodb/28019/data /data/mongodb/28019/log mkdir -p /data/mongodb/28020/conf /data/mongodb/28020/data /data/mongodb/28020/log
vim /data/mongodb/28017/conf/mongod.conf
systemLog: destination: file path: /data/mongodb/28017/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /data/mongodb/28017/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true processManagement: fork: true net: port: 28017 replication: oplogSizeMB: 2048 replSetName: my_repl
和redis的切分不同的是,MangoDB的切分是能夠由咱們控制的,也就是咱們能夠定製切分規則。。。。。。。。。。。
應該對熱點數據進行切分,熱點數據就是常常訪問的數據。也有熱點表,熱點表也是常常被訪問的表。
分片集羣的構成:
(祕書)
存放節點信息,分片策略。默認須要配置三個這種節點。
(老闆)
APP Router提供對外應用訪問。全部操做都經過mongos執行。
數據遷移
數據自動均衡(很耗IO性能)
(真正幹活的)
存儲應用數據記錄。真正的數據是存在底層的shard節點上。
分片鍵shard key
能設置實現預分片
。。。。。。。
分片鍵是不可變的
必須有索引
大小限制512bytes
不接受插入爲空,不然分片失效
MongoDB的邏輯結構
MySQL MongoDB
庫 庫
表 集合
列,數據行 文檔
mongodb複製集RS
基本原理:
基本構成是1主2從的結構,自帶互相監控投票機制(Raft(MongoDB) Paxos(mysql MGR 用的是變種))
若是發生主庫宕機,複製集內部會進行投票選舉,選擇一個新的主庫替代原有主庫對外提供服務。同時複製集會自動通知
客戶端程序,主庫已經發生切換了。應用就會鏈接到新的主庫。
一、規劃
三個以上的mongodb節點(或多實例)
多實例:
(1)多個端口:2801七、2801八、2801九、28020
(2)多套目錄:
mkdir -p /data/mongodb/28017/conf /data/mongodb/28017/data /data/mongodb/28017/log mkdir -p /data/mongodb/28018/conf /data/mongodb/28018/data /data/mongodb/28018/log mkdir -p /data/mongodb/28019/conf /data/mongodb/28019/data /data/mongodb/28019/log mkdir -p /data/mongodb/28020/conf /data/mongodb/28020/data /data/mongodb/28020/log
(3) 多套配置文件
/data/mongodb/28017/conf/mongod.conf /data/mongodb/28018/conf/mongod.conf /data/mongodb/28019/conf/mongod.conf /data/mongodb/28020/conf/mongod.conf
(4)配置文件內容
vim /data/mongodb/28017/conf/mongod.conf
systemLog: destination: file path: /data/mongodb/28017/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /data/mongodb/28017/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true processManagement: fork: true net: port: 28017 replication: oplogSizeMB: 2048 replSetName: my_repl
cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28018/conf/ cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28019/conf/ cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28020/conf/
sed 's#28017#28018#g' /data/mongodb/28018/conf/mongod.conf -i sed 's#28017#28019#g' /data/mongodb/28019/conf/mongod.conf -i sed 's#28017#28020#g' /data/mongodb/28020/conf/mongod.conf -i
------------------------------------------------------------
(5)啓動多個實例備用
mongod -f /data/mongodb/28017/conf/mongod.conf mongod -f /data/mongodb/28018/conf/mongod.conf mongod -f /data/mongodb/28019/conf/mongod.conf mongod -f /data/mongodb/28020/conf/mongod.conf
netstat -lnp|grep 280
二、配置複製集:
(1)1主2從,從庫普通從庫
mongo --port 28017 admin config = {_id: 'my_repl', members: [ {_id: 0, host: '10.0.0.200:28017'}, {_id: 1, host: '10.0.0.200:28018'}, {_id: 2, host: '10.0.0.200:28019'}] } rs.initiate(config)
三、複製集管理操做:
(1)查看複製集狀態:
rs.status(); //查看總體複製集狀態
rs.isMaster(); // 查看當前是不是主節點
(2)添加刪除節點
rs.add("ip:port"); // 新增從節點 rs.remove("ip:port"); // 刪除一個節點 rs.addArb("ip:port"); // 新增仲裁節點
--------------------------------
一、鏈接到主節點
[mongod@db03 ~]$ mongo --port 28017 admin
二、添加仲裁節點
my_repl:PRIMARY> rs.addArb("10.0.0.200:28020")
三、查看節點狀態
my_repl:PRIMARY> rs.isMaster() #輸出結果 { "hosts" : [ "10.0.0.200:28017", "10.0.0.200:28018", "10.0.0.200:28019" ], "arbiters" : [ "10.0.0.200:28020" ],
四、刪除一個節點
rs.remove("ip:port");
例子:
my_repl:PRIMARY> rs.remove("10.0.0.200:28019"); { "ok" : 1 } my_repl:PRIMARY> rs.isMaster()
5.新增從節點
rs.add("ip:port");
例子:
my_repl:PRIMARY> rs.add("10.0.0.200:28019") { "ok" : 1 } my_repl:PRIMARY> rs.isMaster()
---------------------------
注:
添加特殊節點時,
1>能夠在搭建過程當中設置特殊節點
2>能夠經過修改配置的方式將普通從節點設置爲特殊節點
/*找到須要改成延遲性同步的數組號*/;
特殊節點:
arbiter節點:主要負責選主過程當中的投票,可是不存儲任何數據,也不提供任何服務
hidden節點:隱藏節點,不參與選主,也不對外提供服務。
delay節點:延時節點,數據落後於主庫一段時間,由於數據是延時的,也不該該提供服務或參與選主,
因此一般會配合hidden(隱藏)
通常狀況下會將delay+hidden一塊兒配置使用
cfg=rs.conf() cfg.members[1].priority=0 cfg.members[1].hidden=true cfg.members[1].slaveDelay=120 rs.reconfig(cfg)
------------目前狀態-------------------
個人需求是:把28019設置爲hidden和delay
my_repl:PRIMARY> rs.status() { "members" : [ { "_id" : 0, "name" : "10.0.0.200:28017", }, { "_id" : 1, "name" : "10.0.0.200:28018", }, { "_id" : 3, "name" : "10.0.0.200:28020", }, { "_id" : 4, "name" : "10.0.0.200:28019", }
---------------------------
cfg=rs.conf() cfg.members[2].priority=0 cfg.members[2].hidden=true cfg.members[2].slaveDelay=120 rs.reconfig(cfg)
取消以上配置
cfg=rs.conf() cfg.members[3].priority=1 cfg.members[3].hidden=false cfg.members[3].slaveDelay=0 rs.reconfig(cfg)
配置成功後,經過如下命令查詢配置後的屬性
rs.conf();