mongodb集群半自动化部署

 

2.3.1 初始化操做

2.3.1.一、openssl必备版本

查看全部机器的 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 //升级依赖包日志

2.3.1.2 服务器时间同步

全部安装mongodb的linux系统时间不能相差太远,相差太远会报错,以下:server

# date//查看时间执行脚本索引

# date -s '2016-09-18 10:48:00' //修改全部mongodb的时间ip

2.3.1.3关闭防火墙

# server iptables status //产看防火墙状态                                                 ssl

# service iptables stop //关闭防火墙

2.3.二、安装config

注:(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

 

2.3.三、安装路由mongos

路由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

2.3.四、安装Shards

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

2.3.五、定义分片副本集

任意一台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

 

 

2.3.六、分片串联路由

目前搭建了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

 

2.3.七、分片策略生成

分片须要指定表,且必须指定按照维度分片,维度必须建索引

 

# $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字段的散列值做为散列索引,它将提供集群中文档的均匀分布。

相关文章
相关标签/搜索