MongoDB安装配置指南
目录
目录
1.. 概述...................................................................................................... 4
2.. 安装包.................................................................................................. 6
3.. 安装过程............................................................................................... 7
3.1 端口规划............................................................................................................. 7
3.2 目录规划............................................................................................................. 8
3.3 安装步骤............................................................................................................. 8
4.. MongoDB启停................................................................................... 9
4.1 启动.................................................................................................................... 9
4.1.1 集群启动顺序................................................................................................. 9
4.2 停止.................................................................................................................... 9
4.3 重启.................................................................................................................. 10
4.4 状态.................................................................................................................. 10
5.. MogonDB配置................................................................................. 10
5.1 修改系统参数.................................................................................................... 10
5.2 设置NTP对时.................................................................................................. 10
5.3 设置分片副本集................................................................................................ 11
5.4 串联路由服务器与分配副本集........................................................................... 13
5.5 设置分片规则.................................................................................................... 15
6.. MogonDB测试................................................................................. 16
6.1 使用mongo客户端测试................................................................................... 16
6.2 使用Java客户端测试....................................................................................... 18
7.. MogonDB集群状态查看.................................................................... 19
1 概述
搭建一个MongoDB集群环境至少需要3台服务器,从图中可以看出该集群中有3个组件mongos、Config Server、Shard、Replica Set。
Mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
Config Server:顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从Config Server加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个Config Server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。
Shard:是分片,一台机器的一个数据表Collection1存储了1T数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况!
Replica Set:是副本集,是MongoDB提高系统高可用的一种机制。生产环境通常是 2个副本 + 1个仲裁。
由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看一下主服务器挂掉后的架构:
副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器。
2 安装包
安装包 | 安装包来源 |
mongodb-3.2.13.tar.gz | ftp://ottro:ottro123@ftp.jiaxincloud.com/1.jiaxin/2.middleware/7.MongoDB/mongodb-3.2.13.tar.gz |
3 安装过程
规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
这个端口可以自由定义,在本文 mongos为 20000, Config Server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.
【注意:现网部署,暂时可以先只用shardsvr1分片;如需扩展,需要额外机器再来装】
3.1 端口规划
集群模式下
Mongos | ConfigServer | ShardServer |
20000 | 21000 | 22001 |
单机模式下
Mongod |
27017 |
3.2 目录规划
安装目录 | 数据目录 |
/usr/local/jiaxin/mongodb-3.2.13 | /usr/local/jiaxin/mongodb-3.2.13/db |
3.3 安装步骤
1解压mongodb-3.2.13.tar.gz到/usr/local/jiaxin目录。
tar xvf mongodb-3.2.13.tar.gz-C /usr/local/jiaxin/
2 进到/usr/local/mongodb-3.2.13目录下,执行ll查看目录下文件内容如下:
bin:该目录下是mongodb可执行程序,例如mongod,mongos等程序。
conf:该目录下是mongodb集群的配置文件,包括mongod-alone.conf, mongos.conf,mongodb-configsvr.conf、mongodb-shardsvr1.conf、mongodb-shardsvr2.conf、mongodb-shardsvr3.conf,如果部署的环境已经配置好了hosts文件,并且对应的服务器名称也是mongo1、mongo2、mongo3,每台节点上根据实际机器名修改各个conf文件,除此之外不需要修改其他内容就可以启动运行,但是,数据库存储位置可能会根据不同环境进行修改。【注:mongodb相关配置调优,需要额外修改配置参数】
db:该目录是默认数据库存储路径,可以修改conf相关修改db存储位置。【注:如果挂载SSD,则需要修改conf下面配置文件,安装之前得把所有mongdb主机之间做秘钥认证】
log:日志文件路径
admin.sh:mongdb启动、停止、重启、监控的管理脚本。
mongod-alone.sh: mongodb单节点管理脚本。
mongod-configsvr.sh:配置服务器的管理脚本,由admin.sh调用。
mongod-shardsvr1.sh:副本集1管理脚本,由admin.sh调用。
mongos.sh:路由器的管理脚本,由admin.sh调用。
4 MongoDB启停
通过admin.sh进行交互是命令管理mongodb进程,也可以通过mongod-alone.sh, mongod-configsvr.sh, mongod-shardsvr1.sh, mongos.sh脚本进行管理。
4.1 启动
1. mongod-alone.sh start
2. 通过admin.sh交互式命令停止
4.1.1 集群启动顺序
如果是MongoDB集群模式下,启动顺序为:
mongod-configsvr.sh à mongod-shardsvr1 à mongos
启动后,检查各个进程的运行状态。(mongod-configsvr启动后监听端口让mongos进城来连接,mongod-shardsvr1负责存储数据)
4.2 停止
1. mongod-alone.sh stop
2. 通过admin.sh交互式命令停止
4.3 重启
1. mongod-alone.shrestart
2. 通过admin.sh交互式命令重启
4.4 状态
1. mongod-alone.sh status
2. 通过admin.sh交互式命令查看状态
5 MogonDB配置
5.1 修改系统参数
1. ** WARNING: You are running this process as the root user, which is not recommended. 可暂时忽略。 2. ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. ** We suggest setting it to 'never' #> echo never > /sys/kernel/mm/transparent_hugepage/enabled
3. ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. ** We suggest setting it to 'never' #> echo never > /sys/kernel/mm/transparent_hugepage/defrag |
5.2 设置NTP对时
阿里云服务器已经默认配置了NTP对时,可以跳过此步。如果是自建服务器或者其他平台的云服务器,需要配置NTP对时,保证所有节点的系统时间是同步的。
配置方法请参考 http://svn.jiaxincloud.com:8086/svn/ott/trunk/ops/1 佳信产品运维/8 运维工具/4 NTP对时/搭建NTP服务实现时间同步.docx
5.3 设置分片副本集
使用mongo命令连接到不同的mongodb上,修改副本集配置(例如mongo1),执行过程如下:
#登录mongo1,设置分片副本集 ./bin/mongomongo1:22001 #使用admin数据库
use admin #定义副本集配置,注意_id的值和conf/mongod-shardsvr1.conf中replSetName的值保持一致。 config = { _id:"shardsvr1", members:[ {_id:0,host:"mongo1:22001"}, {_id:1,host:"mongo2:22001"}, {_id:2,host:"mongo3:22001",arbiterOnly:true} ] } #初始化副本集配置 rs.initiate(config);
#查看副本集状态 rs.status(); |
5.4 串联路由服务器与分配副本集
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。执行过程如下:
#连接到mongo1上的mongos ./bin/mongo mongo1:20000 #使用admin数据库 use admin #串联路由服务器与分配副本集1 db.runCommand({addshard: "shardsvr1/mongo1:22001,mongo2:22001,mongo3:22001"}); #查看分片服务器的配置,因为mongo3是shardsvr1分片副本集的仲裁节点,所以在上面结果没有列出来。 db.runCommand( { listshards : 1 } );
# 如果要删除分片,可以如下执行。 db.runCommand({removeshard:"shardsvr2/mongo2:22002,mongo3:22002"}) 集群对于删除节点,也会将被删除节点上的数据迁移到其他的节点上面。"draining" : true, --正在迁移数据 |
5.5 设置分片规则
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片,连接在mongos上,准备让指定的数据库、指定的集合分片生效。
#连接到mongos ./bin/mongo mongo1:20000 #使用admin数据库 use admin
#指定testdb分片生效,指定数据库里需要分片的集合和片键,分片策略:采用哈希分片方法 sh.enableSharding("testdb") sh.shardCollection("testdb.table1", {id: "hashed"}) |
6 MogonDB测试
6.1 使用mongo客户端测试
#连接mongos服务器 /usr/local/mongodb-cluster-shard-ubuntu/bin/mongomongo1:20000 #使用testdb use testdb; #插入测试数据 for (var i = 1; i <= 100000; i++)db.table1.save({id:i,"test1":"testval1"}); #查看分片情况如下,部分无关信息省掉了 db.table1.stats();
#结果如下,可以看出每个分片基本均分了数据 { "sharded" : true, "ns" : "testdb.table1", "count" : 100000, "numExtents" : 13, "size" : 5600000, "storageSize" : 22372352, "totalIndexSize" : 6213760, "indexSizes" : { "_id_" : 3335808, "id_1" : 2877952 }, "avgObjSize" : 56, "nindexes" : 2, "nchunks" : 3, "shards" : { "shard1" : { "ns" : "testdb.table1", "count" : 42183, "size" : 0, ... "ok" : 1 }, "shard2" : { "ns" : "testdb.table1", "count" : 38937, "size" : 2180472, ... "ok" : 1 }, "shard3" : { "ns" : "testdb.table1", "count" :18880, "size" : 3419528, ... "ok" : 1 } }, "ok" : 1 } |
6.2 使用Java客户端测试
Java程序调用分片集群,因为我们配置了三个mongos作为入口,就算其中哪个入口挂掉了都没关系,使用集群客户端程序如下:
public class TestMongoDBShards { public static void main(String[] args) { try { List<ServerAddress> addresses = new ArrayList<ServerAddress>(); ServerAddress address1 = new ServerAddress("mongo1" , 20000); ServerAddress address2 = new ServerAddress("mongo2" , 20000); ServerAddress address3 = new ServerAddress("mongo3" , 20000); addresses.add(address1); addresses.add(address2); addresses.add(address3);
MongoClient client = new MongoClient(addresses); DB db = client.getDB( "testdb" ); DBCollection coll = db.getCollection( "table1" );
BasicDBObject object = new BasicDBObject(); object.append( "id" , 1); DBObject dbObject = coll.findOne(object); System. out .println(dbObject); } catch (Exception e) { e.printStackTrace(); } } } |
7 MogonDB集群状态查看
#连接到mongos /usr/local/mongodb-cluster-shard-ubuntu/bin/mongo mongo1:20000 #查看集群状态 mongos>printShardingStatus()# 或者sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("589d46887ccae4def0da4692") } shards: { "_id" : "shardsvr1", "host" : "shardsvr1/u21:22001,u22:22001" } active mongoses: "3.2.9" : 3 balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 5 Last reported error: could not find host matching read preference { mode: "primary" } for set shardsvr1 Time of Reported error: Fri Feb 24 2017 20:27:20 GMT+0800 (CST) Migration Results for the last 24 hours: No recent migrations databases: { "_id" : "jiaxin_gw_archive", "primary" : "shardsvr1", "partitioned" : false }
|
- 点赞
- 收藏
- 关注作者
评论(0)