mongodb集群Replica Set +Sharding高可用集群搭建(含认证)

一、概述

1、架构

2、唠叨概念

Replica Set

中文翻译:副本集

简单的说集群中包含了多份数据,保证主节点挂掉了,备用节点继续提供数据服务,提供的前提就是数据需要主节点一致

仲裁节点是一种特殊的节点,它本身不存储数据,主要的作用是决定哪一个备用节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。

这里虽然只有备节点,但是仍然需要一个仲裁节点来提升节点级别。我开始也不相信必须要有仲裁节点,但是自已也试过如果没有仲裁节点的话

主节点挂掉后,备节点还是备节点,所以咱们还需要它的。

主节点和备用节点

主备节点存储数据,仲裁节点不存储数据

默认情况:主节点提供增删查改功能,备节点不提供任何服务。但是可以设置备节点提供查询功能,这样就可以减少主节点的压力,当客户端进行数据查询时

请求自动转到备用节点上,这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库操作。

二、地址和服务规划

192.168.0.178 master mongos:20000 config:21000 shard1:22001 shard2:22002 shard3:22003

192.168.0.180 slave1 mongos:20000 config:21000 shard1:22001 shard2:22002 shard3:22003

192.168.0.181 slave2 mongos:20000 config:21000 shard1:22001 shard2:22002 shard3:22003

三、版本介绍

操作系统版本:CentOS 6.4 64bit

mongodb版本:2.6.1 二进制通用包

四、准备工作

1、关闭iptables和selinux防火墙

2、主机名互为解析(可参考,非必须)

3、服务器之间时间同步(重点)

4、创建数据和日志存储目录

mkdir-p/data/mongodbcd/data/mongodbmkdirmongosmkdirmongos/logmkdirconfigmkdirconfig/{data,log}mkdirshard1mkdirshard1/{data,log}mkdirshard2mkdirshard2/{data,log}mkdirshard3mkdirshard3/{data,log}cd~

五、mongodb安装配置

1、下载mongodb安装包

官网下载地址:

2、下载解压mongodb二进制通用包,解压后就能使用

tar xf mongodb-linux-x86_64-2.6.1.tgz -C /usr/local/

cd /usr/local/

ln -sv mongodb-linux-x86_64-2.6.1 mongodb

3、配置mongodb环境变量

cat > /etc/profile.d/mongodb.sh << EOF

export MONGODB_HOME=/usr/local/mongodb

export PATH=\$PATH:\$MONGODB_HOME/bin

EOF

source /etc/profile.d/mongodb.sh

六、启动服务

1、分别在master、slave1和slave2服务器上启动配置服务器

mongod –configsvr –dbpath /data/mongodb/config/data –port 21000 –logpath /data/mongodb/config/log/config.log –fork

2、分别在master、slave1和slave2服务器上启动mongos服务器

mongos –configdb 192.168.0.178:21000,192.168.0.180:21000,192.168.0.181:21000 –port 20000 –logpath /data/mongodb/mongos/log/mongos.log –fork

3、分别在master、slave1和slave2服务器上配置分片副本集

mongod –shardsvr –replSet shard1 –port 22001 –dbpath /data/mongodb/shard1/data –logpath /data/mongodb/shard1/log/shard1.log –fork –nojournal –oplogSize 10

mongod –shardsvr –replSet shard2 –port 22002 –dbpath /data/mongodb/shard2/data –logpath /data/mongodb/shard1/log/shard2.log –fork –nojournal –oplogSize 10

mongod –shardsvr –replSet shard3 –port 22003 –dbpath /data/mongodb/shard3/data –logpath /data/mongodb/shard1/log/shard3.log –fork –nojournal –oplogSize 10

4、登陆任意一台mongodb服务器,比如

###设置第一个分片副本集,必须使用admin数据库

mongo 192.168.0.178:22001/admin

#定义副本集

> config = { _id:”shard1″, members:[

{_id:0,host:”192.168.0.178:22001″,priority:1},

{_id:1,host:”192.168.0.180:22001″,priority:2},

{_id:2,host:”192.168.0.181:22001″,arbiterOnly:true}

]

}

#初始化副本集

> rs.initiate(config);

###设置第二个分片副本集,必须使用admin数据库

mongo 192.168.0.180:22002/admin

#定义副本集

> config = { _id:”shard2″, members:[

{_id:0,host:”192.168.0.178:22002″,arbiterOnly:true},

{_id:1,host:”192.168.0.180:22002″,priority:1},

{_id:2,host:”192.168.0.181:22002″,priority:1}

]

}

#初始化副本集

> rs.initiate(config);

###设置第三个分片副本集,必须使用admin数据库

mongo 192.168.0.181:22003/admin

#定义副本集

> config = { _id:”shard3″, members:[

{_id:0,host:”192.168.0.178:22003″,priority:2},

{_id:1,host:”192.168.0.180:22003″,arbiterOnly:true},

{_id:2,host:”192.168.0.181:22003″,priority:1}

]

}

#初始化副本集

> rs.initiate(config);

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

mongo 192.168.0.178:20000/admin

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

db.runCommand( { addshard : “shard1/192.168.0.178:22001,192.168.0.180:22001,192.168.0.181:22001”});

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

db.runCommand( { addshard : “shard2/192.168.0.178:22002,192.168.0.180:22002,192.168.0.181:22002”});

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

db.runCommand( { addshard : “shard3/192.168.0.178:22003,192.168.0.180:22003,192.168.0.181:22003”});

6、查看分片服务器配置

db.runCommand({listshards : 1 });

命令输出结果

mongos> db.runCommand({listshards : 1 });

{

“shards” : [

{

“_id” : “shard1”,

“host” : “shard1/192.168.0.178:22001,192.168.0.180:22001”

},

{

“_id” : “shard2”,

“host” : “shard2/192.168.0.178:22002,192.168.0.180:22002”

},

{

“_id” : “shard3”,

“host” : “shard3/192.168.0.178:22003,192.168.0.180:22003”

}

],

“ok” : 1

}

因为192.168.0.181是每个分片副本集的仲裁节点,所以在上面结果没有列出来。

7、目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,,数据能够自动分片,就差那么一点点,一点点。。。

连接在mongos上,准备让指定的数据库、指定的集合分片生效。

#指定uba分片生效

db.runCommand( { enablesharding :”uba”});

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

db.runCommand( { shardcollection : “uba.table1”,key : {id: 1} } )

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

己欲立先立人,已欲达先达人。

mongodb集群Replica Set +Sharding高可用集群搭建(含认证)

相关文章:

你感兴趣的文章:

标签云: