程序员,架构师,运维想要的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模块需要...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 基于Docker方式安装与部署Camunda流程引擎
- 宝塔Linux面板如何部署Java项目?(宝塔面板 linux)
- 浪潮服务器如何用IPMI安装Linux系统
- Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)
- Hadoop高可用集群搭建及API调用(hadoop高可用原理)
- 使用Wordpress搭建一个属于自己的网站
- Centos 安装 Jenkins(centos 安装ssh)
- Java教程:gitlab-使用入门(java中的git)
- Dockerfile部署Java项目(docker部署java应用)
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)