MongoDB集群安装

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB集群安装

【在多台机器上执行下面的命令


在所有创建一个xiaoniu普通用户:


useradd xiaoniu


为xiaoniu用户添加密码:


echo 123456 | passwd --stdin xiaoniu


将xiaoniu添加到sudoers

echo "xiaoniu ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/xiaoniu
chmod 0440 /etc/sudoers.d/xiaoniu

解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行

sudo sed -i 's/Defaults requiretty/Defaults:xiaoniu !requiretty/' /etc/sudoers

创建一个mongo目录


mkdir /mongo


给相应的目录添加权限


chown -R xiaoniu:xiaoniu /mongo


配置mongo的yum源

cat >> /etc/yum.repos.d/mongodb-org-3.4.repo << EOF
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF

关闭selinux


sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config


重新启动


reboot


分别在多台机器上使用xiaoniu用户登录


sudo yum install -y mongodb-org


继续角色信息


node-1 node-2 node-3

mongos mongos mongos 路由服务器,寻址

config config config 配置服务器,保存配置

shard1(主) shard2(主) shard3(主) 分片:保存数据

shard2 shard3 shard1 副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)

shard3 shard1 shard2


分别在多台机器上创建mongo config server对应的目录


mkdir -p /mongo/config/{log,data,run}


分别在多台机器上修改config server的配置文件

cat >> /mongo/config/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/config/log/mongod.log
storage:
dbPath: /mongo/config/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/config/run/mongod.pid
net:
port: 27100
replication:
replSetName: config
sharding:
clusterRole: configsvr
EOF

clusterRole: configsvr这个配置是固定的


【重要】启动所有的mongo config server服务


mongod --config /mongo/config/mongod.conf


登录任意一台配置服务器,初始化配置副本集


mongo --port 27100


创建配置

config = {
_id : "config",
members : [
{_id : 0, host : "192.168.52.203:27100" },
{_id : 1, host : "192.168.52.204:27100" },
{_id : 2, host : "192.168.52.205:27100" }
]
}

初始化副本集配置


rs.initiate(config)


查看分区状态


rs.status()


注意:其中,"_id" : "config"对应配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port

配置第一个分片和副本集


修改mongo shard1 server的配置文件


mkdir -p /mongo/shard1/{log,data,run}


分别在多台机器上修改shard1 server的配置文件

cat >> /mongo/shard1/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard1/log/mongod.log storage: dbPath: /mongo/shard1/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard1/run/mongod.pid net: port: 27001 replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF

启动所有的shard1 server


mongod --config /mongo/shard1/mongod.conf


登陆任意一台shard1服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集


mongo --port 27001


使用admin数据库


use admin


定义副本集配置

config = { _id : "shard1", members : [ {_id : 0, host : "192.168.52.203:27001" }, {_id : 1, host : "192.168.52.204:27001" }, {_id : 2, host : "192.168.52.205:27001" } ] }

初始化副本集配置


rs.initiate(config);


查看分区状态


rs.status()


配置第二个分片和副本集

修改mongo shard2 server的配置文件


mkdir -p /mongo/shard2/{log,data,run}


分别在多台机器上修改shard2 server的配置文件

cat >> /mongo/shard2/mongod.conf << EOF
systemLog: destination: file logAppend: true path: /mongo/shard2/log/mongod.log storage: dbPath: /mongo/shard2/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard2/run/mongod.pid net: port: 27002 replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF

启动所有的shard2 server


mongod --config /mongo/shard2/mongod.conf


登陆(node2)的shard2服务器,初始化副本集


mongo --port 27002


使用admin数据库


use admin


定义副本集配置

config = {
_id : "shard2", members : [ {_id : 0, host : "192.168.52.203:27002" }, {_id : 1, host : "192.168.52.204:27002" }, {_id : 2, host : "192.168.52.205:27002" } ] }

rs.initiate(config)


查看分区状态


rs.status()


配置第三个分片和副本集


修改mongo shard3 server的配置文件


mkdir -p /mongo/shard3/{log,data,run}


分别在多台机器上修改shard3 server的配置文件

cat >> /mongo/shard3/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/shard3/log/mongod.log
storage:
dbPath: /mongo/shard3/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/shard3/run/mongod.pid
net:
port: 27003
replication:
replSetName: shard3
sharding:
clusterRole: shardsvr
EOF

启动所有的shard3 server


mongod --config /mongo/shard3/mongod.conf


登陆node-3上的shard3服务器,初始化副本集


mongo --port 27003


使用admin数据库


use admin


定义副本集配置

config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.52.203:27003" },
{_id : 1, host : "192.168.52.204:27003" },
{_id : 2, host : "192.168.52.205:27003" }
]
}

初始化副本集配置


rs.initiate(config)


查看分区状态


rs.status()


