MongoDB安装和分片集群配置

本文详细介绍了MongoDB的安装步骤,包括下载、配置环境变量、数据存储与日志设置,以及如何启动单个服务和配置分片、副本集、路由服务器和启用分片的过程。最后展示了如何通过命令行操作进行分片配置和测试验证。

#########################################################
mongoDB 数据库安装
#########################################################

1、下载
#wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.5.tgz

2、解压
#tar -zxvf mongodb-linux-x86_64-rhel70-4.2.5.tgz
#mv mongodb-linux-x86_64-rhel70-4.2.5 mongodb

3、配置加到环境变量中
#vi /etc/profile
把这条复制到profile配置文件中 注意目录要对应安装的目录
export PATH=/home/mongodb/bin:$PATH
使修改生效
#source /etc/profile

4、创建MongoDB数据存储位置
mkdir /home/mongodb/data
创建MongoDB日志存储位置
mkdir /home/mongodb/log

5、进入mongodb目录下编辑mongodb的配置文件
#cd /home/mongodb/
#vi mongodb.conf

######mongodb 配置文件#####
port=27017 #端口
bind_ip=192.168.106.129 #默认是127.0.0.1
dbpath=/home/mongodb/data #数据库存放
logpath=/home/mongodb/log/mongodb.log #日志文件
fork=true #设置后台运行
#auth=true #开启认证

6、bin目录启动mongod数据库服务,以配置文件的方式启动
mongod -f mongodb.conf

客户端连接MongoDB
#mongo

指定ip和端口
#mongo mongodb://192.168.106.129:27017

7、测试
浏览器输入本机ip地址测试 http://192.168.3.44:27017/
It looks like you are trying to access MongoDB over HTTP on the native driver port.

#########################################################
分片安装配置
###########################################################
在这里插入图片描述
#vi /etc/profile
export PATH=/home/mongodb/bin:$PATH
#source /etc/profile

config server配置服务器( configsvr角色)
mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。

添加配置文件
新建目录
#mkdir -p /home/mongodb/data/configsvr

#vi /home/mongodb/conf/configsvr.conf

systemLog:
  destination: file
  logAppend: true
  path: "/home/mongodb/log/mongodb.log" 
storage:
  dbPath: "/home/mongodb/data/configsvr"
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 28017
  bindIp: 0.0.0.0
replication:
  replSetName: F1008
sharding:
  clusterRole: configsvr
 

配置文件发送到其他两台
#scp -r /home/mongodb/conf 192.168.106.129:/home/mongodb/
#scp -r /home/mongodb/conf 192.168.106.130:/home/mongodb/

启动三台服务器的configsvr角色(三台都要启动)

#mongod -f /home/mongodb/conf/configsvr.conf
about to fork child process, waiting until server is ready for connections.
forked process: 27999
child process started successfully, parent exiting

####################################
登录任意一台配置服务器,初始化配置副本集
***如果配置报错,应该是服务器之前端口不通,确保已停用防火墙和安全配置
#vi /etc/selinux/config

SELINUX=disabled

#chkconfig firewalld off
#service firewalld.service stop

#连接
#mongo --port 28017
#config变量

config={ _id:“F1008”,configsvr: true,members:[{_id:0,host:“192.168.10.3:28017”},{_id:1,host:“192.168.10.4:28017”},{_id:2,host:“192.168.10.5:28017”}]};

#初始化副本集

rs.initiate(config)
{ “ok” : 1 }

#查看状态

rs.status()

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

####################################
三台机器分别配置分片副本集( shard角色 )

一、设置三个分片副本集
在每台机器分别配置三个shard1.conf shard2.conf shard3.conf(修改对应配置文件的shard编号和端口)

#vi /home/mongodb/conf/shard1.conf

#配置文件内容
systemLog:
destination: file
logAppend: true
path: /home/mongodb/log/shard1.log
storage:
dbPath: /home/mongodb/data/shard1/data
journal:
enabled: true
processManagement:
fork: true
net:
port: 29017
bindIp: 0.0.0.0
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr

