首页 > 数据库 >linux上使用yum部署mongodb4.2+分片副本

linux上使用yum部署mongodb4.2+分片副本

时间:2023-05-09 14:13:29浏览次数:45  
标签:opt 10 mongod mongodb4.2 mongo ## yum linux config

系统配置
Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量。

为防止服务因too many open files错误出现宕机,这里需要对linux系统句柄数进行调整。

## 临时调整,系统重启即失效
ulimit -SHn 65535
## 永久调整,编辑 /etc/security/limits.conf 文件,最后行添加:
## 重新登录验证,或reboot后验证。
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
1.
2.
3.
4.
5.
6.
7.
8.
MongoDB分片
下图展示了在MongoDB中使用分片集群结构分布:

 

上图中主要有如下所述三个主要组件:

Shard: 用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障。
Config Server: mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers: 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
集群信息
mongodb-1:10.x.x.56 mongodb-2:10.x.x.57 mongodb-3:10.x.x.58 功能
mongos:23000 mongos:23000 mongos:23000 路由服务,负责客户端的连接,并把任务分给shards,然后收集结果
config server:24000 config server:24000 config server:24000 配置服务器,保存集群的元数据
shard1:主:25001 shard2:主:25002 shard3:主:25003 分片:接受读写
shard2:从:25002 shard3:从:25003 shard1:从:25001 副本集:备份数据
shard3:仲裁:25003 shard1:仲裁:25001 shard2:仲裁:25002
服务部署流程
安装mongodb
安装 mongodb到node1,2,3节点(以下操作node1,2,3各节点上都要执行)。

配置mongo的yum源:

# cat /etc/yum.repos.d/mongodb-org.repo
[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.2/x86_64/
gpgcheck=0
enabled=1
1.
2.
3.
4.
5.
6.
yum clean all
yum makecache
yum update
# 查找对应包的版本
yum list mongodb --showduplicates | sort -r
yum install -y mongodb-org
1.
2.
3.
4.
5.
6.
创建mongo相关目录
在node1,node2,node3创建一个mongo目录(以下操作node1,2,3各节点上都要执行)chunk信息。

# 在mongo文件夹底下创建mongos, config, shard1,shard2,shard3五个文件夹,命令如下:
mkdir -p /opt/mongo/{mongos,config,shard1,shard2,shard3}
# 在五个文件夹中分别对应三个子目录用来存 data,log, run
mkdir /opt/mongo/mongos/{data,log,run}
mkdir /opt/mongo/config/{data,log,run}
mkdir /opt/mongo/shard1/{data,log,run}
mkdir /opt/mongo/shard2/{data,log,run}
mkdir /opt/mongo/shard3/{data,log,run}
1.
2.
3.
4.
5.
6.
7.
8.
创建密钥目录文件
在keyfile身份验证中,副本集中的每个mongod实例都使用keyfile的内容作为共享密码,只有具有正确密钥文件的mongod或者mongos实例可以连接到副本集。密钥文件的内容必须在6到1024个字符之间,并且在unix/linux系统中文件所有者必须有对文件至少有读的权限。

## 在node1,node2,node3创建密钥目录
mkdir -p /opt/mongo/keys
## 生成密钥文件,node1上执行
openssl rand -base64 756 > /opt/mongo/keys/mongoKeyFile.file
## 拷贝密钥文件到node2和node3
scp /opt/mongo/keys/mongoKeyFile.file [email protected]:/opt/mongo/keys/
1.
2.
3.
4.
5.
6.
配置服务
在node1,node2,node3先创建config server(以下操作node1,2,3各节点上都要执行)

# cat /opt/mongo/config/mongod.conf
systemLog:
destination: file
logAppend: true
path: /opt/mongo/config/log/mongod.log
storage:
dbPath: /opt/mongo/config/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /opt/mongo/config/run/mongod.pid
net:
port: 24000
bindIp: 0.0.0.0
replication:
replSetName: config
sharding:
clusterRole: configsvr
security:
keyFile: /opt/mongo/keys/mongoKeyFile.file
authorization: enabled
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
依次启动所有的mongo config server服务:

mongod --config /opt/mongo/config/mongod.conf
1.
测试登录node1,2,3中一台的config server,以创建配置并激活,以登录node1中的mongo config server为例):

