查看全部机器的 openssl的版本,若是版本低于OpenSSL 1.0.1e-fips 11 Feb 2013,请安装openssl-devel.x86_64linux
具体操做命令以下mongodb
# openssl version //查看openssl当前版本服务器 # yum install openssl-devel.x86_64 //从库里面安装依赖包app # rpm -e openssl-devel-1.0.0-27.el6.x86_64 //卸载相关依赖包(若是安装的opendevel版本是1.0.0)spa # openssl rpm -Uvh openssl-1.0.1e-48.el6.x86_64.rpm //升级依赖包日志 |
全部安装mongodb的linux系统时间不能相差太远,相差太远会报错,以下:server
# date//查看时间执行脚本索引 # date -s '2016-09-18 10:48:00' //修改全部mongodb的时间ip |
# server iptables status //产看防火墙状态 ssl # service iptables stop //关闭防火墙 |
注:(1)脚本执行时,Server1,Server2,Server3分别用对应服务器的ip地址替换,本文档涉及到的的脚本执行,都需这样替换
(2)如下文档中要执行的脚本涉及到的$MONGODB_PATH为mongodb根目录,$MONGODB_DATA_CONFIGSVR_DIR为数据存储目录,须要先自定义建立好,脚本执行前,须要用对应的目录替换$MONGODB_DATA_CONFIGSVR_DIR
(3)如下文档中要执行的脚本涉及到$MONGODB_LOG_MONGOS_DIR为日志文件存储目录,须要先自定义建立好,脚本执行前,须要用对应的目录替换$MONGODB_LOG_MONGOS_DIR
(4)如下文档中要执行的脚本涉及到$MONGODB_DATA_SHARD1_DIR为SHARD数据文件存储目录,须要先自定义建立好,脚本执行前,须要用对应的目录替换$MONGODB_DATA_SHARD1_DIR
(5)如下文档中要执行的脚本涉及到$MONGODB_LOG_SHARD1_DIR为SHARD日志文件存储目录,须要先自定义建立好,脚本执行前,须要用对应的目录替换$MONGODB_LOG_MONGOS_DIR
(6)$MONGODB_DATA_SHARD2_DIR和$MONGODB_LOG_SHARD2_DIR;$MONGODB_DATA_SHARD3_DIR和$MONGODB_LOG_SHARD3_DIR同以上第五步的说明
在Server1,Server2,Server3分别执行如下脚本命令
$MONGODB_PATH/bin/mongod --configsvr --port 21000 --dbpath $MONGODB_DATA_CONFIGSVR_DIR –logpath |
路由mongs跟config共用三台机器Server1,Server2,Server3,也能够分开机器部署;在Server1,Server2,Server3分别执行以下脚本命令:
$MONGODB_PATH/bin/mongos-configdb Server1:21000,Server2:21000,Server3:21000 -port 20000 -logpath $MONGODB_LOG_MONGOS_DIR/mongos.log -logappend -fork |
Shard能够跟mongos,config分开机器部署
在Server1,Server2,Server3分别执行下面三条脚本
一、
$MONGODB_PATH/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath $MONGODB_DATA_SHARD1_DIR --logpath $MONGODB_LOG_SHARD1_DIR/${shardname}.log --fork --nojournal --oplogSize 2000
|
二、
$MONGODB_PATH/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath $MONGODB_DATA_SHARD2_DIR --logpath $MONGODB_LOG_SHARD2_DIR/${shardname}.log --fork --nojournal --oplogSize 2000
|
三、
$MONGODB_PATH/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath $MONGODB_DATA_SHARD3_DIR --logpath $MONGODB_LOG_SHARD3_DIR/${shardname}.log --fork --nojournal --oplogSize 2000 |
任意一台shard片组的机器,执行如下脚本;priority为分片权重,默认1,值越大权重越大,priority值最大的是主分片,arbiterOnly:true参数为仲裁;若是一组shard只有一主一从,必需要有个仲裁,主从才能自动切换,实现高可用
$MONGODB_PATH/bin/mongo Server1:22001 <<EOF use admin config = { _id:"shard1", members:[ {_id:0,host:"Server1:22001",priority:2},{_id:1,host:" Server2:22001"},{_id:2,host:"Server3:22001"} ] }; rs.initiate(config); EOF
$MONGODB_PATH/bin/mongo Server1:22002 <<EOF use admin config = { _id:"shard2", members:[ {_id:0,host:" Server1:22002"},{_id:1,host:"Server2:22002",priority:2},{_id:2,host:"Server3:22002"} ] }; rs.initiate(config); EOF $MONGODB_PATH/bin/mongo Server1:22003 <<EOF use admin config = { _id:"shard3", members:[ {_id:0,host:" Server1:22003"},{_id:1,host:"Server2:22003"},{_id:2,host:"Server3:22003",priority:2} ] }; rs.initiate(config); EOF |
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序链接到 mongos 路由服务器并不能使用分片机制,还须要在程序里设置分片配置,让分片生效。任意一台路由mongos执行如下脚本,串联路由跟副本集
$MONGODB_PATH/bin/mongo Server1:20000 <<EOF use admin db.runCommand( { addshard : "shard1/Server1:22001,Server2:22001,Server3:22001"}); db.runCommand( { addshard : "shard2/Server1:22002,Server2:22002,Server3:22002"}); db.runCommand( { addshard : "shard3/Server1:22003,Server2:22003,Server3:22003"}); db.runCommand( { listshards : 1 } ); EOF |
分片须要指定表,且必须指定按照维度分片,维度必须建索引
# $MONGODB_PATH/bin/mongo Server1:20000 <<EOF//链接路由mongos # use admin//使用admin # db.runCommand( { enablesharding :"testdb"});执行脚本,使分片在库testdb生效 # testdb//使用testdb
# db.testTable.ensureIndex({ "row1" : 1 },{ "name" : "row1_ind" });//生成索引 # db.testTable.ensureIndex({ "row2" : "1" },{ "name" : "row2_ind" });//生成索引 # db.testTable.ensureIndex({ "row3" : "hashed" },{ "name" : "row3_ind" });//生成索引 # use admin //使用
|
分片策略一下选择一种
使用有序分片策略
# db.runCommand( { shardcollection : "testdb.testTable",key : {row1: 1,row2: 1 } } ) |
上面这个片键经过字段row1的值进行数据分配。若是这个有大量相同的值,则会根据row2字段的值对块进行分裂。
使用散列分片策略
# db.runCommand( { shardcollection : "testdb.testTable",key : {row3: 'hashed'} } ) |
上面这个片键经过字段row3的散列值进行数据分配。MongoDB计算row3字段的散列值做为散列索引,它将提供集群中文档的均匀分布。