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 高可用集群副本集+分片搭建的更多相关文章

  1. Mongodb分布式集群副本集+分片

    目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...

  2. 搭建高可用mongodb集群—— 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...

  3. MongoDB 3.4 分片集群副本集 认证

    连接到router所在的MongoDB Shell  我本机端口设置在50000上 mongo --port 接下来的流程和普通数据库添加用户权限一样 db.createUser({user:&quo ...

  4. MongoDB集群——副本集

    1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点.主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副本 ...

  5. window配置mongodb集群(副本集)

    参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...

  6. kubernetes上安装MongoDB-3.6.5集群副本集方式

    一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...

  7. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  9. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

随机推荐

  1. Docker: 企业级镜像仓库Harbor的使用

    上一节,演示了Harbor的安装部署 这次我们来讲解 Harbor的使用. 我们需要了解到: 1. 如何推镜像到镜像仓库 2. 如何从镜像仓库拉取镜像 3. 如何运行从私有仓库拉取的镜像 # 查看 h ...

  2. const关键字到底该怎么用

    原文地址:https://www.yanbinghu.com/2019/01/28/7442.html 前言 我们都知道使用const关键字限定一个变量为只读,但它是真正意义上的只读吗?实际中又该如何 ...

  3. 被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾

    前天, 2018年11月10日, 广州图书馆\微软云开发者社区\广东职业教育信息化研究会\珠三角技术沙龙在广州图书馆负一层1号报告厅搞了一场”微软最有价值专家(MVP)广州分享会 - MonkeyFe ...

  4. Loj #2495. 「AHOI / HNOI2018」转盘

    Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...

  5. 21 python 初学(json pickle shelve)

    json: # _author: lily # _date: 2019/1/19 import json my_dict = {'name': 'lily', 'age': 18} f = open( ...

  6. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据) 因为安全连接是和域名绑在一块的,所以需要申请域名 有没有不知道域名是什么的, ...

  7. [Oracle]Sqlplus 中使用 new_value

    通过再sqlplus 中使用 new_value,可以把从表中查询出来的值,放置到 变量中.然后使用变量时,类似与宏定义一样,就可以像使用表中字段一样方便. 这使得sqlplus 的脚本具备和pl/s ...

  8. [Spark][Streaming]Spark读取网络输入的例子

    Spark读取网络输入的例子: 参考如下的URL进行试验 https://stackoverflow.com/questions/46739081/how-to-get-record-in-strin ...

  9. Elasticsearch通关教程(一): 基础入门

    简介 Elasticsearch是一个高度可扩展的.开源的.基于 Lucene 的全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据,并支持多租户. Elasticsearch也使用J ...

  10. React16.x特性剪辑

    本文整理了 React 16.x 出现的耳目一新的概念与 api 以及应用场景. 更多 React 系列文章可以订阅blog 16.0 Fiber 在 16 之前的版本的渲染过程可以想象成一次性潜水 ...