系统版本 Centos7
系统用户 root
MongoDB版本 3.4.2
shard:端口配置 22001:22002:22003
mongos:端口配置 20000
MongoDB下载地址:
Windows下载: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.2.tgz
Linux下载:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.2.tgz
进入 opt 目录 cd /opt
创建 soft 文件夹 mkdir soft
将下载好的mongodb-linux-x86_64-rhel70-3.2.4.tgz文件上传到服务/opt/soft 目录中
解压压缩文件 tar -zxvf soft/mongodb-linux-x86_64-rhel70-3.2.4.tgz
修改解压后的文件夹名称 mv mongodb-linux-x86_64-rhel70-3.2.4 mongodb3.4.2
进入 mongodb3.4.2 文件夹 cd mongodb3.4.2
创建所需的文件夹:
mkdir -p /opt/mongodb3.4.2/mongos/log
mkdir -p /opt/mongodb3.4.2/config/data
mkdir -p /opt/mongodb3.4.2/config/log
mkdir -p /opt/mongodb3.4.2/shard1/data
mkdir -p /opt/mongodb3.4.2/shard1/log
mkdir -p /opt/mongodb3.4.2/shard2/data
mkdir -p /opt/mongodb3.4.2/shard2/log
mkdir -p /opt/mongodb3.4.2/shard3/data
mkdir -p /opt/mongodb3.4.2/shard3/log
配置MongoDB环境变量:
配置环境变量不在 /etc/profile 文件中配置以免影响系统环境变量
重新创建一个文件在 /etc/profile.d/ 目录下,在系统启动时会执行这里以.sh结尾的文件
创建并编辑 vim /etc/profile.d/hadoop.sh 添加一下内容
export MONGODB_HOME=/opt/mongodb3.4.2 #安装MongoDB的路径
export PATH=$MONGODB_HOME/bin:$PATH
如下图:
hadoop.sh环境变量文件注意:
mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功
接下来配置MongoDB分片集群
以下配置文件每个机器都要配置
config server配置服务器:
创建配置文件 vim /opt/mongodb3.4.2/config/config.conf 添加一下内容
pidfilepath = /opt/mongodb3.4.2/config/log/configsrv.pid
dbpath = /opt/mongodb3.4.2/config/data
logpath = /opt/mongodb3.4.2/config/log/congigsrv.log
logappend = 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.conf配置文件启动三台服务器的config server :
mongod -f /opt/mongodb3.4.2/config/config.conf
登录任意一台配置服务器,初始化配置副本集 :
mongo --port 21000
#config变量
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.215.184:22001" },
{_id : 1, host : "192.168.215.185:22001" },
{_id : 2, host : "192.168.215.186:22001" }
]
}
#初始化副本集
rs.initiate(config)
exit: 退出shell
配置分片副本集(三台机器):
创建配置文件 vi /opt/mongodb3.4.2/conf/shard1.conf 添加以下内容
#配置文件内容
#——————————————–
pidfilepath = /opt/mongodb3.4.2/shard1/log/shard1.pid
dbpath = /opt/mongodb3.4.2/shard1/data
logpath = /opt/mongodb3.4.2/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 22001
fork = true
#打开web监控
httpinterface=true
rest=true
#副本集名称
replSet=shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
配置结果如下图:
shard1.conf配置文件启动三台服务器的shard1 server:
mongod -f /opt/mongodb3.4.2/config/shard1.conf
mongo --port 22001
#使用admin数据库
use admin
#初始化副本集
rs.initiate(config)
#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.215.184:22001" },
{_id : 1, host : "192.168.215.185:22001" },
{_id : 2, host : "192.168.215.186:22001" , arbiterOnly: true }
]
}
#初始化副本集配置
rs.initiate(config);
exit :退出shell
设置第二个分片副本集:
创建配置文件 vi /opt/mongodb3.4.2/conf/shard2.conf 添加以下内容
#配置文件内容
#——————————————–
pidfilepath = /opt/mongodb3.4.2/shard2/log/shard2.pid
dbpath = /opt/mongodb3.4.2/shard2/data
logpath = /opt/mongodb3.4.2/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 22002
fork = true
#打开web监控
httpinterface=true
rest=true
#副本集名称
replSet=shard2
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
配置后如下图:
shard2.conf配置文件启动三台服务器的shard1 server:
mongod -f /opt/mongodb3.4.2/config/shard2.conf
mongo --port 22002
#使用admin数据库
use admin
#初始化副本集
rs.initiate(config)
#定义副本集配置,第二个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.215.184:22002" },
{_id : 1, host : "192.168.215.185:22002", arbiterOnly: true },
{_id : 2, host : "192.168.215.186:22002" }
]
}
#初始化副本集配置
rs.initiate(config);
exit :退出shell
设置第三个分片副本集:
创建配置文件 vi /opt/mongodb3.4.2/conf/shard3.conf 添加以下内容
#配置文件内容
#——————————————–
pidfilepath = /opt/mongodb3.4.2/shard3/log/shard3.pid
dbpath = /opt/mongodb3.4.2/shard3/data
logpath = /opt/mongodb3.4.2/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 22003
fork = true
#打开web监控
httpinterface=true
rest=true
#副本集名称
replSet=shard3
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
配置后如下图:
shard3.conf配置文件启动三台服务器的shard3 server:
mongod -f /opt/mongodb3.4.2/config/shard3.conf
mongo --port 22003
#使用admin数据库
use admin
#初始化副本集
rs.initiate(config)
#定义副本集配置,第一个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.215.184:22003" , arbiterOnly: true },
{_id : 1, host : "192.168.215.185:22003" },
{_id : 2, host : "192.168.215.186:22003" }
]
}
#初始化副本集配置
rs.initiate(config);
exit :退出shell
配置路由服务器 mongos:
先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)
创建配置文件 vim /opt/mongodb3.4.2/config/mongos.conf 添加如下内容:
#内容
pidfilepath = /opt/mongodb3.4.2/mongos/log/mongos.pid
logpath = /opt/mongodb3.4.2/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/192.168.215.184:21000,192.168.215,185:21000,192.168.215.186:21000
#设置最大连接数
maxConns=20000
配置后如下图:
mongos.conf配置文件启动三台服务器的mongos server:
mongod -f /opt/mongodb3.4.2/config/mongos.conf
启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos
mongo --port 20000
#使用admin数据库
user admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.215.184:22001,192.168.215.185:22001,192.168.215.186:22001")
sh.addShard("shard2/192.168.215.184:22002,192.168.215.185:22002,192.168.215.186:22002")
sh.addShard("shard3/192.168.215.184:22003,192.168.215.185:22003,192.168.215.186:22003")
#查看集群状态
sh.status()
exit:退出shell
测试
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!
测试分片配置结果
mongo 127.0.0.1:20000
#使用 testdbuse testdb;
for (var i = 1; i <= 100000; i++){db.table1.save({id:i,"test1":"testval1"})};
#查看分片情况如下,部分无关信息省掉了
db.table1.stats();
结果自己查看,
想要数据库使用分片功能必须在创建过程中指定,默认创建的数据库不使用分片功能!!
未完待续!!!
谢谢关注
网友评论