mongodb两台服务器搭建 replica set 配置
以下是搭建配置的过程:
1. 两台服务器分别启动相应的Mongod 进程:
10.1.1.1
./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath
/data/shard11 --logpath /data/shard11/shard11.log --rest
./mongod --fork --shardsvr --port 27018 --replSet mySet --dbpath
/data/shard12 --logpath /data/shard12/shard12.log --rest
10.1.1.2
./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath
/data/shard2 --logpath /data/shard2/shard2.log --rest
2. 初始化replica set
用mongo 连接其中一个mongod,执行:
>config = {_id: 'mySet', members: [
{_id: 0, host: '10.1.1.1:27017'},
{_id: 1, host: '10.1.1.2:27017'},
{_id: 2, host: '10.1.1.1:27018', arbiterOnly: true}
]}
>rs.initiate(config)
>rs.status()
注意:Server 上的27018 对应的Mongod,它们只负责在某个node down 掉后,进行
vote 选举新的master,它们本身并不存储数据备份
3. 配置1 台Config Servers:
10.1.1.1
./mongod --fork --configsvr --port 20000 --dbpath /data/config --logpath
/data/config/config.log --rest
4. 配置1 台Route Server:
10.1.1.2
./mongos --fork --port 30000 --chunkSize 1 --configdb "10.1.1.1:20000"
--logpath /data/mongos/mongos.log
chunkSize 参数用来设置chunk 块的大小,这里为了测试,设置成1M
5. Configuring the Shard Cluster
连接到mongos 进程,并切换到admin 数据库做以下配置
10.1.1.2
>mongo 10.1.1.2:30000
>use admin
>db.runCommand({addshard:'mySet/10.1.1.1:27017,10.1.1.2:27017'})
>db.runCommand({enablesharding:'test'})
>db.runCommand({listshards:1})
>printShardingStatus()
>db.runCommand({shardcollection:'test.test', key:{_id:1}, unique : true})
6. 测试
连接到mongos
>for(var i=1;i<=2011;i++)
db.test.save({id:i,value1:"1234567890",value2:"1234567890",value3:"12345
67890",value4:"1234567890"});
然后,进入mongo 的命令行,可以在shard 中分别查看count 值。
下面,我们再来测试一下automated failover:
将10.1.1.1 的mongod 进程kill -2 杀掉后,在10.1.1.2 的log 中,可以看到:
Tue Jan 25 10:51:04 [ReplSetHealthPollTask] replSet info 10.1.1.2:27017 is
now down (or slow to respond)
Tue Jan 25 10:51:04 [rs Manager] replSet info electSelf 1
Tue Jan 25 10:51:04 [rs Manager] replSet PRIMARY
说明,新的vote 已经完成,10.1.1.2 变成了新的primary master 了
此时,我们再往db 中继续写入数据,然后启动10.1.1.1,会发现:
Tue Jan 25 10:52:56 [ReplSetHealthPollTask] replSet 10.1.1.1:27017
SECONDARY
说明,10.1.1.1 此时又作为secondary 来运行了
同时,在10.1.1.1 down 掉时,10.1.1.2 上写入的数据也会继续同步到10.1.1.1 上