knight_ka | 生活及学习笔记

Mongodb复制集创建

127.0.0.1本机启动三个mongodb 配置副本集:

1
2
3
4
5
./mongod --dbpath=/data/mongo/db --fork --port 11111 --logpath=/data/mongo/logs/work.log --logappend --replSet qsbtest
./mongod --dbpath=/data/mongo/db2 --fork --port 22222 --logpath=/data/mongo/logs2/work.log --logappend --replSet qsbtest
./mongod --dbpath=/data/mongo/db3 --fork --port 33333 --logpath=/data/mongo/logs3/work.log --logappend --replSet qsbtest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
> config_replica={"_id":"qsbtest","members":[
... {"_id":1,
... "host":"127.0.0.1:11111",
... "priority":1
... },
... {"_id":2,
... "host":"127.0.0.1:22222",
... "priority":1
... },
... {"_id":3,
... "host":"127.0.0.1:33333",
... "priority":1
... }
... ]}
{
"_id" : "qsbtest",
"members" : [
{
"_id" : 1,
"host" : "127.0.0.1:11111",
"priority" : 1
},
{
"_id" : 2,
"host" : "127.0.0.1:22222",
"priority" : 1
},
{
"_id" : 3,
"host" : "127.0.0.1:33333",
"priority" : 1
}
]
}
1
2
3
4
5
6
7
> rs.initiate(config_replica)
{
"ok" : 0,
"errmsg" : "'127.0.0.1:22222' has data already, cannot initiate set.",
"code" : 110,
"codeName" : "CannotInitializeNodeWithData"
}

登入任意一台机器的MongoDB执行:因为是全新的副本集所以可以任意进入一台执行;要是有一台有数据,则需要在有数据上执行;要多台有数据则不能初始化。

“_id”: 副本集的名称

“members”: 副本集的服务器列表

“_id”: 服务器的唯一ID

“host”: 服务器主机

“priority”: 是优先级,默认为1,优先级0为被动节点,不能成为活跃节点。优先级不位0则按照有大到小选出活跃节点。

