21.36 mongodb分片介紹

21.36 mongodb分片介紹

  • 分片就是將數據庫進行拆分,將大型集合分隔到不一樣服務器上。好比,原本100G的數據,能夠分割成10份存儲到10臺服務器上,這樣每臺機器只有10G的數據。
  • 經過一個mongos的進程(路由)實現分片後的數據存儲與訪問,也就是說mongos是整個分片架構的核心,對客戶端而言是不知道是否有分片的,客戶端只須要把讀寫操做轉達給mongos便可。
  • 雖然分片會把數據分隔到不少臺服務器上,可是每個節點都是須要有一個備用角色的,這樣能保證數據的高可用。
  • 當系統須要更多空間或者資源的時候,分片可讓咱們按需方便擴展,只須要把mongodb服務的機器加入到分片集羣中便可

MongoDB分片架構圖:
mark
MongoDB分片相關概念:linux

  • mongos: 數據庫集羣請求的入口,全部的請求都經過mongos進行協調,不須要在應用程序添加一個路由選擇器,mongos本身就是一個請求分發中心,它負責把對應的數據請求請求轉發到對應的shard服務器上。在生產環境一般有多mongos做爲請求的入口,防止其中一個掛掉全部的mongodb請求都沒有辦法操做。
  • config server: 配置服務器,存儲全部數據庫元信息(路由、分片)的配置。mongos自己沒有物理存儲分片服務器和數據路由信息,只是緩存在內存裏,配置服務器則實際存儲這些數據。mongos第一次啓動或者關掉重啓就會從 config server 加載配置信息,之後若是配置服務器信息變化會通知到全部的 mongos 更新本身的狀態,這樣 mongos 就能繼續準確路由。在生產環境一般有多個 config server 配置服務器,由於它存儲了分片路由的元數據,防止數據丟失!
  • shard: 存儲了一個集合部分數據的MongoDB實例,每一個分片是單獨的mongodb服務或者副本集,在生產環境中,全部的分片都應該是副本集。

21.37 mongodb分片搭建(上)

這一小節搭建了config servers
分片搭建 -服務器規劃:mongodb

  • 三臺機器 A B C
  • A搭建:mongos、config server、副本集1主節點、副本集2仲裁、副本集3從節點
  • B搭建:mongos、config server、副本集1從節點、副本集2主節點、副本集3仲裁
  • C搭建:mongos、config server、副本集1仲裁、副本集2從節點、副本集3主節點
  • 端口分配:mongos 20000、config 21000、副本集1 2700一、副本集2 2700二、副本集3 27003
  • 三臺機器所有關閉firewalld服務和selinux,或者增長對應端口的規則

分片搭建 – 建立目錄:shell

  • 分別在三臺機器上建立各個角色所須要的目錄
  • mkdir -p /data/mongodb/mongos/log
  • mkdir -p /data/mongodb/config/{data,log}
  • mkdir -p /data/mongodb/shard1/{data,log}
  • mkdir -p /data/mongodb/shard2/{data,log}
  • mkdir -p /data/mongodb/shard3/{data,log}

分片搭建–config server配置:數據庫

  • mongodb3.4版本之後須要對config server建立副本集
  • 添加配置文件(三臺機器都操做)
  • mkdir /etc/mongod/
  • vim /etc/mongod/config.conf //加入以下內容
    pidfilepath = /var/run/mongodb/configsrv.pid
    dbpath = /data/mongodb/config/data
    logpath = /data/mongodb/config/log/congigsrv.log
    logappend = true
    bind_ip = 0.0.0.0
    port = 21000
    fork = true
    configsvr = true #declare this is a config db of a cluster;
    replSet=configs #副本集名稱
    maxConns=20000 #設置最大鏈接數
  • 啓動三臺機器的config server
  • mongod -f /etc/mongod/config.conf //三臺機器都要操做
  • 登陸任意一臺機器的21000端口,初始化副本集
    mongo --port 21000
    use admin
    config = { _id: "configs", members: [ {_id : 0, host : "192.168.133.130:21000"},{_id : 1, host : "192.168.133.132:21000"},{_id : 2, host : "192.168.133.133:21000"}] }
    rs.initiate(config)
    { "ok" : 1 }
