百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

程序员,架构师,运维想要的mongodb数据库集群安装教程在这里

qiyuwang 2024-11-03 16:32 27 浏览 0 评论

现在mongo数据库非常流行,下面就详细介绍一下怎么搭建mongo数据库集群搭建,下图是mongo集群的架构图

环境准备

系统系统 CentOS Linux release 7.6.1810 (Core),Red Hat Enterprise Linux Server release 6.10 (Santiago),由于测试环境服务器比较难找,有一台服务器为centos,但是不影响集群搭建

三台服务器:10.10.57.206,10.10.57.207,10.10.57.208

安装包: mongodb-org-server-4.2.2

服务器规划

端口分配:

mongos:20000 
config:21000 
shard1:27001 
shard2:27002 
hard3:27003

集群搭建

1、安装mongodb

rpm -ivh?mongodb-org-server-4.2.2-1.el7.x86_64.rpm?mongodb-org-mongos-4.2.2-1.el7.x86_64.rpm?mongodb-org-shell-4.2.2-1.el7.x86_64.rpm?mongodb-org-tools-4.2.2-1.el7.x86_64.rpm

分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。

mkdir -p /mongo/conf
mkdir -p /mongo/mongos/log
mkdir -p /mongo/config/data
mkdir -p /mongo/config/log
mkdir -p /mongo/shard1/data
mkdir -p /mongo/shard1/log
mkdir -p /mongo/shard2/data
mkdir -p /mongo/shard2/log
mkdir -p /mongo/shard3/data
mkdir -p /mongo/shard3/log
chown -R?mongod:mongod /mongo

2、config server配置服务器

mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。

添加配置文件

vi /mongo/conf/config.conf

## 配置文件内容

pidfilepath = /mongo/config/log/configsrv.pid

dbpath = /mongo/config/data

logpath = /mongo/config/log/congigsrv.log

logappend = true

directoryperdb=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

启动三台服务器的config server

mongod -f /mongo/conf/config.conf

登录任意一台配置服务器,初始化配置副本集

#连接

mongo --port 21000

#config变量

config?={

????????"_id" : "configs",

????????"members" : [

????????????????{

????????????????????????"_id" : 0,

????????????????????????"host" : "10.10.57.206:21000"

????????????????},

????????????????{

????????????????????????"_id" : 1,

????????????????????????"host" : "10.10.57.207:21000"

????????????????},

????????????????{

????????????????????????"_id" : 2,

????????????????????????"host" : "10.10.57.208:21000"

????????????????}

????????]

}

#初始化副本集

rs.initiate(config)

其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 port

3、配置分片副本集(三台机器)

设置第一个分片副本集

配置文件

vi /mongo/conf/shard1.conf

#配置文件内容#

pidfilepath = /mongo/shard1/log/shard1.pid

dbpath = /mongo/shard1/data

logpath = /mongo/shard1/log/shard1.log

logappend = true

directoryperdb=true

bind_ip = 0.0.0.0

port = 27001

fork = true

#副本集名称

replSet=shard1

#declare this is a shard db of a cluster;

shardsvr = true

#设置最大连接数

maxConns=20000

启动三台服务器的shard1 server

mongod -f /mongo/conf/shard1.conf

登陆任意一台服务器,初始化副本集

mongo --port 27001

#使用admin数据库

use admin

#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。

config ={

????????"_id" : "shard1",

????????"members" : [

????????????????{

????????????????????????"_id" : 0,

????????????????????????"host" : "10.10.57.206:27001"

????????????????},

????????????????{

????????????????????????"_id" : 1,

????????????????????????"host" : "10.10.57.207:27001"

????????????????},

????????????????{

????????????????????????"_id" : 2,

????????????????????????"host" : "10.10.57.208:27001",

????????????????????????"arbiterOnly" : true

????????????????}

????????]}

#初始化副本集配置

rs.initiate(config);

设置第二个分片副本集

配置文件

vi /mongo/conf/shard2.conf

#配置文件内容#

