mongo集群安装

Braint_java · · 530 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Mongo集群部署

1.部署准备

1.1 Mongo集群环境

1.1.1mongo版本

版本号:4.0.0

1.1.2硬件环境:

<colgroup><col><col><col></colgroup>
|

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端口规划

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。端口分配:

config:21000

shard1:27001

shard2:27002

shard3:27003

mongos:20000</pre>

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系统变量设置

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">/etc/profile文件增加下面内容:</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">export MONGODB_HOME=/opt/module/mongodb</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">export PATH=MONGODB_HOME/bin:PATH</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">使配置生效:</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">shell> source /etc/profile</pre>

2.3集群配置

2.3.1 配置config-server

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">根据服务器规划,我们在三台机器上部署config server副本集,在该三台服务器上分别添加以下配置文件:进入配置文件目录 conf/config.conf</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">shell> vi conf/config.conf</pre>

配置文件内容:

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">config = {</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> _id : "configs",</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> members : [</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> {_id : 0, host : "172.16.18.73:21000" },</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> {_id : 1, host : "172.16.20.211:21000" },</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> {_id : 2, host : "172.16.21.190:21000" }</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"> ]</pre>

} 

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">启动三台服务器的 config server:mongod -f mongodb/conf/config.conf</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">登录任意一台配置服务器(注意是配置端口),初始化配置副本集(执行命令的时候,不要复制注释,只复制命令去一步步执行)。</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">shell> mongo --port 21000</pre>

定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致)

初始化副本集

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">rs.initiate(config)</pre>

查看分区状态

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">rs.status();</pre>

此时会发现终端上的输出已经有了变化。

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永久不会变为主服务器)

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">shell> mongo --port 27001</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">config = {</pre>


        members : [
            {
            {
            {
        ]
    }

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">初始化副本集:rs.initiate(config)</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">查看分区状态:rs.status()</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">另外两个shard分片副本集类似。</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">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}]}</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">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}]}</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">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}]}</pre>

2.3.3 mongos server路由服务器集群配置

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">注意:启动mongodb时,先启动配置服务器,再启动分片服务器,最后启动路由服务器。三台服务器上分别添加以下配置文件:

进入配置文件:vi conf/mongos.conf,添加以下内容</pre>

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

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">启动三台服务器的mongos server</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">mongos -f conf/mongos.conf</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">目前已经搭建好配置服务器、数据分片服务器、路由服务器,下面进行分片启用,使得app连接到路由服务器时可以使用分片机制</pre>

2.3.4串联路由服务器与分配副本集

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">登录任意一台mongos:</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">mongo --port 20000</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">使用admin数据库</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">use admin</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">串联路由服务器与分片副本集: </pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">sh.addShard("shard1/172.16.18.73:27001,172.16.21.190:27001,172.16.20.211:27001") </pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">sh.addShard("shard2/172.16.21.190:27002, 172.16.20.211:27002,172.16.18.73:27002")</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">sh.addShard("shard3/172.16.20.211:27003,172.16.21.190:27003,172.16.18.73:27003")</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">查看集群状态:</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">sh.status()</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">如图:</pre>

[图片上传失败...(image-cd8832-1589181243203)]

3.3.5启动分片

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。

指定testdb分片生效</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">use admin </pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;"># enableSharding只能针对admin数据库运行,适宜选用admin</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">db.runCommand( { enablesharding :"testdb"});</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">指定数据库里需要分片的集合和片键:

我们设置testdb的 testcoll 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">use testdb;</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">db.runCommand( { shardcollection : "testdb.testcoll",key : {id: "hashed"} } )</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!!</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">查看分片状态</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">db.testcoll.stats()</pre>

3.3.6 分片测试

用NoSQLBooster for mongodb 连接路由服务,执行测试语句:

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">db.runCommand( { enablesharding :"test1"});</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">db.runCommand( { shardcollection : "test1.testtable",key : {id: "hashed"} } )</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">Use test1</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">for(i=1;i<=10000;i++){db.testtable.insert({"id":i,"name":"111"})};</pre>

结果如图,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 文件追加如下内容:

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">export GOROOT=/usr/lib/go</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">export GOPATH=/opt/module/go</pre>

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目录下。

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">cd /opt/module/go/src</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">export MONGODB_URI='mongodb://localhost:21000'</pre>

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">nohup ./mongodb_exporter &</pre>

mongodb_exporter服务已经启动,端口9216

1.2 Prometheus 配置

在10.43.200.182服务器中,配置prometheus.yml文件

<pre style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">vi /etc/prometheus/prometheus.yml</pre>

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Braint_java

查看原文:mongo集群安装

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

530 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传