MongoDB的混合集群配置及模拟演示

使用工具:Oracle VM VirtualBox

虚拟机系统:CentOS7

MongoDB版本:3.6

远程访问工具:SSH或XShell

MongoDB下载地址:https://www.mongodb.com/download-center/community

 

虚拟机网络设置

  1. 宿主机无线网卡上网,虚拟机之间能相互访问,宿主机与虚拟机能相互访问,虚拟机无法上internet网

设置2个网卡

启动虚拟机

# 关闭防火墙

systemctl stop firewalld

# 开机不启用防火墙

systemctl disable firewalld

设置静态IP

cd /etc/sysconfig/network-scripts/

vi ifcfg-enp0s3

 

TYPE="Ethernet"

PROXY_METHOD="none"

BROWSER_ONLY="no"

BOOTPROTO="static"

NM_CONTROLLED="no"

DEFROUTE="yes"

IPV4_FAILURE_FATAL="no"

IPV6INIT="yes"

IPV6_AUTOCONF="yes"

IPV6_DEFROUTE="yes"

IPV6_FAILURE_FATAL="no"

IPV6_ADDR_GEN_MODE="stable-privacy"

NAME="enp0s3"

UUID="b5104b37-0c59-4559-8f8f-b70d3e215967"

DEVICE="enp0s3"

ONBOOT="yes"

# 每个虚拟机设置自己的IP地址

IPADDR=192.168.56.104

GATEWAY=192.168.56.1

2、宿主机无线网卡上网,虚拟机之间能相互访问,宿主机与虚拟机能相互访问,虚拟机能上internet网

虚拟机IP是动态分配的

 

推荐第一种网络配置,我们需要静态配置各个虚拟机的IP

 

MongoDB安装及配置

如何安装就不介绍了,用tar命令解压即可。

安装好(解压)MongoDB后,设置环境变量,推荐以下方法。

在 /etc/profile.d/ 目录下新建对应的 sh 文件即可,比如新建 mongodb.sh

vi /etc/profile.d/mongodb.sh

export MONGODB_HOME=/root/mongodb

export PATH=$PATH:$MONGODB_HOME/bin

立即刷新使变量可用

source /etc/profile

集群场景介绍

本人电脑受性能所限,目前最多带4个虚拟机,所以是伪集群,不影响效果演示。

4个虚拟机,IP分别是192.168.56.101、102、103、104

1个路由服务:在虚拟机192.168.56.101上(路由没有做集群)。

2个配置服务:在虚拟机192.168.56.102上,用两个端口号启动两个mongo服务,模拟两个配置服务器。

2个副本集:分别在103和104上,分别用3个端口号启动3个mongo服务,模拟3个MongoDB数据服务器。

 

启动服务前准备工作

在启动各个mongo服务前做如下操作:

在101上新建文件夹

mkdir -p /usr/mongo-router/node01/logs

 

在102上新建文件夹

mkdir -p /usr/mongo-conf/node01/data

mkdir -p /usr/mongo-conf/node01/logs

 

mkdir -p /usr/mongo-conf/node02/data

mkdir -p /usr/mongo-conf/node02/logs

 

在103上新建文件夹

mkdir -p /usr/mongo-rs/node01/data

mkdir -p /usr/mongo-rs/node01/logs

 

mkdir -p /usr/mongo-rs/node02/data

mkdir -p /usr/mongo-rs/node02/logs

 

mkdir -p /usr/mongo-rs/node03/data

mkdir -p /usr/mongo-rs/node03/logs

 

在104上新建文件夹

mkdir -p /usr/mongo-rs/node01/data

mkdir -p /usr/mongo-rs/node01/logs

 

mkdir -p /usr/mongo-rs/node02/data

mkdir -p /usr/mongo-rs/node02/logs

 

mkdir -p /usr/mongo-rs/node03/data

mkdir -p /usr/mongo-rs/node03/logs

 

添加配置文件

 

在102虚拟机中的文件夹/usr/mongo-conf/node01下添加配置文件mongodb.cfg,内容如下:

 

# 数据文件位置

dbpath=/usr/mongo-conf/node01/data

# 日志文件位置

logpath=/usr/mongo-conf/node01/logs/mongodb.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork=true

# 绑定IP

bind_ip=192.168.56.102

# 端口号

port=28001

# 标识此服务是一个配置服务

configsvr=true

# 配置服务器的副本集名字

