本例搭建mongodb 3副本集+3分片的集群环境(主机3台),基本配置流程如下文
1. 编辑配置文件,分别在3台主机上新建配置文件config.conf、mongos.conf、shard1.conf、shard2.conf、shard3.conf。内容如下
端口规划
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003
(1)config.conf
pidfilepath = /home/mongodb/config/log/configsrv.pid
dbpath = /home/mongodb/config/data
logpath = /home/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 21000
fork = true
#declare this is a config db of a cluster;
configsvr = true
replSet=configs
maxConns=20000
(2)mongos.conf
pidfilepath = /home/mongodb/mongos/log/mongos.pid
logpath = /home/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/10.1.1.1:21000, 10.1.1.2:21000, 10.1.1.3:21000
maxConns=20000
(3)shard1.conf
pidfilepath = /home/mongodb/shard1/log/shard1.pid
dbpath = /home/mongodb/shard1/data
logpath = /home/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
replSet=shard1
shardsvr = true
maxConns=20000
(4)shard2.conf
pidfilepath = /home/mongodb/shard2/log/shard2.pid
dbpath = /home/mongodb/shard2/data
logpath = /home/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 27002
fork = true
replSet=shard2
shardsvr = true
maxConns=20000
(5)shard3.conf
pidfilepath = /home/mongodb/shard3/log/shard3.pid
dbpath = /home/mongodb/shard3/data
logpath = /home/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 27003
fork = true
replSet=shard3
shardsvr = true
maxConns=20000
2. 每台主机上创建好上述所有配置文件中涉及到的文件目录。
3. 下载mongodb安装包,解压安装,配置好系统环境变量。
4. 在3个主机节点分别启动配置服务器进程:
# mongod -f config.conf
5. 配置服务器创建副本集(登录任一台节点)
《"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port》
#mongo --port 21000
> use admin;
>cfg = {_id: 'configs', members: [
{_id: 0, host: '10.1.1.1:21000'},
{_id: 1, host: '10.1.1.2:21000'},
{_id: 2, host: '10.1.1.3:21000'}]
}
> #初始化副本集配置
rs.initiate(cfg);
6. 配置shard1分片
6.1 在3个主机节点分别启动shard1服务进程:
# mongod -f shard1.conf
6.2 配置shard1分片的副本集(登录任一台节点)
#mongo --port 27001
> use admin;
> config = {_id : "shard1",members : [
{_id : 0, host : "10.1.1.1:27001" },
{_id : 1, host : "10.1.1.2:27001" },
{_id : 2, host : "10.1.1.3:27001” , arbiterOnly: true }] }
> #初始化副本集配置
rs.initiate(cfg);
7. 配置shard2分片
7.1 在3个主机节点分别启动shard2服务进程:
# mongod -f shard2.conf
7.2 配置shard1分片的副本集(登录任一台节点)
#mongo --port 27002
> use admin;
> cfg = {_id: 'shard2', members: [
{_id: 0, host: '10.1.1.1:27002'},
{_id: 1, host: '10.1.1.2:27002'},
{_id: 2, host: '10.1.1.3:27002',arbiterOnly: true}]
}
> #初始化副本集配置
rs.initiate(cfg);
8. 配置shard3分片
8.1 在3个主机节点分别启动shard3服务进程:
# mongod -f shard3.conf
8.2 配置shard1分片的副本集(登录任一台节点)
#mongo --port 27003
> use admin;
> cfg = {_id: 'shard3', members: [
{_id: 0, host: '10.1.1.1:27003'},
{_id: 1, host: '10.1.1.2:27003'},
{_id: 2, host: '10.1.1.3:27003',arbiterOnly: true}]
}
#初始化副本集配置
rs.initiate(cfg);
9. 配置mongos 路由服务器
在3台主机分别启动mongos服务进程
# mongos -f mongos.conf
登录任一台主机节点mongos
# mongo --port 20000
> use admin;
配置路由服务器与分配副本集
> sh.addShard("shard1/10.1.1.1:27001,10.1.1.2:27001,10.1.1.3:27001")
> sh.addShard("shard2/10.1.1.1:27002,10.1.1.2:27002,10.1.1.3:27002")
> sh.addShard("shard3/10.1.1.1:27003,10.1.1.2:27003,10.1.1.3:27003")
#查看集群状态
> sh.status()
集群配置完成。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
若集群环境故障需恢复(只恢复环境):
1. 停止各个进程
登录,mongo --port 21000
use admin;
db.shutdownServer();
2. 清空各个目录下的文件
/home/mongodb/config/
/home/mongodb/shard1
/home/mongodb/shard2
/home/mongodb/shard3
重建 data 和 log 目录
3. 修改好配置文件中迁移后对应的IP信息.
4. 按照配置过程中的4步骤开始重新配置集群。
5. 重新同步数据。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
修改副本集中的节点
例如配置服务副本集,修改成员0;
登录
> mongo --port 21000
> use admin;
> conf=rs.conf()
> conf.members[0].host="10.1.1.1:21000";
> rs.reconfig(conf,{"force":true});
可以依次修改调整节点信息。