mongo集群安装

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)]

你可能感兴趣的:(mongo集群安装)