脚本是日常维护使用js脚本。适用于集群数目很多,手工操作很麻烦费时,所以写了自动脚本,在每个集群自动运行即可。
功能描述:检查本机的状态(主,从),确保从机始终从主机同步数据。
适用范围:repli set 副本集模式
运行脚本:mongo路径/mongo 10.0.0.1:30000 syncfrom.js
syncfrom.js 如下
1 /*
2 * check rs.status, replSetSyncFrom to Primary
3 *
4 * 20131216
5 */
6 function sleep(seconds) {
7 this.date = Math.round(new Date().getTime()/1000);
8 while(1) {
9 if(Math.round(new Date().getTime()/1000) - this.date >= seconds) break;
10 }
11 return true;
12 }
13 var status=rs.status();
14 print(status["myState"]);
15 var mystatus=status["myState"];
16 var syncingTo=status["syncingTo"];
17 print('syncto '+syncingTo);
18 members=status["members"];
19 if(mystatus==1)//primary
20 {
21 print('my status is primary... no need to replSetSyncFrom')
22 }
23 else if(mystatus==2)//secondary
24 {
25 print('my status is secondary...will start execute commmand "replSetSyncFrom" ')
26 for(var i=0;i<members.length;i++)
27 {
28 if(members[i]["stateStr"]=="PRIMARY")
29 {
30 priname=members[i]["name"]
31 print("primary: "+priname)
32 if(syncingTo==priname)
33 {
34 print("the host of SyncFrom is already Primary, no need to change")
35 }
36 else
37 {
38 print("start command...replSetSyncFrom")
39 db.adminCommand({replSetSyncFrom:priname})
40 sleep(5);
41 printjson(rs.status())
42 }
43 }
44 }
45 }
46 }