#scp /home/mongodb/conf/shard1.conf 192.168.106.129:/home/mongodb/conf
#scp /home/mongodb/conf/shard1.conf 192.168.106.130:/home/mongodb/conf

【启动三台服务器的shard1 server(三台都要启动)】
#mongod -f /home/mongodb/conf/shard1.conf

登陆任意一台服务器,初始化副本集
#mongo --port 29017

use admin #使用admin数据库

#定义副本集配置

config = {_id:“shard1”,members:[{_id : 0, host : “192.168.106.129:29017” },{_id : 1, host : “192.168.106.130:29017” },{_id : 2, host : “192.168.106.131:29017” }]};

#初始化副本集配置

rs.initiate(config);
{ “ok” : 1 }

【分别启动三台服务器的shard2 server】
#mongod -f /home/mongodb/conf/shard2.conf
登陆任意一台服务器,初始化副本集
#mongo --port 29018

use admin #使用admin数据库

#定义副本集配置

config = {_id:“shard2”,members:[{_id : 0, host : “192.168.106.129:29018” },{_id : 1, host : “192.168.106.130:29018” },{_id : 2, host : “192.168.106.131:29018” }]};

#初始化副本集配置

rs.initiate(config);
{ “ok” : 1 }

【分别启动三台服务器的shard2 server】
#mongod -f /home/mongodb/conf/shard3.conf
登陆任意一台服务器,初始化副本集
#mongo --port 29019

use admin #使用admin数据库

#定义副本集配置

config = {_id:“shard3”,members:[{_id : 0, host : “192.168.106.129:29019” },{_id : 1, host : “192.168.106.130:29019” },{_id : 2, host : “192.168.106.131:29019” }]};

#初始化副本集配置

rs.initiate(config);
{ “ok” : 1 }

二、配置路由服务器mongos(路由角色)
mongodb中的router(mongos)角色只负责提供一个入口,不存储任何的数据,router最重要的配置是指定configsvr的地址,使用副本集ip+端口的方式指定配置多个router,任何一个都能正常的获取数据。
#vi /home/mongodb/conf/mongos.conf
#配置文件内容如下:

systemLog:
  destination: file
  logAppend: true
  path: /home/mongodb/log/mongos.log
processManagement:
  fork: true
net:
  port: 27017
  bindIp: 0.0.0.0
sharding:
  configDB: F1008/192.168.106.129:28017,192.168.106.130:28017,192.168.106.131:28017

启动三台服务器的mongos server

#mongos -f /home/mongodb/conf/mongos.conf

至此,以上三种角色的服务都已经创建并启动成功。

三、启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos,给分片集群添加数据角色,数据角色为副本集的方式。

#mongo --port 27017

mongos> use  admin

#串联路由服务器与分配副本集
mongos> sh.addShard("shard1/192.168.106.129:29017,192.168.106.130:29017,192.168.106.131:29017")
mongos> sh.addShard("shard2/192.168.106.129:29018,192.168.106.130:29018,192.168.106.131:29018")
mongos> sh.addShard("shard3/192.168.106.129:29019,192.168.106.130:29019,192.168.106.131:29019")
mongos> sh.status() 

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

#针对某个数据库的某个表使用hash分片存储,分片存储就会同一个colloection分配两个数据角色

mongos> use admin
mongos> db.runCommand( { enablesharding :"F1008"});
#指定数据库里需要分片的集合和片键
mongos> db.runCommand( { shardcollection : "F1008.myuser",key : {_id: "hashed"} } )
mongos> exit

我们设置F1008的 myuser表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。
测试分片配置结果
#mongo --port 27017

#插入测试数据
mongos> use F1008
mongos> for(i=1; i<=500;i++){db.myuser.insert( {name:'mytest'+i, age:i} )}
mongos> db.myuser.count()
500        

#我们可以通过路由角色看到插入到了500条记录。

通过mongodb可视化工具 MongoDB Compass
可以查看mongo分片上的数据库信息

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值