replSet=configsvr

 

在102虚拟机中的文件夹/usr/mongo-conf/node02下添加配置文件mongodb.cfg,内容跟以上不同之处用红色粗体标出:

 

# 数据文件位置

dbpath=/usr/mongo-conf/node02/data

# 日志文件位置

logpath=/usr/mongo-conf/node02/logs/mongodb.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork=true

# 绑定IP

bind_ip=192.168.56.102

# 端口号

port=28002

# 标识此服务是一个配置服务

configsvr=true

# 配置服务器的副本集名字(跟上面要一致)

replSet=configsvr

 

在103虚拟机中的文件夹/usr/mongo-rs/node01下添加配置文件mongodb.cfg,内容如下:

 

# 数据库文件位置

dbpath=/usr/mongo-rs/node01/data

# 日志文件位置

logpath=/usr/mongo-rs/node01/logs/mongodb.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork=true

bind_ip=192.168.56.103

port=27003

# 副本集名字

replSet=rs001

# 有此配置,要先启动配置服务

shardsvr=true

 

同理,在虚拟机103下的node02、node03下也添加配置文件,不同之处就是配置文件里的路径和端口号。

 

在104虚拟机中的文件夹/usr/mongo-rs/node01下添加配置文件mongodb.cfg,内容如下:

# 数据库文件位置

dbpath=/usr/mongo-rs/node01/data

# 日志文件位置

logpath=/usr/mongo-rs/node01/logs/mongodb.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork=true

bind_ip=192.168.56.104

port=27006

# 副本集名字

replSet=rs002

# 有此配置,要先启动配置服务

shardsvr=true

 

同理,在虚拟机104下的node02、node03下也添加配置文件

 

启动虚拟机102、103、104下的mongo服务

先启动102配置服务器的服务

再启动103和104上的服务

104上的启动截图跟103一样

 

然后登录任一个配置服务,命令如下:

mongo 192.168.56.102:28001

use admin

cfg={_id:"configsvr",members: [{_id:0,host:"192.168.56.102:28001"},{_id:1,host:"192.168.56.102:28002"}]}

rs.initiate(cfg)

 

再登录103下的rs001的任一服务

mongo 192.168.56.103:27003

执行:

config={_id:'rs001', members: [{_id:0, host: '192.168.56.103:27003'},{_id: 1, host: '192.168.56.103:27004'},{_id: 2, host:'192.168.56.103:27005'}]}

rs.initiate(config)

同理,登录104上的rs002的任意服务

执行:

config={_id:'rs002', members: [{_id:0, host: '192.168.56.104:27006'},{_id: 1, host: '192.168.56.104:27007'},{_id: 2, host:'192.168.56.104:27008'}]}

rs.initiate(config)

 

配置路由服务器

在101虚拟机中的文件夹/usr/mongo-router/node01下添加配置文件mongodb.cfg,内容如下:

 

# 配置服务器副本集名字和地址

configdb=configsvr/192.168.56.102:28001,192.168.56.102:28002

# 日志文件位置

logpath=/usr/mongo-router/node01/logs/mongodb.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork=true

bind_ip=192.168.56.101

port=30000

 

然后启动路由服务

注意,此处不用mongod,而是用mongos

然后登录到路由服务器

mongo 192.168.56.101:30000

然后添加数据副本集

sh.addShard("rs001/192.168.56.103:27003")

sh.addShard("rs002/192.168.56.104:27006")

 

 

验证

再接着执行如下命令:

use testdb

sh.enableSharding("testdb")

sh.shardCollection("testdb.goods",{name:"hashed"})

for(var i=1;i<=1000;i++) db.goods.insert({name:"name"+i,seq:i})

 

会在虚拟机103、104下的主库下创建testdb,创建goods这个Collection,还有1000条数据,平均分布在rs001和rs002

db.goods.count()的值为1000

 

可以登录rs001和rs002里任一个库去验证一下

 

注意,登录rs001和rs002里的主库是没问题的

mongo 192.168.56.103:27003

use testdb

db.goods.count()

结果516条

 

mongo 192.168.56.104:27006

use testdb

db.goods.count()

结果484条

 

如果是从库,登录后,先执行如下命令:

db.getMongo().setSlaveOk()

再查数据数量

use testdb

db.goods.count()

结果显示跟主库一致

-----------------------------------------------------------------------------------------------------------

有错误请指正,3Q~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值