# version 4.2+
mongo --port 24000
1.
2.
运行配置(这里一个节点上执行就可)

(1) 在刚刚登陆的节点中执行以下命令

config = {
_id : "config",
members : [
{_id : 0, host : "10.x.x.56:24000" },
{_id : 1, host : "10.x.x.57:24000" },
{_id : 2, host : "10.x.x.58:24000" }
]
}
1.
2.
3.
4.
5.
6.
7.
8.
注意:members数组中改为自己节点的ip,_id: config 必须与前面的 config server配置文件中的 replSetName: config 一致。

(2) 初始化副本集配置

rs.initiate(config)
1.
(3) 查看分区状态

rs.status()
1.
配置分片和副本集
第一个分片和副本集
给node1,2,3 各创建第一个分片和副本集(以下操作node1,2,3各节点上都要执行)。

# cat /opt/mongo/shard1/mongod.conf
systemLog:
destination: file
logAppend: true
path: /opt/mongo/shard1/log/mongod.log
storage:
dbPath: /opt/mongo/shard1/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /opt/mongo/shard1/run/mongod.pid
net:
port: 25001
bindIp: 0.0.0.0
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
security:
keyFile: /opt/mongo/keys/mongoKeyFile.file
authorization: enabled
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
依次启动所有的shard1 server:

mongod --config /opt/mongo/shard1/mongod.conf
1.
登陆任意一台shard1服务器(希望哪一台机器是主,就登录到那一台机器上,这里是准备将node1设为shard1的主节点),初始化副本集(以下内容在一个节点上执行)

mongo --port 25001
1.
在登陆的节点上使用admin数据库:

use admin
## 定义副本集配置,执行下面的内容
config = {
_id : "shard1",
members : [
{_id : 0, host : "10.x.x.56:25001" },
{_id : 1, host : "10.x.x.57:25001" },
{_id : 2, host : "10.x.x.58:25001" }
]
}
## 初始化副本集配置,返回{"OK" : 1}表示成功
rs.initiate(config)
## 查看分区状态
rs.status()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
第二个分片和副本集
给node1,2,3 各创建第二个分片和副本集(以下操作node1,2,3各节点上都要执行)。

cat > /opt/mongo/shard2/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /opt/mongo/shard2/log/mongod.log
storage:
dbPath: /opt/mongo/shard2/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /opt/mongo/shard2/run/mongod.pid
net:
port: 25002
bindIp: 0.0.0.0
replication:
replSetName: shard2
sharding:
clusterRole: shardsvr
security:
keyFile: /opt/mongo/keys/mongoKeyFile.file
authorization: enabled
EOF
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
依次启动所有的shard2 server:

mongod --config /opt/mongo/shard2/mongod.conf
1.
登陆任意一台shard2服务器(希望哪一台机器是主,就登录到那一台机器上,这里是准备将node2设为shard2的主节点),初始化副本集(以下操作在单节点上执行)

mongo --port 25002
1.
使用admin数据库:

use admin
## 定义副本集配置,注意改为自己节点的ip
config = {
_id : "shard2",
members : [
{_id : 0, host : "10.x.x.57:25002" },
{_id : 1, host : "10.x.x.56:25002" },
{_id : 2, host : "10.x.x.58:25002" }
]
}
## 初始化副本集配置,返回{"OK" : 1}表示成功
rs.initiate(config)
## 查看分区状态
rs.status()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
第三个分片和副本集
给node1,2,3 各创建第三个分片和副本集(以下操作node1,2,3各节点上都要执行)。

cat > /opt/mongo/shard3/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /opt/mongo/shard3/log/mongod.log
storage:
dbPath: /opt/mongo/shard3/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /opt/mongo/shard3/run/mongod.pid
net:
port: 25003
bindIp: 0.0.0.0
replication:
replSetName: shard3
sharding:
clusterRole: shardsvr
security:
keyFile: /opt/mongo/keys/mongoKeyFile.file
authorization: enabled
EOF
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
依次启动所有的shard3 server:

mongod --config /opt/mongo/shard3/mongod.conf
1.
登陆任意一台shard3服务器(希望哪一台机器是主,就登录到那一台机器上,这里是准备将node3设为shard3的主节点),初始化副本集(以下操作在单节点上执行)

mongo --port 25003
1.
使用admin数据库:

