mogodb replication set复制集
replication set复制集
简要命令
replication set复制集
replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性. Replication set 设置全过程
0:创建目录
mkdir -p /data/r0 /data/r1 /data/r2 1:启动3个实例,且声明实例属于某复制集
./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log
./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log
./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log 2:配置
rsconf = {
_id:'rsa',
members:
[
{_id:0,
host:'192.168.1.201:27017'
}
]
} 3: 根据配置做初始化
rs.initiate(rsconf); 4: 添加节点
rs.add('192.168.1.201:27018');
rs.add('192.168.1.201:27019'); 5:查看状态
rs.status(); 6:删除节点
rs.remove('192.168.1.201:27019'); 7:主节点插入数据
>use test
>db.user.insert({uid:1,name:'lily'}); 8:连接secondary查询同步情况
./bin/mongo --port 27019
>use test
>show tables rsa:SECONDARY> show tables;
Sat Aug 17 16:03:55.786 JavaScript execution failed: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } 8.1 出现上述错误,是因为slave默认不许读写
>rs.slaveOk();
>show tables #看到与primary 一致的数据
详细过程
0:创建目录
mkdir -p /data/r0 /data/r1 /data/r2 [mongod@mcw01 ~]$ ps -ef|grep mongo
root 16595 16566 0 10:57 pts/0 00:00:00 su - mongod
mongod 16596 16595 0 10:57 pts/0 00:00:02 -bash
mongod 16765 1 1 13:28 ? 00:02:13 mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
mongod 17150 16596 0 16:05 pts/0 00:00:00 ps -ef
mongod 17151 16596 0 16:05 pts/0 00:00:00 grep --color=auto mongo
[mongod@mcw01 ~]$ kill -2 16765
[mongod@mcw01 ~]$ ps -ef|grep mongo
root 16595 16566 0 10:57 pts/0 00:00:00 su - mongod
mongod 16596 16595 0 10:57 pts/0 00:00:02 -bash
mongod 17153 16596 0 16:05 pts/0 00:00:00 ps -ef
mongod 17154 16596 0 16:05 pts/0 00:00:00 grep --color=auto mongo
[mongod@mcw01 ~]$ ls /mongodb/
bin conf data log
[mongod@mcw01 ~]$ mv /mongodb/* /tmp/
[mongod@mcw01 ~]$ mkdir /mongodb/m1{7..9}
[mongod@mcw01 ~]$ ls /mongodb/
m17 m18 m19
[mongod@mcw01 ~]$ mkdir /mongodb/mlog
[mongod@mcw01 ~]$ ls /mongodb/
m17 m18 m19 mlog
[mongod@mcw01 ~]$
[mongod@mcw01 ~]$ mongod #刚刚把命令都移走了
-bash: /mongodb/bin/mongod: No such file or directory
[mongod@mcw01 ~]$ cp -a /tmp/bin/ /mongodb/ #把命令再移动回来
[mongod@mcw01 ~]$ ls /mongodb/
bin m17 m18 m19 mlog
1:启动3个实例,且声明实例属于某复制集
./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log
./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log
./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log 这里是测试,为了启动快才添加--smallfiles 的吧。如果实际使用的时候,应该不需要加这个参数。三个都指定同一个复制集,起名为rs2. [mongod@mcw01 ~]$ mongod --dbpath /mongodb/m17 --logpath /mongodb/mlog/m17.log --fork --port 27017 --replSet rs2 --smallfiles
about to fork child process, waiting until server is ready for connections.
forked process: 17206
child process started successfully, parent exiting
[mongod@mcw01 ~]$ mongod --dbpath /mongodb/m18 --logpath /mongodb/mlog/m18.log --fork --port 27018 --replSet rs2 --smallfiles
about to fork child process, waiting until server is ready for connections.
forked process: 17234
child process started successfully, parent exiting
[mongod@mcw01 ~]$ mongod --dbpath /mongodb/m19 --logpath /mongodb/mlog/m19.log --fork --port 27019 --replSet rs2 --smallfiles
about to fork child process, waiting until server is ready for connections.
forked process: 17257
child process started successfully, parent exiting
[mongod@mcw01 ~]$
[mongod@mcw01 ~]$ ps -ef|grep -v grep |grep dbpath #查看,已经启动三个进程,都是同一个复制集
mongod 17206 1 1 16:15 ? 00:00:04 mongod --dbpath /mongodb/m17 --logpath /mongodb/mlog/m17.log --fork --port 27017 --replSet rs2 --smallfiles
mongod 17234 1 1 16:18 ? 00:00:01 mongod --dbpath /mongodb/m18 --logpath /mongodb/mlog/m18.log --fork --port 27018 --replSet rs2 --smallfiles
mongod 17257 1 2 16:18 ? 00:00:01 mongod --dbpath /mongodb/m19 --logpath /mongodb/mlog/m19.log --fork --port 27019 --replSet rs2 --smallfiles
[mongod@mcw01 ~]$
2:配置
rsconf = {
_id:'rsa', #复制集名称
members: #有哪些成员
[
{_id:0,
host:'192.168.1.201:27017'
}
]
} var rsconf = {
_id:'rs2',
members:
[
{_id:0,
host:'10.0.0.11:27017'
},
{_id:1,
host:'10.0.0.11:27018'
},
{_id:2,
host:'10.0.0.11:27019'
}
]
} 随便找一个节点进入,
[mongod@mcw01 ~]$ mongo --port 27017
.......
> #生成复制集配置变量
> var rsconf = {
... _id:'rs2',
... members:
... [
... {_id:0,
... host:'10.0.0.11:27017'
... },
... {_id:1,
... host:'10.0.0.11:27018'
... },
... {_id:2,
... host:'10.0.0.11:27019'
... }
... ]
... }
> printjson(rsconf) #打印一下变量
{
"_id" : "rs2",
"members" : [
{
"_id" : 0,
"host" : "10.0.0.11:27017"
},
{
"_id" : 1,
"host" : "10.0.0.11:27018"
},
{
"_id" : 2,
"host" : "10.0.0.11:27019"
}
]
}
>
3: 根据配置做初始化
rs.initiate(rsconf); > #根据生成的复制集配置变量,做初始化。初始化完后直接进入不同的命令行前面的信息中rs2副本名称:other>
> rs.initiate(rsconf);
{ "ok" : 1 }
rs2:OTHER>
rs2:OTHER> rs.status(); #执行命令查看复制集状态,
{
"set" : "rs2", #复制集名称
"date" : ISODate("2022-03-04T08:31:33.312Z"),
"myState" : 1, #状态
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [ #有哪些成员
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", #这个成员是主,其它两个不是,是SECONDARY
"uptime" : 976,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1646382581, 1),
"electionDate" : ISODate("2022-03-04T08:29:41Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "10.0.0.11:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 123,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:31:33.193Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:31:31.611Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "10.0.0.11:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 123,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:31:33.193Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:31:31.663Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27018",
"configVersion" : 1
}
],
"ok" : 1
}
rs2:PRIMARY> #执行完查看状态的命令后,这里就变成了:复制集名称:主> 我们推出来进入备的
[mongod@mcw01 ~]$ mongo --port 27018
......
rs2:SECONDARY> #可以看到这里是复制集名称:SECONDARY> 这样就已经配置好复制集了
4: 添加节点
rs.add('192.168.1.201:27018');
rs.add('192.168.1.201:27019'); 根据后面删除的方法,已经删除了两个结点,只剩一个节点了。下面我们再将节点添加上
rs2:PRIMARY> rs.remove('10.0.0.11:27018')
{ "ok" : 1 }
rs2:PRIMARY> rs.status();
{
"set" : "rs2",
"date" : ISODate("2022-03-04T08:43:55.005Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1718,
"optime" : {
"ts" : Timestamp(1646383431, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:43:51Z"),
"electionTime" : Timestamp(1646382581, 1),
"electionDate" : ISODate("2022-03-04T08:29:41Z"),
"configVersion" : 3,
"self" : true
}
],
"ok" : 1
}
rs2:PRIMARY>
rs2:PRIMARY> rs.add('10.0.0.11:27018') #重新添加成员
{ "ok" : 1 }
rs2:PRIMARY> rs.add('10.0.0.11:27019')
{ "ok" : 1 }
rs2:PRIMARY> rs.status();
{
"set" : "rs2",
"date" : ISODate("2022-03-04T08:46:07.840Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1850,
"optime" : {
"ts" : Timestamp(1646383557, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:45:57Z"),
"electionTime" : Timestamp(1646382581, 1),
"electionDate" : ISODate("2022-03-04T08:29:41Z"),
"configVersion" : 5,
"self" : true
},
{
"_id" : 1,
"name" : "10.0.0.11:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 23,
"optime" : {
"ts" : Timestamp(1646383557, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:45:57Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:46:06.067Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:46:06.914Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27017",
"configVersion" : 5
},
{
"_id" : 2,
"name" : "10.0.0.11:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7,
"optime" : {
"ts" : Timestamp(1646383557, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:45:57Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:46:06.071Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:46:06.066Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27018",
"configVersion" : 5
}
],
"ok" : 1
}
rs2:PRIMARY>
5:查看状态
rs.status(); rs2:OTHER> rs.status(); #执行命令查看复制集状态,
{
"set" : "rs2", #复制集名称
"date" : ISODate("2022-03-04T08:31:33.312Z"),
"myState" : 1, #状态
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [ #有哪些成员
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", #这个成员是主,其它两个不是,是SECONDARY
"uptime" : 976,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1646382581, 1),
"electionDate" : ISODate("2022-03-04T08:29:41Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "10.0.0.11:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 123,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:31:33.193Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:31:31.611Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "10.0.0.11:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 123,
"optime" : {
"ts" : Timestamp(1646382581, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:29:41Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:31:33.193Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:31:31.663Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27018",
"configVersion" : 1
}
],
"ok" : 1
}
6:删除节点
rs.remove('192.168.1.201:27019'); rs2:PRIMARY> rs.remove('10.0.0.11:27019')
{ "ok" : 1 }
rs2:PRIMARY> rs.status();
{
"set" : "rs2",
"date" : ISODate("2022-03-04T08:40:48.604Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1531,
"optime" : {
"ts" : Timestamp(1646383235, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:40:35Z"),
"electionTime" : Timestamp(1646382581, 1),
"electionDate" : ISODate("2022-03-04T08:29:41Z"),
"configVersion" : 2,
"self" : true
},
{
"_id" : 1,
"name" : "10.0.0.11:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 679,
"optime" : {
"ts" : Timestamp(1646383235, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2022-03-04T08:40:35Z"),
"lastHeartbeat" : ISODate("2022-03-04T08:40:47.168Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T08:40:47.188Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27017",
"configVersion" : 2
}
],
"ok" : 1
}
rs2:PRIMARY>
7:主节点插入数据
>use test
>db.user.insert({uid:1,name:'lily'});
8:连接secondary查询同步情况
./bin/mongo --port 27019
>use test
>show tables rsa:SECONDARY> show tables;
Sat Aug 17 16:03:55.786 JavaScript execution failed: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } 在主上是可以查看的
rs2:PRIMARY> show dbs;
local 0.000GB
rs2:PRIMARY>
但是当我们进入从的时候,无法查询,报错不是主
[mongod@mcw01 ~]$ mongo --port 27018
......
rs2:SECONDARY> show dbs;
2022-03-04T16:51:53.478+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1 SECONDARY默认不允许读写 rs2:SECONDARY>
rs2:SECONDARY> rs.slaveOk(); 那我们按错误信息将它设置成ok,这样从就可以读取数据了
rs2:SECONDARY> show dbs;
local 0.000GB
rs2:SECONDARY> 在主上插入数据
rs2:PRIMARY> use test
switched to db test
rs2:PRIMARY> db.user.insert({uid:1,name:'lily'});
WriteResult({ "nInserted" : 1 })
rs2:PRIMARY> db.user.find();
{ "_id" : ObjectId("6221d4bfabd9594d8ce84607"), "uid" : 1, "name" : "lily" }
rs2:PRIMARY> 我们在从上去查看,数据是同步的。一样的。
rs2:SECONDARY> show dbs;
local 0.000GB
test 0.000GB
rs2:SECONDARY> use test;
switched to db test
rs2:SECONDARY> show tables;
user
rs2:SECONDARY> db.user.find();
{ "_id" : ObjectId("6221d4bfabd9594d8ce84607"), "uid" : 1, "name" : "lily" }
rs2:SECONDARY> 8.1 出现上述错误,是因为slave默认不许读写
>rs.slaveOk();
>show tables #看到与primary 一致的数据
9、当我将主上的服务停掉,模拟服务宕了
rs2:PRIMARY> use admin
switched to db admin
rs2:PRIMARY> db.shutdownServer()
server should be down...
2022-03-04T17:02:15.304+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2022-03-04T17:02:16.387+0800 I NETWORK [thread1] Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
2022-03-04T17:02:16.388+0800 I NETWORK [thread1] SocketException: remote: (NONE):0 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:27017]
2022-03-04T17:02:16.388+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
2022-03-04T17:02:16.391+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2022-03-04T17:02:16.392+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2022-03-04T17:02:16.392+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
> 然后我们去27018节点上去查看复制集状态。发现27017健康是0。并且主节点已经由27017变为27018了
rs2:SECONDARY> rs.status();
{
"set" : "rs2",
"date" : ISODate("2022-03-04T09:04:46.442Z"),
"myState" : 1,
"term" : NumberLong(2),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "10.0.0.11:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2022-03-04T09:04:46.304Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T09:02:13.762Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Connection refused",
"configVersion" : -1
},
{
"_id" : 1,
"name" : "10.0.0.11:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2769,
"optime" : {
"ts" : Timestamp(1646384546, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2022-03-04T09:02:26Z"),
"electionTime" : Timestamp(1646384545, 1),
"electionDate" : ISODate("2022-03-04T09:02:25Z"),
"configVersion" : 5,
"self" : true
},
{
"_id" : 2,
"name" : "10.0.0.11:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1123,
"optime" : {
"ts" : Timestamp(1646384546, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2022-03-04T09:02:26Z"),
"lastHeartbeat" : ISODate("2022-03-04T09:04:46.267Z"),
"lastHeartbeatRecv" : ISODate("2022-03-04T09:04:45.029Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.0.11:27018",
"configVersion" : 5
}
],
"ok" : 1
}
rs2:PRIMARY> 在当前的主27018上插入数据
rs2:PRIMARY> use test
switched to db test
rs2:PRIMARY> show tables;
user
rs2:PRIMARY> db.user.insert({uid:2,name:'xiaoma'})
WriteResult({ "nInserted" : 1 })
rs2:PRIMARY> db.user.find()
{ "_id" : ObjectId("6221d4bfabd9594d8ce84607"), "uid" : 1, "name" : "lily" }
{ "_id" : ObjectId("6221d775ef402350b10ce148"), "uid" : 2, "name" : "xiaoma" }
rs2:PRIMARY> 然后去27019上现在这个从上去查看,能看到新的主27018上创建的数据
[mongod@mcw01 ~]$ mongo --port 27019
.......
rs2:SECONDARY> show dbs;
2022-03-04T17:11:47.714+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1 rs2:SECONDARY> rs.slaveOk();
rs2:SECONDARY> show dbs;
local 0.000GB
test 0.000GB
rs2:SECONDARY> use test;
switched to db test
rs2:SECONDARY> show tables;
user
rs2:SECONDARY> db.user.find();
{ "_id" : ObjectId("6221d4bfabd9594d8ce84607"), "uid" : 1, "name" : "lily" }
{ "_id" : ObjectId("6221d775ef402350b10ce148"), "uid" : 2, "name" : "xiaoma" }
rs2:SECONDARY>
免交互执行mogodb的命令,可实现程序一键部署
启动3个实例,然后进入某个实例进行初始化就完成单机复制集 集群配置了。
[mongod@mcw01 ~]$ mongo --port 27018 <<EOF
use admin
var rsconf = {
_id: 'rs2',
members:[{},
{},
]};
printjson(rsconf);
<<
EOF MongoDB shell version: 3.2.8
connecting to: 127.0.0.1:27018/test
switched to db admin
{ "_id" : "rs2", "members" : [ { }, { } ] } bye
[mongod@mcw01 ~]$
[mongod@mcw01 ~]$ sh 1.sh install
about to fork child process, waiting until server is ready for connections.
forked process: 19633
child process started successfully, parent exiting
about to fork child process, waiting until server is ready for connections.
forked process: 19652
child process started successfully, parent exiting
about to fork child process, waiting until server is ready for connections.
forked process: 19679
child process started successfully, parent exiting
[mongod@mcw01 ~]$ [mongod@mcw01 ~]$ sh 1.sh repl
MongoDB shell version: 3.2.8
connecting to: 127.0.0.1:27017/test
switched to db admin
{ "ok" : 1 } bye
[mongod@mcw01 ~]$ cat 1.sh
#!/bin/bash
#复制集配置
IP='10.0.0.11' #主机ip
NA='rs3' #复制集名称 if [ "$1" = "reset" ]
then
kill -2 `ps -ef|grep -v grep |grep logpath|awk '{print $2}'`
sleep 2
rm -rf /mongodb/m{17,18,19,log}/*
exit
fi if [ "$1" = "install" ]
then
mkdir -p /mongodb/m{17,18,19,log}/
mongod --dbpath /mongodb/m17 --logpath /mongodb/mlog/m17.log --logappend --fork --port 27017 --replSet ${NA} --smallfiles
mongod --dbpath /mongodb/m18 --logpath /mongodb/mlog/m18.log --logappend --fork --port 27018 --replSet ${NA} --smallfiles
mongod --dbpath /mongodb/m19 --logpath /mongodb/mlog/m19.log --logappend --fork --port 27019 --replSet ${NA} --smallfiles
exit
fi if [ "$1" = "repl" ]
then
mongo --port 27017 <<EOF use admin;
var rsconf = {
_id:'${NA}',
members:[
{_id:0,host:'${IP}:27017'},
{_id:1,host:'${IP}:27018'},
{_id:2,host:'${IP}:27019'},
]
};
rs.initiate(rsconf);
<<
EOF
fi
[mongod@mcw01 ~]$
mogodb replication set复制集的更多相关文章
- replication set复制集
replication set复制集 介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集 ...
- 【mongoDB运维篇③】replication set复制集
介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...
- MongoDB基础之九 replication复制集
准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...
- [Mongodb] Relica Set复制集集群简单搭建--持续更新
这里我们搭建一个没有访问控制,奇数个Set没有仲裁者的集群 1.三个配置文件添加 replication.replSetName:"Replica_test" 并启动三个实例2.连 ...
- mongodb3.2.3 复制集安装步骤
mongodb 复制集 测试 node1: 172.18.20.161 47000 (主)node2: 172.18.20.162 47000 (副)node3: 172.18.20.163 4700 ...
- MongDB主从复制、复制集
主从复制比较简单,指定master.slave即可,其中master可写可读.slave只能读不能写.向master插入数据时,mongodb会自动将数据复制到slave节点.这样做的好处是读写分离, ...
- 快速搭建MySQL复制集
快速搭建MySQL复制集 1 环境说明 MySQL版本 5.6 basedir :/u01/my3306 #MySQL软件目录 数据目录 :/u01/mysql/[实例名]/data 日志目录 :/u ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB复制集技术
复制集搭建 没毛病: https://www.cnblogs.com/nicolegxt/p/6841442.html?utm_source=itdadao&utm_medium=referr ...
- mongodb复制集Replica Set使用简介
MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...
随机推荐
- Jetty的http2模块
启用http2模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=http2 命令的输出,如下: INFO : http2 initial ...
- 深入理解 Java 方法重载与递归应用
Java 方法重载 方法重载 允许在同一个类中定义多个具有相同名称的方法,但 参数列表 必须不同. 语法: returnType methodName(parameter1, parameter2, ...
- .NET Aspire预览5版本 发布
2024年4月11日发布了.NET Aspire预览5版本,这个版本引入了对AWS的支持,并对Azure功能进行了改进.重点内容包括拆分Aspire.Hosting和Aspire.Hosting.Az ...
- 限时招募高校学生,带你沉浸式体验HDC.Together 2023
- Batch Normalization 和 DropOut
Batch-Normalization https://www.cnblogs.com/guoyaohua/p/8724433.html 有几点需要注意: \(x^{(k)}\)指的是t层的输入. 也 ...
- 重新点亮linux 命令树————网络管理[十一二]
前言 简单整理一下网络管理. 正文 网络管理需要掌握: 网络状态查看 网络配置 路由命令 网络故障排除 网络服务管理 常用网络配置文件 网络状态的查看: 1.net-tools ---->1.i ...
- Vue3 解构赋值失去响应式引发的思考
前言 vue3发布以来经历两年风头正盛,现在大有和react 平分秋色的势头,我们知道他是基于proxy 实现响应式的能力, 解决了vue2所遗留下来的一些问题,同时也正由于proxy的特性,也提高了 ...
- hashchang事件是异步更新的
1.代码 // 此时会触发hashchange location.hash = '/test' window.addEventListener('hashchange', () => { con ...
- 力扣541(java)-反转字符串Ⅱ(简单)
题目: 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符. 如果剩余字符少于 k 个,则将剩余字符全部反转.如果剩余字符小于 2k ...
- 开源小白到核心开发——我与 sealer 的成长故事
简介: 下面将以作者本人与 sealer 的一段成长故事来带领大家体验从小白到核心功能开发者的开源之旅,同时本文也作为一篇引领开源小白入门的文章供大家参考. 作者:周欣元 个人简介 大家好,我是周 ...