MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建
一、架构概况
192.168.150.129
192.168.150.130
192.168.150.131
参考文档:https://www.cnblogs.com/vadim/p/7100683.html

mongos mongos mongos
Config server Config server Config server
Shared1 server 1 Shared1 server 1 副本 Shared1 server 1 仲裁/隐藏
Shared2 server 2 Shared2 server 2 副本 Shared2 server 2 仲裁/隐藏
Shared3 server 3 Shared3 server 3 副本 Shared3 server 3 仲裁/隐藏
规划5个组件对应的端口号,由于每台机器均需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。端口可以自由定义,本架构中
mongos : 20000
config server : 21000
shard11 : 22001
shard2 : 22002
shard3 : 22003
二、 系统参数配置
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag cat >> /etc/rc.local <<"EOF"
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
EOF
三、 下载解压mongodb
cd /opt/
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-v3.4-latest.tgz
# 注意系统时间同步
/usr/sbin/ntpdate ntp1.aliyun.com
tar -zxf mongodb-linux-x86_64-rhel62-v3.-latest.tgz
ln -s /opt/mongodb-linux-x86_64-rhel62-3.4.--g2b19fb5e85/ mongodb
chown -R mongodb.mongodb /opt/mongodb
四、防火墙设置
iptables -I INPUT -s 192.168.150.129/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.130/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.131/ -i eth0 -p tcp -m tcp --dport -j ACCEPT iptables -I INPUT -s 192.168.150.129/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.130/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.131/ -i eth0 -p tcp -m tcp --dport -j ACCEPT iptables -I INPUT -s 192.168.150.129/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.130/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.131/ -i eth0 -p tcp -m tcp --dport -j ACCEPT iptables -I INPUT -s 192.168.150.129/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.130/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.131/ -i eth0 -p tcp -m tcp --dport -j ACCEPT iptables -I INPUT -s 192.168.150.129/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.130/ -i eth0 -p tcp -m tcp --dport -j ACCEPT
iptables -I INPUT -s 192.168.150.131/ -i eth0 -p tcp -m tcp --dport -j ACCEPT service iptables save
service iptables reload
五、创建相应的目录
#建立mongos及日志目录
mkdir -p /data/mongodb/mongos/log #建立config server 数据文件存放目录
mkdir -p /data/mongodb/config/data
#建立config server 日志文件存放目录
mkdir -p /data/mongodb/config/log #建立shard1 数据文件存放目录
mkdir -p /data/mongodb/shard1/data
#建立shard1 日志文件存放目录
mkdir -p /data/mongodb/shard1/log #建立shard2 数据文件存放目录
mkdir -p /data/mongodb/shard2/data
#建立shard2 日志文件存放目录
mkdir -p /data/mongodb/shard2/log #建立shard3 数据文件存放目录
mkdir -p /data/mongodb/shard3/data
#建立shard3 日志文件存放目录
mkdir -p /data/mongodb/shard3/log # 创建用户
useradd mongodb
echo "mongodb" | passwd --stdin mongodb # 授权
chown -R mongodb.mongodb /data/mongodb
六、Config server配置
su - mongodb
cat >/data/mongodb/config/mongo.conf <<"EOF"
dbpath=/data/mongodb/config/data/
logpath=/data/mongodb/config/log/config.log
logappend=true
port=
fork=true
rest=false
httpinterface=true
configsvr=true
replSet=cfgReplSet
EOF # 启动方式
numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/config/mongo.conf # 查看日志
cat /data/mongodb/config/log/config.log # 连接到任意一台配置服务器上
numactl --interleave=all /opt/mongodb/bin/mongo --host 192.168.150.129 --port
创建配置服务器副本集
rs.initiate({_id:"cfgReplSet",configsvr:true,members:[{_id:,host:"192.168.150.129:21000"},{_id:,host:"192.168.150.130:21000"},{_id:,host:"192.168.150.131:21000"}]})
七、Shard server配置
# 需要在 su - mongodb
# shard1
cat > /data/mongodb/shard1/mongo.conf <<"EOF"
dbpath=/data/mongodb/shard1/data
logpath=/data/mongodb/shard1/log/shard1.log
logappend=true
port=
fork=true
rest=false
httpinterface=true
replSet=shard1ReplSet
shardsvr=true
journal=false
EOF # 启动方式
numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard1/mongo.conf # 查看日志
cat /data/mongodb/shard1/log/shard1.log # 连接任意一台分片服务器
/opt/mongodb/bin/mongo --host 192.168.150.129 --port
# 创建副本集并初始化
rs.initiate({_id:"shard1ReplSet",members:[{_id:,host:"192.168.150.129:22001"},{_id:,host:"192.168.150.130:22001"},{_id:,host:"192.168.150.131:22001"}]}) # shard2
# 需要在 su - mongodb
cat > /data/mongodb/shard2/mongo.conf <<"EOF"
dbpath=/data/mongodb/shard2/data
logpath=/data/mongodb/shard2/log/shard2.log
logappend=true
port=
fork=true
rest=false
httpinterface=true
replSet=shard2ReplSet
shardsvr=true
journal=false
EOF # 启动方式
numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard2/mongo.conf # 查看日志
cat /data/mongodb/shard2/log/shard2.log # 连接任意一台分片服务器
/opt/mongodb/bin/mongo --host 192.168.150.129 --port
# 创建副本集并初始化
rs.initiate({_id:"shard2ReplSet",members:[{_id:,host:"192.168.150.129:22002"},{_id:,host:"192.168.150.130:22002"},{_id:,host:"192.168.150.131:22002"}]}) # shard3
# 需要在 su - mongodb
cat > /data/mongodb/shard3/mongo.conf <<"EOF"
dbpath=/data/mongodb/shard3/data
logpath=/data/mongodb/shard3/log/shard3.log
logappend=true
port=
fork=true
rest=false
httpinterface=true
replSet=shard3ReplSet
shardsvr=true
journal=false
EOF # 启动方式
numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard3/mongo.conf # 查看日志
cat /data/mongodb/shard3/log/shard3.log # 连接任意一台分片服务器
/opt/mongodb/bin/mongo --host 192.168.150.129 --port
# 创建副本集并初始化
rs.initiate({_id:"shard3ReplSet",members:[{_id:,host:"192.168.150.129:22003"},{_id:,host:"192.168.150.130:22003"},{_id:,host:"192.168.150.131:22003"}]})
八、Mongos配置
# 需要在 su - mongodb
cat >/data/mongodb/mongos/mongo.conf <<"EOF"
logpath=/data/mongodb/mongos/log/mongos.log
logappend=true
port=
fork=true
configdb=cfgReplSet/192.168.150.129:,192.168.150.130:,192.168.150.131:
EOF # 启动服务
numactl --interleave=all /opt/mongodb/bin/mongos -f /data/mongodb/mongos/mongo.conf # 查看日志
cat /data/mongodb/mongos/log/mongos.log
九、添加分片到集群
# 登录路由服务客户端
/opt/mongodb/bin/mongo --host 192.168.150.129 --port
#添加分片到集群
mongos> sh.addShard("shard1ReplSet/192.168.150.129:22001,192.168.150.130:22001,192.168.150.131:22001")
# 依次添加shard2 shard3
mongos> sh.addShard("shard2ReplSet/192.168.150.129:22002,192.168.150.130:22002,192.168.150.131:22002")
mongos> sh.addShard("shard3ReplSet/192.168.150.129:22003,192.168.150.130:22003,192.168.150.131:22003") # Enable Sharding for a Database
sh.enableSharding("test") # Shard a Collection
sh.shardCollection("test.testdoc", { id: })
十、测试
/opt/mongodb/bin/mongo --host 192.168.150.129 --port
# 插入测试数据
mongos> use test
for(var i = ; i <= ; i++){
db.testdoc.save({id:i,"message":"message"+i});
}
mongos> db.testdoc.stats()
十一、快捷使用方式
# 快捷启动方式
cat >>/home/mongodb/.bashrc <<"EOF"
alias mongodb_shard1.start='numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard1/mongo.conf'
alias mongodb_shard2.start='numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard2/mongo.conf'
alias mongodb_shard3.start='numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/shard3/mongo.conf'
alias mongodb_config.start='numactl --interleave=all /opt/mongodb/bin/mongod -f /data/mongodb/config/mongo.conf'
alias mongodb_mongos.start='numactl --interleave=all /opt/mongodb/bin/mongos -f /data/mongodb/mongos/mongo.conf'
EOF
source /home/mongodb/.bash_profile # 快捷登陆方式
# /opt/mongodb/bin/mongo --host 127.0.0.1 --port # shard1
# /opt/mongodb/bin/mongo --host 127.0.0.1 --port # shard1
# /opt/mongodb/bin/mongo --host 127.0.0.1 --port # shard1
# /opt/mongodb/bin/mongo --host 127.0.0.1 --port # config server
# /opt/mongodb/bin/mongo --host 127.0.0.1 --port # mongos cat >>/home/mongodb/.bashrc <<"EOF"
alias mongodb_shard1.login='/opt/mongodb/bin/mongo --host 127.0.0.1 --port 22001'
alias mongodb_shard2.login='/opt/mongodb/bin/mongo --host 127.0.0.1 --port 22002'
alias mongodb_shard3.login='/opt/mongodb/bin/mongo --host 127.0.0.1 --port 22003'
alias mongodb_config.login='/opt/mongodb/bin/mongo --host 127.0.0.1 --port 21000'
alias mongodb_mongos.login='/opt/mongodb/bin/mongo --host 127.0.0.1 --port 20000'
EOF
source /home/mongodb/.bash_profile
十二、副本集手工主从切换
# 切换主从方式一
config=rs.conf() //查看当前配置,存入config变量中。
config.members[].priority = //修改config变量,第三组成员的优先级为3.
rs.reconfig(config) //配置生效
rs.conf() //查看当前配置
rs.status() # 切换主从方式二
rs.stepDown()
# 服务异常重启,需要删除lock文件
find /data/mongodb/*/ -name *.lock | xargs rm -f "{}" \;
MongoDB 高可用集群副本集+分片搭建的更多相关文章
- Mongodb分布式集群副本集+分片
目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...
- 搭建高可用mongodb集群—— 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...
- MongoDB 3.4 分片集群副本集 认证
连接到router所在的MongoDB Shell 我本机端口设置在50000上 mongo --port 接下来的流程和普通数据库添加用户权限一样 db.createUser({user:&quo ...
- MongoDB集群——副本集
1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点.主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副本 ...
- window配置mongodb集群(副本集)
参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...
- kubernetes上安装MongoDB-3.6.5集群副本集方式
一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...
- mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- MongoDB高可用集群搭建(主从、分片、路由、安全验证)
目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...
- MongoDB高可用集群配置的方案
>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
随机推荐
- Python+ITchart实现微信机器人对指定的朋友和群自动回复
这里我主要用了3个机器人,可以切换. 1.图灵机器人 (傻的不行,一直在问别人问题,没有限制) http://www.tuling123.com 2.showApi上的图灵机器人 (感觉最聪明,可以 ...
- 【原】Java学习笔记025 - 内部类
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 内部类(嵌套类): ...
- Java 位运算符和 int 类型的实现
Java 位运算符和 int 类型的实现 其他运算符 # 算术运算符 +.-.*./.++i.i++.--i.i-- # 关系运算符 ==.!=.>.<.>=.<= # 逻辑运 ...
- Java学习笔记记录(二)
1.复合语句 if条件语句 使用场景:boolean类型判断.一个范围的判断.几个常量值的判断 有左大括号就没有分号,有分号就没有左大括号. 如下: public class demo1 { stat ...
- 日志学习系列(四)——NLog实例
具体不想介绍了,新建一个解决方案 ,直接用NuGet安装就行了 具体项目代码可以在https://github.com/qiuxianhu/SimpleNLog下载
- ThreadLocal的使用及原理分析
文章简介 ThreadLocal应该都比较熟悉,这篇文章会基于ThreadLocal的应用以及实现原理做一个全面的分析 内容导航 什么是ThreadLocal ThreadLocal的使用 分析Thr ...
- 【转】简单理解Vue中的nextTick
前言: Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick ...
- web框架开发-Django简介
MVC与MTV模型 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...
- try/catch中finally的执行时间
前言 由于总是搞不清楚try/catch中的一个执行顺序,返回结果.所以总结一下 1.finally没有return 时,可以看出finally确实在return之前执行了 public static ...
- 跳跳棋[LCA+二分查找]-洛谷1852
传送门 这真是一道神仙题 虽然我猜到了这是一道LCA的题 但是... 第一遍看题,我是怎么也没想到能和树形图扯上关系 并且用上LCA 但其实其实和上一道lightoj上的那道题很类似 只不过那时一道很 ...