replcation set (复制集)配置过程 --mongodb

一,配置规划

   复制集原理(
基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)  Paxos(mysql MGR 用的是变种))
如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知
客户端程序,主库已经发生切换了。应用就会连接到新的主库。

        )

  多端口化: 28017、28018、28019、28020

    配置多实例

 1 mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
 2 mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
 3 mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log
 4 mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
 5 
 6 
 7 多套配置文件
 8             
 9 /mongodb/28017/conf/mongod.conf
10 /mongodb/28018/conf/mongod.conf
11 /mongodb/28019/conf/mongod.conf
12 /mongodb/28020/conf/mongod.conf
13 
14 
15 
16 配置文件内容
17 
18 
19 vim /mongodb/28017/conf/mongod.conf
20 systemLog:
21   destination: file
22   path: /mongodb/28017/log/mongodb.log
23   logAppend: true
24 storage:
25   journal:
26     enabled: true
27   dbPath: /mongodb/28017/data
28   directoryPerDB: true
29   #engine: wiredTiger
30   wiredTiger:
31     engineConfig:
32       cacheSizeGB: 1
33       directoryForIndexes: true
34     collectionConfig:
35       blockCompressor: zlib
36     indexConfig:
37       prefixCompression: true
38 processManagement:
39   fork: true
40 net:
41   port: 28017
42 replication:
43   oplogSizeMB: 2048
44   replSetName: my_repl
45 
46         
47 
48 cp  /mongodb/28017/conf/mongod.conf  /mongodb/28018/conf/
49 cp  /mongodb/28017/conf/mongod.conf  /mongodb/28019/conf/
50 cp  /mongodb/28017/conf/mongod.conf  /mongodb/28020/conf/
51 
52 sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i
53 sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i
54 sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i
View Code

      启动所有实例 

1 mongod -f /mongodb/28017/conf/mongod.conf
2 mongod -f /mongodb/28018/conf/mongod.conf
3 mongod -f /mongodb/28019/conf/mongod.conf
4 mongod -f /mongodb/28020/conf/mongod.conf

  

  

二, 复制集配置

   一主两从      

mongo --port 28017 admin

    

1 config = {_id: 'my_repl', members: [
2                           {_id: 0, host: '10.0.0.53:28017'},
3                           {_id: 1, host: '10.0.0.53:28018'},
4                           {_id: 2, host: '10.0.0.53:28019'}]
5           }

  

 

  重置所有

   1 rs.initiate(config)  

   

 

   查看复制集状态

    1 rs.status(); 

    

    重新输入命令就能出来谁是主从了

 

 

  一主一从一arb

      搭建前添加节点  

1 mongo -port 28017 admin
2 
3 config = {_id: 'my_repl', members: [
4                           {_id: 0, host: '10.0.0.51:28017'},
5                           {_id: 1, host: '10.0.0.51:28018'},
6                           {_id: 2, host: '10.0.0.51:28019',"arbiterOnly":true}]
7           }
8                    
9 rs.initiate(config) 
View Code 

      搭建后添加节点

              删除节点

my_repl:PRIMARY> rs.remove("10.0.0.53:28019")

          添加ARB节点

s.addArb("10.0.0.53:28019")

         ____ 添加从节点______

my_repl:PRIMARY> rs.add("10.0.0.53:28019");

      添加ARB节点后查看

        

三, 故障查看

      故障主节点宕机:

      

      查看状态:

 1 [mongod@db03 ~]$ mongo --port 28018 admin
 2 MongoDB shell version: 3.2.16
 3 connecting to: 127.0.0.1:28018/admin
 4 Server has startup warnings:
 5 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten]
 6 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
 7 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
 8 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten]
 9 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
10 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
11 2018-12-03T15:15:33.679+0800 I CONTROL  [initandlisten]
12 my_repl:PRIMARY> db.stats()
13 {
14     "db" : "admin",
15     "collections" : 0,
16     "objects" : 0,
17     "avgObjSize" : 0,
18     "dataSize" : 0,
19     "storageSize" : 0,
20     "numExtents" : 0,
21     "indexes" : 0,
22     "indexSize" : 0,
23     "fileSize" : 0,
24     "ok" : 1
25 }
26 my_repl:PRIMARY> rs.status()
27 {
28     "set" : "my_repl",
29     "date" : ISODate("2018-12-03T07:36:43.228Z"),
30     "myState" : 1,
31     "term" : NumberLong(2),
32     "heartbeatIntervalMillis" : NumberLong(2000),
33     "members" : [
34         {
35             "_id" : 0,
36             "name" : "10.0.0.53:28017",
37             "health" : 0,
38             "state" : 8,
39             "stateStr" : "(not reachable/healthy)",
40             "uptime" : 0,
41             "optime" : {
42                 "ts" : Timestamp(0, 0),
43                 "t" : NumberLong(-1)
44             },
45             "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
46             "lastHeartbeat" : ISODate("2018-12-03T07:36:42.063Z"),
47             "lastHeartbeatRecv" : ISODate("2018-12-03T07:35:31.656Z"),
48             "pingMs" : NumberLong(0),
49             "lastHeartbeatMessage" : "Connection refused",
50             "configVersion" : -1
51         },
52         {
53             "_id" : 1,
54             "name" : "10.0.0.53:28018",
55             "health" : 1,
56             "state" : 1,
57             "stateStr" : "PRIMARY",
58             "uptime" : 1270,
59             "optime" : {
60                 "ts" : Timestamp(1543822542, 2),
61                 "t" : NumberLong(2)
62             },
63             "optimeDate" : ISODate("2018-12-03T07:35:42Z"),
64             "infoMessage" : "could not find member to sync from",
65             "electionTime" : Timestamp(1543822542, 1),
66             "electionDate" : ISODate("2018-12-03T07:35:42Z"),
67             "configVersion" : 3,
68             "self" : true
69         },
70         {
71             "_id" : 2,
72             "name" : "10.0.0.53:28019",
73             "health" : 1,
74             "state" : 7,
75             "stateStr" : "ARBITER",
76             "uptime" : 267,
77             "lastHeartbeat" : ISODate("2018-12-03T07:36:42.057Z"),
78             "lastHeartbeatRecv" : ISODate("2018-12-03T07:36:42.619Z"),
79             "pingMs" : NumberLong(0),
80             "syncingTo" : "10.0.0.53:28018",
81             "configVersion" : 3
82         }
83     ],
84     "ok" : 1
85 }
86 my_repl:PRIMARY>
View Code

      

      启动故障节点

