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)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
随机推荐
- 爬虫之scrapy--基本操作
参考博客 :https://www.cnblogs.com/wupeiqi/p/6229292.html Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘, ...
- C#字符串转二进制、二进制转字符串
最近公司要做一个操作日志的模块,如果将操作日志以字符串的形式存到后台数据库,非常浪费内存,不可取,特意写了字符串与二进制相互转换的函数. 1.字符串转二进制 private string String ...
- markdown小知识总结
字体.字号.颜色 但如果我们想修改文字大小/颜色/字体,就要用font标签,代码如下: 宋体大小为2的字 color代表字体颜色(要用16进制颜色值),size代表文字大小,face代表字体 效果展示 ...
- nginx内置变量总结
nginx内置变量 2019-02-28 变量名称 变量用途 $atg_PARAMETER 客户端GET请求中 PARAMETER字段的值 ...
- Nginx反向代理实现IP访问分流
通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构.本文将分享一个如何根据来路IP来进行分流的方法. 根据特定IP来实现分流 将IP地址的最后一段最后一位为0或 ...
- bsp总结
就版本.nand nor. led三样本周,六六六 1. bsp坏块--- => nand bad Device 0 bad blocks:047600000600000007fe0000=&g ...
- pytorch Debug —交互式调试工具Pdb (ipdb是增强版的pdb)-1-在pytorch中使用
参考深度学习框架pytorch:入门和实践一书第六章 以深度学习框架PyTorch一书的学习-第六章-实战指南为前提 在pytorch中Debug pytorch作为一个动态图框架,与ipdb结合能为 ...
- 性能测试中的最佳用户数、最大用户数、TPS、响应时间、吞吐量和吞吞吐率
一:最佳用户数.最大用户数 转:http://www.cnblogs.com/jackei/archive/2006/11/20/565527.html 二: 事务.TPS 1:事务:就是用户某一步 ...
- 日志切割之Logrotate
1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...
- Linux内核入门到放弃-无持久存储的文件系统-《深入Linux内核架构》笔记
proc文件系统 proc文件系统是一种虚拟的文件系统,其信息不能从块设备读取.只有在读取文件内容时,才动态生成相应的信息. /proc的内容 内存管理 系统进程的特征数据 文件系统 设备驱动程序 系 ...