[root@Dasoncheng ~]# mkdir -p /data/mongodb/mongos/log
[root@Dasoncheng ~]# mkdir -p /data/mongodb/config/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard1/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard2/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard3/{data,log}
##分別在三臺機器上建立各個角色所須要的目錄;
[root@Dasoncheng ~]# mkdir /etc/mongod/
[root@Dasoncheng ~]# vim /etc/mongod/config.conf   
##建立config-servers的配置文件夾 及配置文件;下面是編輯內容
[root@Dasoncheng ~]# cat /etc/mongod/config.conf 
pidfilepath = /var/run/mongodb/configsrv.pid
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 192.168.60.11
port = 21000
fork = true
configsvr = true #declare this is a config db of a cluster;
replSet=configs #副本集名稱
maxConns=20000 #設置最大鏈接數
[root@Dasoncheng ~]# mongod -f /etc/mongod/config.conf  
##啓動config-server,三臺機器都啓動
about to fork child process, waiting until server is ready for connections.
forked process: 2749
child process started successfully, parent exiting
[root@Dasoncheng ~]# ps aux |grep mongod
mongod     2292  1.7  9.4 1524868 94180 ?       Sl   08:03   1:54 /usr/bin/mongod -f /etc/mongod.conf
root       2749  5.3  4.2 1082412 42464 ?       Sl   09:52   0:00 mongod -f /etc/mongod/config.conf
root       2783  0.0  0.0 112664   964 pts/1    S+   09:53   0:00 grep --color=auto mongod
[root@Dasoncheng ~]# netstat -lntp |grep mongod
tcp        0      0 192.168.60.11:21000     0.0.0.0:*               LISTEN      2749/mongod         
tcp        0      0 192.168.60.11:27017     0.0.0.0:*               LISTEN      2292/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      2292/mongod 
[root@Dasoncheng ~]# mongo --host 192.168.60.11 --port 21000   ##登陸注意;
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.60.11:21000/
MongoDB server version: 3.4.9
> use admin
switched to db admin
> config = { _id: "configs", members: [ {_id : 0, host : "192.168.60.11:21000"},{_id : 1, host : "192.168.60.12:21000"},{_id : 2, host : "192.168.60.13:21000"}] }
{
	"_id" : "configs",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.60.11:21000"
		},
		{
			"_id" : 1,
			"host" : "192.168.60.12:21000"
		},
		{
			"_id" : 2,
			"host" : "192.168.60.13:21000"
		}
	]
}
> rs.initiate(config)
{ "ok" : 1 }
configs:SECONDARY> rs.status()
{
	"set" : "configs",
	"date" : ISODate("2017-10-20T01:56:12.059Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"configsvr" : true,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.60.11:21000",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 198,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1508464562, 1),
			"electionDate" : ISODate("2017-10-20T01:56:02Z"),
			"configVersion" : 1,
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "192.168.60.12:21000",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 20,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"optimeDurableDate" : ISODate("2017-10-20T01:56:04Z"),
			"lastHeartbeat" : ISODate("2017-10-20T01:56:10.920Z"),
			"lastHeartbeatRecv" : ISODate("2017-10-20T01:56:08.588Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "192.168.60.11:21000",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.60.13:21000",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 20,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"optimeDurableDate" : ISODate("2017-10-20T01:56:04Z"),
			"lastHeartbeat" : ISODate("2017-10-20T01:56:10.920Z"),
			"lastHeartbeatRecv" : ISODate("2017-10-20T01:56:11.495Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "192.168.60.11:21000",
			"configVersion" : 1
		}
	],
	"ok" : 1
}
相關文章
相關標籤/搜索