接MongoDB集群部署搭建(二)
config server 集群配置
根据之前的服务器规划,需要在三台机器上部署config server 副本集,首先在该三台服务器上分别添加一下配置文件:
vi /application/component/mongodb/conf/config.conf
加入以下内容:
# log日志路径
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/config/logs/config.log
# data目录
storage:
dbPath: /application/component/mongodb/config/data/
journal:
enabled: true
# 运行pid文件
processManagement:
fork: true
pidFilePath: /application/component/mongodb/config/logs/configsrv.pid
# network配置
net:
port: 21000
bindIp: 0.0.0.0
# 集群名称
replication:
replSetName: configs
# 声明集群的配置数据服务
sharding:
clusterRole: configsvr
保存并退出并启动三台服务器的config server:
mongod -f /application/component/mongodb/conf/config.conf
登录任意一台配置服务器(注意是配置端口),初始化配置副本集,输入命令
mongo --port 21000
控制台输入并执行
#定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致)
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.0.120:21000" },
{_id : 1, host : "192.168.0.121:21000" },
{_id : 2, host : "192.168.0.122:21000" }
]
}
#初始化副本集
rs.initiate(config)
#查看分区状态
rs.status();
输出结果如下:
注:rs.initiate(config)初始化,若不成功的话,路由服务器与配置服务器连接不上。其中”_id”:”configs” 应与配置文件中配置的replicaction:replSetName一致,”members”中的”host”为三个节点的ip和配置port。
shard server 分片服务器集群配置
配置第一个分片副本集
根据服务器规划:
192.168.0.120:27001 – 主节点
192.168.0.121:27001 – 副节点
192.168.0.122:27001 – 仲裁节点
192.168.0.120:27001 – 副节点
192.168.0.121:27001 – 仲裁节点
192.168.0.122:27001 – 主节点
192.168.0.120:27001 – 仲裁节点
192.168.0.121:27001 – 主节点
192.168.0.122:27001 – 副节点
三台服务器上分别添加以下配置文件:
进入配置文件:
vi /application/component/mongodb/conf/shard1.conf #分片配置文件
加入如下文件内容:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/shard1/logs/shard1.log
# Where and how to store data.
storage:
dbPath: /application/component/mongodb/shard1/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /application/component/mongodb/shard1/logs/shard1.pid
# network interfaces
net:
port: 27001
bindIp: 0.0.0.0
# 副本集名称
replication:
replSetName: shard1
# 声明这是一个集群的分片服务;
sharding:
clusterRole: shardsvr
启动三台服务器的shard1 server:
mongod -f /application/component/mongodb/conf/shard1.conf
登录任意一台服务器(注意是分片端口),初始化副本集。
mongo --port 27001
执行:
#定义副本集配置
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.0.120:27001", priority : 2 },
{_id : 1, host : "192.168.0.121:27001", arbiterOnly :true },
{_id : 2, host : "192.168.0.122:27001", priority : 1 }
]
}
#初始化副本集:
rs.initiate(config)
如下结果:
#查看分区状态:
rs.status();
其他副本集都按照以上方式进行配置
第二个副本集在第二台机器上执行,第三个副本集在第三个机器上执行
第二台机器执行内容如下:
#定义副本集配置
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.0.120:27002", priority : 1 },
{_id : 1, host : "192.168.0.121:27002", priority : 2 },
{_id : 2, host : "192.168.0.122:27002", arbiterOnly :true }
]
}
#初始化副本集
rs.initiate(config)
#查看分区状态
rs.status()
第三台机器执行内容如下:
#定义副本集配置
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.0.120:27003", arbiterOnly :true },
{_id : 1, host : "192.168.0.121:27003", priority : 1 },
{_id : 2, host : "192.168.0.122:27003", priority : 2 }
]
}
#初始化副本集
rs.initiate(config)
#查看分区状态
rs.status()
mongos server 路由服务器集群配置
注意启动mongodb时,需要先启动配置服务器,再启动分片服务器,最后启动路由服务器。
根据服务器规划,在每台服务器都配置了mongos:
192.168.0.120: 20000 - mongos
192.168.0.121: 20000 - mongos
192.168.0.122: 20000 – mongos
三台服务器上分别添加一下配置文件:
进入配置文件:
vi /application/component/mongodb/conf/mongos.conf
加入如下配置文件内容:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/mongos/logs/mongos.log
# how the process runs
processManagement:
fork: true
# pidFilePath: /var/log/nginx/mongos.pid
# network interfaces
net:
port: 20000
bindIp: 0.0.0.0
#监听的配置服务器,只能有1个或者3个,configs为配置服务器的副本集名字,ip:configs配置服务器的端口
sharding:
configDB: configs/192.168.0.120:21000,192.168.0.121:21000,192.168.0.122:21000
启动三台服务器的mongo server
mongos -f /application/component/mongodb/conf/mongos.conf
目前已经搭建好配置服务器、数据分片服务器、路由服务器,下面进行分片启用,是的应用程序连接到路由服务器时可以使用分片机制。
串联路由服务器与分配副本集
登录任意一台mongos
mongo --port 20000
使用admin 数据库
use admin
串联路由服务器与分片副本集
#串联路由服务器与分片副本集
sh.addShard("shard1/192.168.0.120:27001,192.168.0.121:27001,192.168.0.122:27001")
#sh.addShard("shard2/192.168.0.120:27002,192.168.0.121:27002,192.168.0.122:27002")
#sh.addShard("shard3/192.168.0.120:27003,192.168.0.121:27003,192.168.0.122:27003")
执行结果如下:
查看集群状态:
sh.status()
注:执行sh.status()命令可能报如下错误
解决方案:
给admin用户赋予集群管理的权限:
db.grantRolesToUser(“admin”,[“clusterAdmin”])
下一节:分片的使用