use admin
## 定义副本集配置,注意改为自己节点的ip
config = {
_id : "shard3",
members : [
{_id : 0, host : "10.x.x.58:25003" },
{_id : 1, host : "10.x.x.56:25003" },
{_id : 2, host : "10.x.x.57:25003" }
]
}
## 初始化副本集配置,返回{"OK" : 1}表示成功
rs.initiate(config)
## 查看分区状态
rs.status()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
配置 mongos 进程
安装配置 mongos 进程, 给node1, 2,3各创建目录(以下操作node1,2,3各节点上都要执行)。

cat > /opt/mongo/mongos/mongod.conf << EOF

systemLog:
destination: file
logAppend: true
path: /opt/mongo/mongos/log/mongod.log
processManagement:
fork: true
pidFilePath: /opt/mongo/mongos/run/mongod.pid
net:
port: 23000
bindIp: 0.0.0.0
sharding:
configDB: config/10.x.x.56:24000,10.x.x.57:24000,10.x.x.58:24000
security:
keyFile: /opt/mongo/keys/mongoKeyFile.file
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
依次启动所有的路由服务器:

mongos --config /opt/mongo/mongos/mongod.conf
1.
登录其中的一台路由节点,手动启用分片(以下操作选用一台节点,我用node3):

mongo --port 23000
1.
添加分片到mongos(注意修改自己节点的ip):

sh.addShard("shard1/10.x.x.56:25001,10.x.x.57:25001,10.x.x.58:25001")
sh.addShard("shard2/10.x.x.57:25002,10.x.x.56:25002,10.x.x.58.25002")
sh.addShard("shard3/10.x.x.58:25003,10.x.x.56:25003,10.x.x.57:25003")
1.
2.
3.
设置slave可读(在命令行中生效一次),如果配置从接到可读,那么是连接客户端指定的:

## 命令在node3中执行一次即可
rs.secondaryOk()
1.
2.
常用命令
mongo服务相关
## 停止服务
## 如系统没有killall命令,请执行:yum install psmisc -y
killall mongod
killall mongos
## 启动服务,在每个节点上一条一条启动:
mongod --config /opt/mongo/config/mongod.conf
mongod --config /opt/mongo/shard1/mongod.conf
mongod --config /opt/mongo/shard2/mongod.conf
mongod --config /opt/mongo/shard3/mongod.conf
mongos --config /opt/mongo/mongos/mongod.conf
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
创建库并开启分片功能
## 创建库
use mybike
## 创建 bikes集合
db.createCollection("bikes")
## 切换到admin库,再指定某个库启用分片
use admin
## 对mybike这个数据库开启分片功能
db.runCommand({"enablesharding":"mybike"})
## 对mybike数据库下的bikes集合按id的hash进行分片
db.runCommand({"shardcollection":"mybike.bikes","key":{_id:'hashed'}})
## 又切换回 mybike库
use mybike
## 切换到 mybike库,向bikes集合中插入数据
db.bikes.insert( {"status": 1, "loc": [28.189153,112.960318],"qrcode":""} )
db.bikes.insert( { "status": 1, "loc": [28.189155,112.960318],"qrcode":""} )
db.bikes.insert( {"status": 1, "loc": [28.189159,112.960318],"qrcode":""} )
db.bikes.insert( {"status": 1, "loc": [28.189163,112.960318],"qrcode":""} )
## 在mongos 进程中查询得到的结果是所有分片要满足条件的结果
mongo --port 23000 -u "admin" -p "passwd" --authenticationDatabase "admin"
## 查看所有库
show dbs
## 使用mybike库
use mybike
## 查看mybike库里面集合
show collections
## 查询集合里面数据
db.bikes.find()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
对现有集合开启分片功能
可参考 MongoDB 对现有集合进行分片 操作方法。

普通账号创建和授权
## 先进入/创建库
use tsp-prod
## 创建tsp-prod账户对tsp-prod读写权限账户
db.createUser(
{
user: "tsp-prod",
pwd: "test123",
roles: [ { role: "readWrite", db: "tsp-prod" } ]
}
);
## 删除账户
use tsp-prod
db.dropUser("tsp-prod")
## 删除当前库的所有用户,慎用
db.dropAllUser()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
参考教程
 centos7下详细搭建Mongodb集群
 mongodb副本集加分片集群安全认证使用账号密码登录
 MongoDB 对现有集合进行分片 操作方法