pidfilepath = /mongo/shard2/log/shard2.pid

dbpath = /mongo/shard2/data

logpath = /mongo/shard2/log/shard2.log

logappend = true

directoryperdb=true

bind_ip = 0.0.0.0

port = 27002

fork = true

#副本集名称

replSet=shard2

#declare this is a shard db of a cluster;

shardsvr = true

#设置最大连接数

maxConns=20000

启动三台服务器的shard2 server

mongod -f /mongo/conf/shard2.conf

登陆任意一台服务器,初始化副本集

mongo --port 27002

#使用admin数据库

use admin

#定义副本集配置

config = {

????????"_id" : "shard2",

????????"members" : [

????????????????{

????????????????????????"_id" : 0,

????????????????????????"host" : "10.10.57.206:27002",

????????????????????????"arbiterOnly" : true

????????????????},

????????????????{

????????????????????????"_id" : 1,

????????????????????????"host" : "10.10.57.207:27002"

????????????????},

????????????????{

????????????????????????"_id" : 2,

????????????????????????"host" : "10.10.57.208:27002"

????????????????}

????????]

}

#初始化副本集配置

rs.initiate(config);

设置第三个分片副本集

配置文件

vi /mongo/conf/shard3.conf

#配置文件内容#

pidfilepath = /mongo/shard3/log/shard3.pid

dbpath = /mongo/shard3/data

logpath = /mongo/shard3/log/shard3.log

logappend = true

directoryperdb=true

bind_ip = 0.0.0.0

port = 27003

fork = true

#副本集名称

replSet=shard3

#declare this is a shard db of a cluster;

shardsvr = true

#设置最大连接数

maxConns=20000

启动三台服务器的shard3 server

mongod -f /mongo/conf/shard3.conf

登陆任意一台服务器,初始化副本集

mongo --port 27003

#使用admin数据库

use admin

#定义副本集配置

config = {

????????"_id" : "shard3",

????????"members" : [

????????????????{

????????????????????????"_id" : 0,

????????????????????????"host" : "10.10.57.206:27003"

????????????????},

????????????????{

????????????????????????"_id" : 1,

????????????????????????"host" : "10.10.57.207:27003",

????????????????????????"arbiterOnly" : true

????????????????},

????????????????{

????????????????????????"_id" : 2,

????????????????????????"host" : "10.10.57.208:27003"

????????????????}

????????]

}

#初始化副本集配置

rs.initiate(config);

4、配置路由服务器 mongos

先启动配置服务器和分片服务器,后启动路由实例:(三台机器)

vi /mongo/conf/mongos.conf

#内容

pidfilepath = /mongo/mongos/log/mongos.pid

logpath = /mongo/mongos/log/mongos.log

logappend = true

bind_ip = 0.0.0.0

port = 20000

fork = true

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字

configdb = configs/10.10.57.206:21000,10.10.57.207:21000,10.10.57.208:21000

#设置最大连接数

maxConns=20000

启动三台服务器的mongos server

mongos -f /mongo/conf/mongos.conf

5、启用分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos

mongo --port 20000

#使用admin数据库

use admin

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

sh.addShard("shard1/10.10.57.206:27001,10.10.57.207:27001,10.10.57.208:27001")

sh.addShard("shard2/10.10.57.206:27002,10.10.57.207:27002,10.10.57.208:27002")

sh.addShard("shard3/10.10.57.206:27003,10.10.57.207:27003,10.10.57.208:27003")

#查看集群状态

sh.status()

6、测试

目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。

use admin

#指定testdb分片生效

db.runCommand( { enablesharding :"testdb"});

#指定数据库里需要分片的集合和片键

db.runCommand( { shardcollection : "testdb.table1",key : {sno: 1} } )

我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!

测试分片配置结果

mongo 127.0.0.1:20000

#使用testdb

use testdb;

#创建索引

db.table1.ensureIndex( {"testkey": 1}, {"name": "idx_testkey", "background": true} )

#插入测试数据