注意:启动mongos是守候进程是因为/mongo/mongos/mongod.conf缺少了fork: true这个配置


mkdir -p /mongo/mongos/{log,data,run}


添加mongs的配置文件

cat >> /mongo/mongos/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/mongos/log/mongod.log
processManagement:
fork: true
pidFilePath: /mongo/mongos/run/mongod.pid
net:
port: 27200
sharding:
configDB: config/192.168.52.203:27100,192.168.52.204:27100,192.168.52.205:27100
EOF

注意,这里configDB后面的config要与配置服务器的_id保持一致


启动路由服务器


mongos --config /mongo/mongos/mongod.conf


登录其中的一台路由节点,手动启用分片


mongo --port 27200


添加分片到mongos

sh.addShard("shard1/192.168.52.203:27001,192.168.52.204:27001,192.168.52.205:27001")
sh.addShard("shard2/192.168.52.204:27002,192.168.52.205:27002,192.168.52.203:27002")
sh.addShard("shard3/192.168.52.205:27003,192.168.52.203:27003,192.168.52.204:27003")

设置slave可读(在命令行中生效一次),如果配置从接到可读,那么是连接客户端指定的


rs.slaveOk()


####没有分片是因为没有开启分片规则####################


创建mobike数据库


创建mobike数据库


use mobike

use admin


对bikes这个数据库开启分片功能


db.runCommand({"enablesharding":"mobike"})


创建bikes集合


db.createCollection("bikes")


对bike数据库下的users集合按id的hash进行分片

db.runCommand({"shardcollection":"mobike.bikes","key":{_id:'hashed'}})
use mobike
db.bikes.insert({"bikeNo":100001})
db.bikes.insert({"bikeNo":100002})
db.bikes.insert({"bikeNo":100003})
db.bikes.insert({"bikeNo":100004})
db.bikes.insert({"bikeNo":100005})
db.bikes.insert({"bikeNo":100006})

启动所有的config server


mongod --config /mongo/config/mongod.conf


启动所有的shard1


mongod --config /mongo/shard1/mongod.conf


启动所有的shard2


mongod --config /mongo/shard2/mongod.conf


启动所有的shard3


mongod --config /mongo/shard3/mongod.conf


启动所有的mongos


mongos --config /mongo/mongos/mongod.conf

脸上客户端:mongo --port 27200

mongos>

db.bikes.find()

db.bikes.drop()


关闭服务


mongod --shutdown --dbpath /mongo/shard3/data

mongod --shutdown --dbpath /mongo/shard2/data

mongod --shutdown --dbpath /mongo/shard1/data

mongod --shutdown --dbpath /mongo/config/data

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
26天前
|
NoSQL Linux MongoDB
linux麒麟系统安装mongodb7.0
linux麒麟系统安装mongodb7.0
63 10
|
5月前
|
存储 JSON 分布式计算
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
163 0
|
5月前
|
NoSQL MongoDB 数据安全/隐私保护
|
5天前
|
NoSQL 网络协议 MongoDB
docker安装mongodb(单点)图文详解
该文档提供了一个快速搭建MongoDB环境的指南,适用于开发和学习,但不适用于生产。主要步骤包括:1) 使用Docker创建数据卷`mongo_data_db`和`mongo_data_configdb`。2) 拉取`mongo`镜像并运行名为`mymongo`的容器,映射端口并挂载数据卷。3) 初始化管理员账号,创建具有`root`权限的用户`admin`,密码为`adminpwd`。4) 防火墙开放端口27017。最后,提到了使用第三方客户端进行连接。
|
7天前
|
弹性计算 NoSQL Shell
一键安装 MongoDB 数据库脚本
【4月更文挑战第29天】
13 4
|
8天前
|
NoSQL Linux 网络安全
【专栏】如何在 RHEL 8 或者 CentOS 8 上安装 MongoDB?
【4月更文挑战第28天】本文档介绍了如何在RHEL或CentOS 8上安装MongoDB,包括环境准备(系统更新、依赖安装、硬件需求和sudo用户)、导入MongoDB GPG公钥、创建Yum仓库、安装MongoDB社区版,以及后续的基本配置和验证(启动服务、防火墙设置和连接验证)。通过这些步骤,用户可以顺利安装并运行MongoDB,以处理非结构化数据和扩展技术栈。
|
13天前
|
存储 分布式计算 NoSQL
MongoDB的简介和安装(在服务器上)
MongoDB的简介和安装(在服务器上)
29 0
|
24天前
|
存储 NoSQL Linux
CentOS7安装MongoDB
CentOS7安装MongoDB
17 0
|
2月前
|
NoSQL MongoDB Docker
docker安装MongoDB
docker安装MongoDB
23 0
|
2月前
|
NoSQL MongoDB
搭建MongoDB分片式集群
搭建MongoDB分片式集群
17 0