微博分享的网站怎么做,电子商务网站建设参考文献,教育网站怎么做,网页制作收入mongodb介绍#xff1a;
是最常用的nosql数据库#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb#xff08;分片副本#xff09;集群。
环境准备
系统系统 BC 21.10 三台服务器#xff1a;192.168.123.247/248/249 安装包#xff1a…mongodb介绍
是最常用的nosql数据库在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb分片副本集群。
环境准备
系统系统 BC 21.10 三台服务器192.168.123.247/248/249 安装包 mongodb-linux-x86_64-rhel8-7.0.14.tgz 截止2024年10月11日星期五次新版 mongosh-2.3.1-linux-x64.tgz
服务器规划
服务器247服务器248服务器249mongosmongosmongosconfig serverconfig serverconfig servershard1主节点 shard1 副节点shard1 仲裁shard2仲裁 shard2 主节点shard2 副节点shard3副节点 shard3 仲裁shard3 主节点
端口规划
主机名IP组件mongos组件config server分片shardserver1192.168.123.247端口27000端口27017shard127001server2192.168.123.248端口27000端口27017shard227002server3192.168.123.249端口27000端口27017shard327003
时间同步
略
防火墙
略
集群部署
解压mongodb
官网下载根据操作系统选择下载相应的版本。 Mongodb-download 在三台机器上执行解压
tar zxvf mongodb-linux-x86_64-rhel8-7.0.14.tgz -C /usr/local/mongodb新建目录
三台机器建立config、mongos、shard1、shard2、shard3目录包括子目录
mkdir -p /usr/local/mongodb/config/{conf,data,log,run}
mkdir -p /usr/local/mongodb/mongos/{conf,data,log,run}
mkdir -p /usr/local/mongodb/shard{1,2,3}/{conf,data,log}目录结构概述
/usr/local/mongodb/config用途存放配置服务器的相关文件。 子目录
conf存放配置服务器的配置文件如 mongod.conf。
data存放配置服务器的数据文件。
log存放配置服务器的日志文件。
run: 存储进程PID文件/usr/local/mongodb/mongos用途存放路由进程Mongos的相关文件。 子目录
conf存放路由进程的配置文件。
data因为 Mongos 不持久化数据。也可以不创建
log存放路由进程的日志文件。
run: 存储进程PID文件/usr/local/mongodb/shard{1,2,3}用途存放分片服务器的相关文件。 子目录
conf存放分片服务器的配置文件。
data存放分片服务器的数据文件。
log存放分片服务器的日志文件。配置环境变量
vim /etc/profile
export MONGODB_HOME/usr/local/mongodb
export PATH$MONGODB_HOME/bin:$PATH使立即生效
source /etc/profile安装依赖包,缺少就安装
yum install libcurl openssl xz-libs创建用户指定组标识符
groupadd mongo -g 777
useradd mongo -g 777 -M -s /sbin/nologin
id mongo开机启动
cat /etc/systemd/system/mongodb.service EOF
[Unit]
Descriptionmongodb
Afternetwork.target remote-fs.target nss-lookup.target[Service]
Typesimple
ExecStart/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload/bin/kill -s HUP $MAINPID
ExecStop/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf --shutdown
PrivateTmptrue[Install]
WantedBymulti-user.target
EOF三台config server配置
cat /usr/local/mongodb/config/conf/mongod.conf EOF# 日志设置
systemLog:destination: file # 日志写入文件path: /usr/local/mongodb/config/log/mongod.log # 日志文件路径logAppend: true # 追加日志logRotate: rename # 日志轮转方式支持 rename 或 reopen# 网络设置
net:port: 27017 # MongoDB 默认端口bindIp: 0.0.0.0 # 允许从所有 IP 访问生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/config/data # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1 # 根据情况配置内存# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/config/run/mongod.pid # PID 文件路径#复制集名称
replication:replSetName: myconfigset#作为配置服务
sharding:clusterRole: configsvrEOF三台mongos配置
cat /usr/local/mongodb/config/conf/mongod.conf EOF# 日志设置
systemLog:destination: file # 日志写入文件path: /usr/local/mongodb/mongos/log/mongos.log # 日志文件路径logAppend: true # 追加日志logRotate: rename # 日志轮转方式支持 rename 或 reopen# 网络设置
net:port: 27000 # MongoDB 默认端口bindIp: 0.0.0.0 # 允许从所有 IP 访问生产环境建议限制# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/mongos/run/mongos.pid # PID 文件路径#网络延迟阈值
replication:localPingThresholdMs: 15#关联配置服务
sharding:configDB: myconfigset/server1:27017,server2:27017,server3:27017EOF启动三台config server 3台
mongod --config /usr/local/mongodb/config/conf/mongod.conf安装mongosh
安装好mongosh工具方便初始化副本集使用
# mongosh mongodb://server1:27017。成功登录如下图默认的提示符是’test’大内存页 关闭 hugepage
echo never /sys/kernel/mm/transparent_hugepage/enabled
echo never /sys/kernel/mm/transparent_hugepage/defrag初始化配置副本集3台机器执行相同操作
启动config server后开始初始化副本集登录任意一台开始初始化配置副本集
#7.0.14版本登录时在test数据库下切换到admin数据库
test use admin
switched to db admin
admin#执行以下config变量注意myconfigset,要和mongod.conf里配置一致。
config{_id:myconfigset,members:[
{_id:0,host:server1:27017},
{_id:1,host:server2:27017},
{_id:2,host:server3:27017,},
]}执行结果如下
#再执行初始化
rs.initiate(config)rs.status()3.9 配置分片副本集 每台shard1,shard2,shard3配置 Shard1
cat /usr/local/mongodb/shard1/conf/shard1.conf EOF
# 日志设置
systemLog:destination: file # 日志写入文件path: /usr/local/mongodb/shard1/log/shard1.log # 日志文件路径logAppend: true # 追加日志logRotate: rename # 日志轮转方式支持 rename 或 reopen# 网络设置
net:port: 27001 # MongoDB shard1端口bindIp: 0.0.0.0 # 允许从所有 IP 访问生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard1/data # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1 # 根据情况配置内存# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard1/data/shard1.pid # PID 文件路径#复制集名称
replication:replSetName: shard1#慢查询
operationProfiling:slowOpThresholdMs : 100mode: slowOp#作为分片服务
sharding:clusterRole: shardsvrEOFShard2
cat /usr/local/mongodb/shard2/conf/shard2.conf EOF# 日志设置
systemLog:destination: file # 日志写入文件path: /usr/local/mongodb/shard2/log/shard2.log # 日志文件路径logAppend: true # 追加日志logRotate: rename # 日志轮转方式支持 rename 或 reopen# 网络设置
net:port: 27002 # shard2端口bindIp: 0.0.0.0 # 允许从所有 IP 访问生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard2/data # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1 # 根据情况配置内存# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard2/data/shard2.pid # PID 文件路径#复制集名称
replication:replSetName: shard2#慢查询
operationProfiling:slowOpThresholdMs : 100mode: slowOp#作为分片服务
sharding:clusterRole: shardsvrEOFShard3
cat /usr/local/mongodb/shard3/conf/shard3.conf EOF# 日志设置
systemLog:destination: file # 日志写入文件path: /usr/local/mongodb/shard3/log/shard3.log # 日志文件路径logAppend: true # 追加日志logRotate: rename # 日志轮转方式支持 rename 或 reopen# 网络设置
net:port: 27003 # MongoDB shard3 默认端口bindIp: 0.0.0.0 # 允许从所有 IP 访问生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard3/data # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1 # 根据情况配置内存# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard3/data/shard3.pid # PID 文件路径#复制集名称
replication:replSetName: shard3#慢查询
operationProfiling:slowOpThresholdMs : 100mode: slowOp#作为分片服务
sharding:clusterRole: shardsvrEOF启动三台247,248,249服务器的shard1 server mongod --config /usr/local/mongodb/shard1/conf/shard1.conf初始化shard1分片副本集
登录任意一台注意端口号
mongosh mongodb://server1:27001初始化三台的shard1
#7.0.14版本登录时在test数据库下切换到admin数据库 test use admin switched to db admin admin
config{_id:“shard1”,members:[ {_id:0,host:“server1:27001”}, {_id:1,host:“server2:27001”}, {_id:2,host:“server3:27001”,arbiterOnly: true}, ]}
#再执行初始化 rs.initiate(config) rs.status()
启动三台247,248,249服务器的shard2 server
mongod --config /usr/local/mongodb/shard2/conf/shard2.conf登录任意一个节点注意端口号注意安装了mongosh
mongosh mongodb://server2:27002初始化三台的shard2
#7.0.14版本登录时在test数据库下切换到admin数据库
test use admin
switched to db admin
adminconfig{_id:shard2,members:[
{_id:0,host:server1:27002,arbiterOnly: true},
{_id:1,host:server2:27002},
{_id:2,host:server3:27002},
]}#再执行初始化
rs.initiate(config)
rs.status()3.12.1 初始化三台的shard3
#7.0.14版本登录时在test数据库下切换到admin数据库
test use admin
switched to db admin
adminconfig{_id:shard3,members:[
{_id:0,host:server1:27003},
{_id:1,host:server2:27003,arbiterOnly: true},
{_id:2,host:server3:27003},
]}#再执行初始化
rs.initiate(config)
rs.status()启动mongos路由并分片
启动三台247,248,249服务器的mongos
mongos --config /usr/local/mongodb/mongos/conf/mongos.conf登录任意路由节点注意端口号注意安装了mongosh
mongosh mongodb://server1:27000添加分片
#7.0.14版本登录时在test数据库下切换到admin数据库
test use admin
switched to db admin
admindb.adminCommand({ setDefaultRWConcern : 1, defaultWriteConcern : { w : 1 }})
admin##添加分片
sh.addShard(shard1/server1:27001,server2:27001,server3:27001)
sh.addShard(shard2/server1:27002,server2:27002,server3:27002)
sh.addShard(shard3/server1:27003,server2:27003,server3:27003)
#
Admin sh.status();验证分片机制
指定分片生效
db.runCommand({enablesharding:testdb})哈希分片
db.runCommand({shardcollection:testdb.table1,key:{id:hashed}})插入1万个数据测试
for (var i 1; i 10000; i){
db.table1.insertOne({id:i,test1:testval1});Shard1 Shard2 Shard3 汇总内容 验证已完成可以看到数据分到3个分片各自分片数量为 shard1 “count” : 3366 shard2 “count” : 3284 shard3 “count” : 3350。 已经成功