Mongo集群部署
1.部署准备
1.1 Mongo集群环境
1.1.1mongo版本
版本号:4.0.0
1.1.2硬件环境:
|
172.16.18.73
|
172.16.20.211
|
172.16.21.190
|
|
mongos
|
mongos
|
mongos
|
|
config server
|
config server
|
config server
|
|
shard server1主节点
|
shard server1副节点
|
shard server1仲裁
|
|
shard server2副节点
|
shard server2仲裁
|
shard server2主节点
|
|
shard server3仲裁
|
shard server3主节点
|
shard server3副节点
|
| | | |
1.1.3端口规划
由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。端口分配:config:21000
shard1:27001
shard2:27002
shard3:27003
mongos:20000
1.1.4 目录规划
/opt/module/mongodb/conf # 存放所有服务器的配置文件
/data/mongodb/mongos/logs # 存放路由服务器的日志信息
/data/mongodb/config/data # 存放配置服务器的数据
/data/mongodb/config/logs # 存放配置服务器的日志
/data/mongodb/shard1/data # 存放分片服务器上的数据
/data/mongodb/shard1/logs # 存放分片服务器上的日志
/ data/mongodb/shard2/data # 存放分片服务器上的数据
/ data/mongodb/shard2/logs # 存放分片服务器上的日志
/ data/mongodb/shard3/data # 存放分片服务器上的数据
/ data/mongodb/shard3/logs # 存放分片服务器上的日志
1.2 prometheus和grafana环境
之前部署的环境10.43.200.182,prometheus端口9090,grafana端口3000。
https://segmentfault.com/a/1190000019701235#articleHeader24
2.集群安装
2.1 下载安装包
http://downloads.mongodb.org/linux/mongodb-linux-x86_64-4.0.10.tgz
解压到/opt/module/mongodb目录下
2.2系统变量设置
/etc/profile文件增加下面内容:
export MONGODB_HOME=/opt/module/mongodb
export PATH=PATH
使配置生效:
shell> source /etc/profile
2.3集群配置
2.3.1 配置config-server
根据服务器规划,我们在三台机器上部署config server副本集,在该三台服务器上分别添加以下配置文件:进入配置文件目录 conf/config.conf
shell> vi conf/config.conf
配置文件内容:
config = {
_id : "configs",
members : [
{_id : 0, host : "172.16.18.73:21000" },
{_id : 1, host : "172.16.20.211:21000" },
{_id : 2, host : "172.16.21.190:21000" }
]
}
启动三台服务器的 config server:mongod -f mongodb/conf/config.conf
登录任意一台配置服务器(注意是配置端口),初始化配置副本集(执行命令的时候,不要复制注释,只复制命令去一步步执行)。
shell> mongo --port 21000
定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致)
初始化副本集
rs.initiate(config)
查看分区状态
rs.status();
此时会发现终端上的输出已经有了变化。
rs.initiate(config) 初始化。不成功的话,路由服务器与配置服务器连接不上。
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 配置port。
2.3.2 shard server分片服务器集群配置
配置第一个分片副本集,config/shard1.conf
三台服务器分别添加一下配置文件:
shell >
配置如下内容:
where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/shard1/logs/shard1.log
Where and how to store data.
storage:
dbPath: /data/mongodb/shard1/data
journal:
enabled: true
how the process runs
processManagement:
fork: true
pidFilePath: /data/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 conf/shard1.conf
登陆任意一台服务器(注意是分片端口),初始化副本集. 定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致,priority代表权重[1,100],大的被分配为主服务器,0永久不会变为主服务器)
shell> mongo --port 27001
config = {
members : [
{
{
{
]
}
初始化副本集:rs.initiate(config)
查看分区状态:rs.status()
另外两个shard分片副本集类似。
config={_id:"shard1",members:[{_id :0,host:"172.16.18.73:27001",priority:2},{_id:1,host:"172.16.21.190:27001",arbiterOnly:true},{_id:2,host:"172.16.20.211:27001",priority :1}]}
config={_id:"shard2",members:[{_id :0,host:"172.16.21.190:27002",priority:2},{_id:1,host:"172.16.20.211:27002",arbiterOnly:true},{_id:2,host:"172.16.18.73:27002",priority :1}]}
config={_id:"shard3",members:[{_id :0,host:"172.16.20.211:27003",priority:2},{_id:1,host:"172.16.18.73:27003",arbiterOnly:true},{_id:2,host:"172.16.21.190:27003",priority :1}]}
2.3.3 mongos server路由服务器集群配置
注意:启动mongodb时,先启动配置服务器,再启动分片服务器,最后启动路由服务器。三台服务器上分别添加以下配置文件:进入配置文件:vi conf/mongos.conf,添加以下内容
where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/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/172.16.18.71:21000,172.16.21.190:21000,172.16.20.211:21000
启动三台服务器的mongos server
mongos -f conf/mongos.conf
目前已经搭建好配置服务器、数据分片服务器、路由服务器,下面进行分片启用,使得app连接到路由服务器时可以使用分片机制
2.3.4串联路由服务器与分配副本集
登录任意一台mongos:
mongo --port 20000
使用admin数据库
use admin
串联路由服务器与分片副本集:
sh.addShard("shard1/172.16.18.73:27001,172.16.21.190:27001,172.16.20.211:27001")
sh.addShard("shard2/172.16.21.190:27002, 172.16.20.211:27002,172.16.18.73:27002")
sh.addShard("shard3/172.16.20.211:27003,172.16.21.190:27003,172.16.18.73:27003")
查看集群状态:
sh.status()
如图:
[图片上传失败...(image-cd8832-1589181243203)]
3.3.5启动分片
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。指定testdb分片生效
use admin
# enableSharding只能针对admin数据库运行,适宜选用admin
db.runCommand( { enablesharding :"testdb"});
指定数据库里需要分片的集合和片键:我们设置testdb的 testcoll 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。
use testdb;
db.runCommand( { shardcollection : "testdb.testcoll",key : {id: "hashed"} } )
要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!!
查看分片状态
db.testcoll.stats()
3.3.6 分片测试
用NoSQLBooster for mongodb 连接路由服务,执行测试语句:
db.runCommand( { enablesharding :"test1"});
db.runCommand( { shardcollection : "test1.testtable",key : {id: "hashed"} } )
Use test1
for(i=1;i<=10000;i++){db.testtable.insert({"id":i,"name":"111"})};
结果如图,10000数据被分配到三个shard上,说明分片成功
[图片上传失败...(image-a0fee3-1589181243203)]
Prometheus+ grafana监控mongodb集群
1 Prometheus 配置
1.1部署mongodb_exporter
1.1.1 安装golang
Mongodb集群的三台服务器都需要,下载go安装包:https://studygolang.com/dl/golang/go1.7.3.linux-amd64.tar.gz
解压到/usr/lib/go目录下
设置GOROOT和GOPATH
在/etc/profile 文件追加如下内容:
export GOROOT=/usr/lib/go
export GOPATH=/opt/module/go
1.1.2 部署 mongodb_export
Mongodb集群的三台服务器都需要,下载mongodb_exporter,下载地址:https://github.com/percona/mongodb_exporter/releases/download/v0.8.0/mongodb_exporter-0.8.0.linux-amd64.tar.gz
解压到 /opt/module/go/src目录下。
cd /opt/module/go/src
export MONGODB_URI='mongodb://localhost:21000'
nohup ./mongodb_exporter &
mongodb_exporter服务已经启动,端口9216
1.2 Prometheus 配置
在10.43.200.182服务器中,配置prometheus.yml文件
vi /etc/prometheus/prometheus.yml
-
job_name: 'mongos'
static_configs:
- targets: '172.16.18.73:9216','172.16.20.211:9216','172.16.21.190:9216']
重启prometheus服务
访问http://10.43.200.182:9090/targets,可以看到mongos三个服务是up的状态
[图片上传失败...(image-e63d8e-1589181243203)]
1.3 grafana 设置
访问http://10.43.200.182:3000,导入mongodb的模板,编码为2583。
[图片上传失败...(image-b8433f-1589181243203)]