mongodb集群半自动化部署

 

2.3.1 初始化操作

2.3.1.1、openssl必备版本

查看所有机器的 openssl的版本,如果版本低于OpenSSL 1.0.1e-fips 11 Feb 2013,请安装openssl-devel.x86_64

具体操作命令如下

# openssl version //查看openssl当前版本

# yum install openssl-devel.x86_64 //从库里面安装依赖包

# rpm -e openssl-devel-1.0.0-27.el6.x86_64 //卸载相关依赖包(如果安装的opendevel版本是1.0.0)

# openssl rpm -Uvh openssl-1.0.1e-48.el6.x86_64.rpm //升级依赖包

2.3.1.2 服务器时间同步

所有安装mongodb的linux系统时间不能相差太远,相差太远会报错,如下:

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

# date -s '2016-09-18 10:48:00' //修改所有mongodb的时间

2.3.1.3关闭防火墙

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

# service iptables stop //关闭防火墙

2.3.2、安装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.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.4、安装Shards

Shard可以跟mongos,config分开机器部署

在Server1,Server2,Server3分别执行下面三条脚本

1、

$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

 

 

2、

$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

 

3、

$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.5、定义分片副本集

任意一台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.6、分片串联路由

目前搭建了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.7、分片策略生成

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

 

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

转载于:https://my.oschina.net/u/3036707/blog/786816

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值