-----------------------------------
©著作权归作者所有:来自51CTO博客作者品鉴初心的原创作品,请联系作者获取转载授权,否则将追究法律责任
linux上使用yum部署mongodb4.2+分片副本
https://blog.51cto.com/wutengfei/5937039

标签:opt,10,mongod,mongodb4.2,mongo,##,yum,linux,config
From: https://www.cnblogs.com/gaoyanbing/p/17384669.html

相关文章

  • centos(linux):yum报错:removing mirrorlist with no valid mirrors的处理(centos 6.1
    一,报错[root@osc~]#yuminstall-ypython3-pipLoadedplugins:fastestmirror,securitySettingupInstallProcessDeterminingfastestmirrorsYumRepoError:AllmirrorURLsarenotusingftp,http[s]orfile.Eg.Invalidrelease/repo/archcombination/rem......
  • 解决 VirutalBox 安装 Alpine Linux 出现 Kernel Panic 的问题
    问题如图,使用默认配置安装AlpineLinux时总是会启动都启动不了,找了半天后终于在官方论坛上找到原因了。解决在设置里分配大于1个的cpu就行,如图我这里给的是2个,分配完毕后重新启动就正常了......
  • 安装nginx--银河麒麟V10Kylin Linux
    原文链接:https://blog.csdn.net/qq_30665009/article/details/1260217961、安装nginx之前,在内网环境下需要先进行配置本地yum源。2、本文使用的操作系统:银河麒麟V10飞腾版3、查看操作系统CPU型号[root@localhost/]#lscpu4、查看操作系统信息cat/etc/*release5、安装的......
  • Linux 系统中,找到运行在某个特定端口的应用程序目录
    首先,你需要找到运行在特定端口上的进程的PID。这可以通过使用lsof命令完成:lsof-i:<port>其中,<port>是你要查找的端口号。在返回的结果中,你可以找到PID(进程ID)。然后,你可以使用pwdx命令来获取这个进程的当前工作目录:pwdx<pid>其中,<pid>是你在上一步找到的进程......
  • 《Linux高性能服务器编程》学习记录(二)linux网络编程基础API
    Linux网络API主要有三种:socket地址API。socket最开始的含义是一个IP地址和端口对(ip,port)。它唯一地表示了使用TCP通信的一端,称其为socket地址。socket基础API。socket的主要API都定义在sys/socket.h头文件中,包括创建socket、命名socket、监听socket、接受连接、发起连接、读写......
  • 学习LXC(Linux 容器)技术
    安装LXC、LXD、zfs测试机器为ubuntusudoapt-getinstalllxclxdzfsutils-linux-y创建LXD的zfs存储池sudolxdinit##根据提示全部敲回车即可添加官方镜像源sudolxcremoteaddimagesimages.linuxcontainers.org查看镜像lxcimagelist[<remote>:][<filter>......
  • 如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
    如何制作ESXiUSB启动盘请访问原文链接:https://sysin.org/blog/create-bootable-esxi-usb-installer/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org以下USB存储设备可以是U盘/SD卡,当然USBSSD更佳。macOSmacOS使用终端自带命令即可完成操作。查看US......
  • Linux 简单查看网卡实时网速
     1.使用nload工具查看安装工具sudoyuminstallnload#查看所有网卡实时网速sudonload-m#查看指定网卡实时网速sudonloadeth0-m 2.通过ifconfig实时查看watch-n1ifconfig 3.通过脚本查看#!/bin/bashawk'BEGIN{OFMT="%.3f";devf="......
  • Linux操作系统优化
    第18章Linux操作系统优化目录第18章Linux操作系统优化1.更改Yum源和添加epel源2.关闭SELinux3.关闭防火墙(Firewalld)4.关闭NetworkManager5.同步系统时间6.加大文件描述7.别名及环境变量优化8.内核优化9.配置SSH远程管理服务10.修改主机名和IP脚本11.安装常用软件12.......
  • Linux中重定向应注意的事情
    引言你是否见过bash...2>&11>file.txt的写法?还没发现这样的写法有什么问题?那么恭喜你,看完本文你又将学会一个新知识!重定向的错误用法以引言中命令为例,2>&1表示将错误输出重定向到标准输出,1>file.txt表示将标准输出重定向到file.txt文件,看起来的意思就是将标准......