“arbiterOnly”: 仲裁节点,只参与投票,不接收数据,也不能成为活跃节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
> rs.initiate(config_replica)
{ "ok" : 1 }
qsbtest:OTHER>
qsbtest:SECONDARY>
qsbtest:SECONDARY> rs.status()
{
"set" : "qsbtest",
"date" : ISODate("2017-03-27T02:31:35.644Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 1,
"name" : "127.0.0.1:11111",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 28,
"optime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-27T02:31:27Z"),
"optimeDurableDate" : ISODate("2017-03-27T02:31:27Z"),
"lastHeartbeat" : ISODate("2017-03-27T02:31:35.054Z"),
"lastHeartbeatRecv" : ISODate("2017-03-27T02:31:34.277Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "127.0.0.1:33333",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "127.0.0.1:22222",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 28,
"optime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-27T02:31:27Z"),
"optimeDurableDate" : ISODate("2017-03-27T02:31:27Z"),
"lastHeartbeat" : ISODate("2017-03-27T02:31:35.054Z"),
"lastHeartbeatRecv" : ISODate("2017-03-27T02:31:34.091Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "127.0.0.1:33333",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "127.0.0.1:33333",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1170,
"optime" : {
"ts" : Timestamp(1490581887, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-27T02:31:27Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1490581877, 1),
"electionDate" : ISODate("2017-03-27T02:31:17Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
qsbtest:PRIMARY>

副本集维护

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
1.添加节点到当前副本集:
rs.add("192.168.200.25:27017")
2.将某个节点移除副本集:
rs.remove("192.168.200.25:27017”)
3.查看复制情况:
qsbtest:PRIMARY> db.printSlaveReplicationInfo()
source: 127.0.0.1:11111
syncedTo: Mon Mar 27 2017 10:36:47 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 127.0.0.1:22222
syncedTo: Mon Mar 27 2017 10:36:47 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source:从库的ip和端口。
syncedTo:目前的同步情况,以及最后一次同步的时间。
从上面可以看出,在数据库内容不变的情况下他是不同步的,数据库变动就会马上同步。
4.查看副本集状态:
rs.status()
health:1 //1表明状态是正常,0表明异常
state:1 // 1表明是primary,2表明是slave,即做备份的机器
qsbtest:PRIMARY> rs.isMaster()
{
"hosts" : [
"127.0.0.1:11111",
"127.0.0.1:22222",
"127.0.0.1:33333"
],
"setName" : "qsbtest",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "127.0.0.1:33333",
"me" : "127.0.0.1:33333",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1490582127, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2017-03-27T02:35:27Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2017-03-27T02:35:35.631Z"),
"maxWireVersion" : 5,
"minWireVersion" : 0,
"readOnly" : false,
"ok" : 1
}
5.副本集节点参数修改:
mmm:PRIMARY> cfg=rs.conf() #
{
"_id" : "mmm",
"version" : 4,
"members" : [
{
"_id" : 1,
"host" : "192.168.200.252:27017"
},
{
"_id" : 2,
"host" : "192.168.200.245:27017"
},
{
"_id" : 3,
"host" : "192.168.200.25:27017"
}
]
}
mmm:PRIMARY> cfg.members[1].priority=2 #修改priority
2
mmm:PRIMARY> rs.reconfig(cfg) #重新加载配置文件,强制了副本集进行一次选举,优先级高的成为Primary。在这之间整个集群的所有节点都是secondary
6:副本集的配置
rs.conf()/rs.config()
MongoDB数据恢复
mongodb使用 mongorestore 命令来恢复备份的数据。
语法
mongorestore命令脚本语法如下:
>mongorestore -h <hostname><:port> -d dbname <path>
* --host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
* --db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
* --drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
* <path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
* --dir:
指定备份的目录
你不能同时指定 <path> 和 --dir 选项。

MongoDB数据备份

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

mongodump命令可以通过参数指定导出的数据量级转存的服务器。

语法

mongodump命令脚本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory

  • -h:
    MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
  • -d:
    需要备份的数据库实例,例如:test

  • -o:
    备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

mongodb参数列表
Mongodb启动命令mongod参数说明

mongod的主要参数有:

基本配置


--quiet    # 安静输出
--port arg    # 指定服务端口号,默认端口27017
--bind_ip arg    # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg    # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend    # 使用追加的方式写日志
--pidfilepath arg    # PID File 的完整路径,如果没有设置,则没有PID文件
--keyFile arg    # 集群的私钥的完整路径,只对于Replica Set 架构有效
--unixSocketPrefix arg    # UNIX域套接字替代目录,(默认为 /tmp)
--fork    # 以守护进程的方式运行MongoDB,创建服务器进程
--auth    # 启用验证
--cpu    # 定期显示CPU的CPU利用率和iowait
--dbpath arg    # 指定数据库路径
--diaglog arg    # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb    # 设置每个数据库将被保存在一个单独的目录
--journal    # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg    # 启用日志诊断选项
--ipv6    # 启用IPv6选项
--jsonp    # 允许JSONP形式通过HTTP访问(有安全影响)
--maxConns arg    # 最大同时连接数 默认2000
--noauth    # 不启用验证
--nohttpinterface    # 关闭http接口,默认关闭27018端口访问
--noprealloc    # 禁用数据文件预分配(往往影响性能)
--noscripting    # 禁用脚本引擎
--notablescan    # 不允许表扫描
--nounixsocket    # 禁用Unix套接字监听
--nssize arg (=16)    # 设置信数据库.ns文件大小(MB)
--objcheck    # 在收到客户数据,检查的有效性,
--profile arg    # 档案参数 0=off 1=slow, 2=all
--quota    # 限制每个数据库的文件数,设置默认为8
--quotaFiles arg    # number of files allower per db, requires --quota
--rest    # 开启简单的rest API
--repair    # 修复所有数据库run repair on all dbs
--repairpath arg    # 修复库生成的文件的目录,默认为目录名称dbpath
--slowms arg (=100)    # value of slow for profile and console log
--smallfiles    # 使用较小的默认文件
--syncdelay arg (=60)    # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo    # 打印一些诊断系统信息
--upgrade    # 如果需要升级数据库
 * Replicaton 参数

--fastsync    # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync    # 如果从库与主库同步数据差得多,自动重新同步,
--oplogSize arg    # 设置oplog的大小(MB)
  • 主/从参数

--master    # 主库模式
--slave    # 从库模式
--source arg    # 从库 端口号
--only arg    # 指定单一的数据库复制
--slavedelay arg    # 设置从库同步主库的延迟时间
  • Replica set(副本集)选项:

--replSet arg    # 设置副本集名称
  • Sharding(分片)选项

--configsvr    # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr    # 声明这是一个集群的分片,默认端口27018
--noMoveParanoia    # 关闭偏执为moveChunk数据保存

上述参数都可以写入 mongod.conf 配置文档里例如:

1
2
3
4
5
6
7
8
9
10
11
dbpath = /data/mongodb
logpath = /data/mongodb/mongodb.log
logappend = true
port = 27017
fork = true
auth = true

e.g:./mongod -shardsvr -replSet shard1 -port 16161 -dbpath /data/mongodb/data/shard1a -oplogSize 100 -logpath /data/mongodb/logs/shard1a.log -logappend -fork -rest

http://www.cnblogs.com/ningvsban/p/3394103.html