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. cannot be run because the QueueReader subsystem failed to load

    前阵子一数据库服务器的事务日志开始暴增,当时使用下面脚本检查发现该数据库的log_reuse_wait_desc 一直处于REPLICATION状态, 也就是说在事务复制过程中,与发布相关的事务仍未传 ...

  2. 什么是TLB?

    TLB:Translation Lookaside Buffer. 根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲.里面存放的是一些页表文件(虚拟地址到物理地址的转换表). ...

  3. iOS 常用三方(持续更新)

    iOS 常用三方 1.ZWMSegmentController 分页控制器 https://github.com/weiming4219/ZWMSegmentController

  4. JPA之@Transient

    java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中. 使用示例: ...

  5. oracle nvl2函数

    nvl2(v1, v2, v3) 定义:如果v1为空,返回v3: 不为空,返回v2 nvl2要求v2,v3的类型一致,不一致会发生类型转换.问题:最终返回值类型是v2的类型还是v3的类型? 看题目:n ...

  6. 【Python 19】BMR计算器3.0(字符串分割与格式化输出)

    1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上. 计算公式: BMR(男) = (13.7*体重kg)+(5.0*身高cm)-(6. ...

  7. ssr

    使用Nuxt.js改造已有项目的方法 https://www.jb51.net/article/145203.htm

  8. JetBrains 全套激活 Pycharm Clion 高校学生老师免费用

    https://www.jetbrains.com/store/?fromMenu#edition=discounts https://www.jetbrains.com/zh/student/ 用高 ...

  9. WPF防止界面卡死并显示加载中效果

    原文:WPF防止界面卡死并显示加载中效果 网上貌似没有完整的WPF正在加载的例子,所以自己写了一个,希望能帮到有需要的同学 前台: <Window x:Class="WpfApplic ...

  10. iOS开发基础-九宫格坐标(6)

    继续对iOS开发基础-九宫格坐标(5)中的代码进行优化. 优化思路:把字典转模型部分的数据处理操作也拿到模型类中去实现,即将 ViewController 类实现中 apps 方法搬到 WJQAppI ...