1 [mongod@db03 ~]$ mongod -f /mongodb/28017/conf/mongod.conf
2 about to fork child process, waiting until server is ready for connections.
3 forked process: 3669
4 child process started successfully, parent exiting
View Code

      

      进入主节点再次查看状态

      

      检测到存活自动生成为从节点

 

四, 特殊节点配置

   添加隐藏节点

        rs.conf()

            "_id" : 0,   ---------成员号
            "host" : "10.0.0.53:28017", ----节点信息
            "arbiterOnly" : false, ----  是否为仲裁节点
            "buildIndexes" : true, 
            "hidden" : false,  --------是否为隐蔽节点
            "priority" : 1,  ----------------选主权重
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),  ------延时的时间
            "votes" : 1

        首先添加一个新的节点  

my_repl:PRIMARY> rs.add("10.0.0.53:28020")
{ "ok" : 1 }

        配置隐藏节点   

 1 my_repl:PRIMARY> cfg=rs.conf()
 2 {
 3     "_id" : "my_repl",
 4     "version" : 4,
 5     "protocolVersion" : NumberLong(1),
 6     "members" : [
 7         {
 8             "_id" : 0,
 9             "host" : "10.0.0.53:28017",
10             "arbiterOnly" : false,
11             "buildIndexes" : true,
12             "hidden" : false,
13             "priority" : 1,
14             "tags" : {
15 
16             },
17             "slaveDelay" : NumberLong(0),
18             "votes" : 1
19         },
20         {
21             "_id" : 1,
22             "host" : "10.0.0.53:28018",
23             "arbiterOnly" : false,
24             "buildIndexes" : true,
25             "hidden" : false,
26             "priority" : 1,
27             "tags" : {
28 
29             },
30             "slaveDelay" : NumberLong(0),
31             "votes" : 1
32         },
33         {
34             "_id" : 2,
35             "host" : "10.0.0.53:28019",
36             "arbiterOnly" : true,
37             "buildIndexes" : true,
38             "hidden" : false,
39             "priority" : 1,
40             "tags" : {
41 
42             },
43             "slaveDelay" : NumberLong(0),
44             "votes" : 1
45         },
46         {
47             "_id" : 3,
48             "host" : "10.0.0.53:28020",
49             "arbiterOnly" : false,
50             "buildIndexes" : true,
51             "hidden" : false,
52             "priority" : 1,
53             "tags" : {
54 
55             },
56             "slaveDelay" : NumberLong(0),
57             "votes" : 1
58         }
59     ],
60     "settings" : {
61         "chainingAllowed" : true,
62         "heartbeatIntervalMillis" : 2000,
63         "heartbeatTimeoutSecs" : 10,
64         "electionTimeoutMillis" : 10000,
65         "getLastErrorModes" : {
66 
67         },
68         "getLastErrorDefaults" : {
69             "w" : 1,
70             "wtimeout" : 0
71         },
72         "replicaSetId" : ObjectId("5c04d9f3892649e9da38101f")
73     }
74 }
75 my_repl:PRIMARY> cfg.members[3].priority=0
76 0
77 my_repl:PRIMARY> cfg.members[3].hidden=true
78 true
79 my_repl:PRIMARY> cfg.members[3].slaveDelay=120
80 120
81 my_repl:PRIMARY> rs.reconfig(cfg)
82 { "ok" : 1 }
83 my_repl:PRIMARY>
View Code

 

        配置取消出错后恢复

1 cfg=rs.conf() 
2 cfg.members[3].priority=1
3 cfg.members[3].hidden=false
4 cfg.members[3].slaveDelay=0
5 rs.reconfig(cfg)    
View Code

 

 

 

五, 其他

 1 --查看副本集的配置信息
 2 admin> rs.config()
 3 或者
 4 admin> rs.conf()
 5 
 6 --查看副本集各成员的状态
 7 admin> rs.status()
 8 ++++++++++++++++++++++++++++++++++++++++++++++++
 9 --副本集角色切换(不要人为随便操作)
10 admin> rs.stepDown()
11 注:
12 admin> rs.freeze(300) //锁定从,使其不会转变成主库
13 freeze()和stepDown单位都是秒。
14 +++++++++++++++++++++++++++++++++++++++++++++
15 --设置副本节点可读:在副本节点执行
16 admin> rs.slaveOk()
17 
18 eg:
19 admin> use app
20 switched to db app
21 app> db.createCollection('a')
22 { "ok" : 0, "errmsg" : "not master", "code" : 10107 }
23 
24 --查看副本节点(监控主从延时)
25 admin> rs.printSlaveReplicationInfo()
26 source: 192.168.1.22:27017
27     syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
28     0 secs (0 hrs) behind the primary
29     
View Code

 

 

        

posted on 2018-12-03 15:40  kingle-l  阅读(431)  评论(0编辑  收藏  举报

levels of contents