for (var i = 1; i <= 1000000; i++) db.table1.save({sno:i,"testkey":"testiefsljfoeflasfa"+i});

#查看分片情况如下,部分无关信息省掉了

db.table1.stats();

后期运维

启动关闭

mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.

mongod -f /mongo/conf/config.conf

mongod -f /mongo/conf/shard1.conf

mongod -f /mongo/conf/shard2.conf

mongod -f /mongo/conf/shard3.conf

mongod -f /mongo/conf/mongos.conf

关闭时,直接killall杀掉所有进程

mongod --shutdown -f /mongo/conf/config.conf
mongod --shutdown -f /mongo/conf/shard1.conf
mongod --shutdown -f /mongo/conf/shard2.conf
mongod --shutdown -f /mongo/conf/shard3.conf
mongod --shutdown -f /mongo/conf/mongos.conf
killall mongod
killall mongos


安装注意事项

在初始化分片配置时,一定要注意,不在仲裁节点上激活就行,在其他任意一个主备节点激活,不然会报一下错误

> rs.initiate(config);
{
        "operationTime" : Timestamp(0, 0),
        "ok" : 0,
        "errmsg" : "This node, 10.10.57.208:27001, with _id MemberId(2) is not electable under the new configuration version 1 for replica set shard1",
        "code" : 93,
        "codeName" : "InvalidReplicaSetConfig",
        "$clusterTime" : {
                "clusterTime" : Timestamp(0, 0),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

相关推荐

基于Docker方式安装与部署Camunda流程引擎

1Camunda简介官网:https://docs.camunda.org/manual/7.19/installation/docker/Camunda是一个轻量级、开源且高度灵活的工作流和决策自...

宝塔Linux面板如何部署Java项目?(宝塔面板 linux)

通过宝塔面板部署Java还是很方便的,至少不需要自己输入tomcat之类的安装命令了。在部署java项目前,我还是先说下目前的系统环境,如果和我的系统环境不一样,导致部署不成功,那你可能需要去找其他资...

浪潮服务器如何用IPMI安装Linux系统

【注意事项】此处以浪潮服务器为例进行演示所需使用的软件:Chrome浏览器个人PC中需要预先安装java,推荐使用jdk-8u181-windows-x64.exe【操作步骤】1、在服务器的BIOS中...

Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)

由于项目需要存储历史业务数据,经过评估数据量会达到100亿以上,在原有mongodb集群和ES集群基础上,需要搭建Hbase集群进行调研,所以首先总结一下Hadoop集群的搭建过程。一、三个节点的集群...

Hadoop高可用集群搭建及API调用(hadoop高可用原理)

NameNodeHA背景在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNo...

使用Wordpress搭建一个属于自己的网站

现在开源的博客很多,但是考虑到wordpress对网站的seo做的很好,插件也多。并且全世界流量排名前1000万的网站有33.4%是用Wordpress搭建的!所以尝试用Wordpress搭建一个网站...

Centos 安装 Jenkins(centos 安装ssh)

1、Java安装查看系统是否已安装Javayumlistinstalled|grepjava...

Java教程:gitlab-使用入门(java中的git)

1导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作...

Dockerfile部署Java项目(docker部署java应用)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

如何在Eclipse中搭建Zabbix源码的调试和开发环境

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...

Java路径-02-Java环境配置(java环境搭建及配置教程)

1Window环境配置1.1下载...

35.Centos中安装python和web.py框架

文章目录前言1.Centos7python:2.Centos8python:3.进行下载web.py框架然后应用:4.安装好之后进行验证:5.总结:前言...

《我的世界》服务器搭建(我的世界服务器如何搭建)

1.CentOS7环境1.1更改YUM源#下载YUM源文件curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com...

CentOS 7 升级 GCC 版本(centos7.4升级7.5)

1.GCC工具介绍GCC编译器:...

Linux安装Nginx详细教程(linux安装配置nginx)

环境准备1.因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。命令:yuminstallgcc-c++显示完毕,表示安装完成:2.Nginx的http模块需要...

取消回复欢迎 发表评论: