mongoDB 在window 和 liunx 上的 单机部署和集群部署

一.mongodb 的windows 上的单机部署

1.下载mongodb https://www.mongodb.com/download-center/community 如下图所示选择 所支持的 平台版本,

对于windows 平台有 msi  和 zip 两种 类型,msi 是安装版本,安装过程中自动配置. zip 是压缩版本,是免安装版本

需要手动配置.

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第1张图片

2. 这里我下载的是zip 免安装版本的,解压 到当前文件夹 并进入该文件夹显示如下

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第2张图片

3. 在 与bin 同级的 目录下 创建 db 以及 log 文件夹,同时在 log 目录下 新建一个 mongodb.log 文件, 如下图 所示

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第3张图片

4. 在 bin 的同级目录 创建一个 mongodb.conf 文件 写入mongodb 的配置信息, mongodb 的配置详解如下

#日志文件位置
logpath=D:/learnTest/mongodb-win32-x86_64-2008plus-ssl-4.0.9/log/mongodb.log(这些都是可以自定义修改的,这里是我的)

# 以追加方式写入日志
logappend=true

# 是否以守护进程方式运行
fork = true

# 默认27017
#port = 27017

# 数据库文件位置
dbpath=D:/learnTest/mongodb-win32-x86_64-2008plus-ssl-4.0.9/db

# 启用定期记录CPU利用率和 I/O 等待
#cpu = true

# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true

# 详细记录输出
#verbose = true

#限制连接 ip 控制访问 表示 只允许 ip 为 127.0.0.1 能访问连接 mongodb, 如果想要所有的都可以访问,必须改为0.0.0.0

bind_ip = 127.0.0.1  


# 启用数据库配额管理
#quota = true


# 设置oplog记录等级
#  0=off (default) 1=W 2=R 3=both 7=W+some reads
#  diaglog=0

# 动态调试项
#nocursors = true


# 禁用http界面,默认为localhost:28017
#nohttpinterface = true

# 关闭服务器端脚本,这将极大的限制功能
#noscripting = true


# 关闭扫描表,任何查询将会是扫描失败
#notablescan = true


# 关闭数据文件预分配
#noprealloc = true

 

# Replication Options 复制选项
# replSet=setname


#oplogSize=1024

#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile

以下是我的简单的配置文件,如下所示:

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第4张图片

5.启动 mongdb   cmd 进入mongodb bin 目录下

 输入 启动 命令 如下 mongod -f ../mongodb.conf --install -serviceName "MongoDB"

出现 如下的 错误 

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第5张图片

说明 该版本的 mongodb 在 window 下 不支持 fork 和 diaglog 两个 命令, 这时候 删除 mongodb.conf 中的 fork 和 diaglog 参数.又因为 该版本不支持 fork 命令,不能以后台的形式就行 启动, 故要配置成 windows 服务.启动 命令如下所示:

启动成功后,去查看本地电脑服务中发现 

cmd 进入 bin 目录下 , 输入 mongo 的 进行 本地连接成功 结果如下所示

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第6张图片

如下所示 表示 mongodb 在 windows 下 单机 安装 启动 成功.对于小的研发来说,足够了.

二. mongodb 在 Liunx 上的 单机部署

1. 下载 mongodb https://www.mongodb.com/download-center/community

在liunx 下执行 如下的 命令 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第7张图片

下载结果如下 所示

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第8张图片

再执行 mv 命令 如下图 进行 重命名

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第9张图片

进入 bin 目录 mkdir single 创建 single 文件夹 如下所示 

执行命名 cd single 进入 执行 mkdir data(数据持久化目录), log(日志文件目录), conf(mongodb启动配置文件目录) 三个文件夹

执行结果如下图所示:

进入 log 目录 创建 日志 文件 执行 命令 touch mongodb.log 如下所示

进入conf 目录 执行 cd ../conf,创建mongodb.conf 文件 执行 vim mongodb.conf , 在英文 模式下 按 英文 I 键 进入 写模式,写入如下 配置文件信息即可.

systemLog:
  destination: file
  path: /usr/soft/mongodb/single/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /usr/soft/mongodb/single/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  port: 28021
replication:
  oplogSizeMB: 2048

按下 Esc 键, 输出  :wq!  按下 Enter 进行保存 即可.

2. 启动 mongodb 命令如下所示: 执行 命令 cd ../../bin 进入 bin 目录的文件夹下 执行如下命令进行启动

 ./mongod -f ../single/conf/mongod.conf  启动结果如下所示:

在 bin 目录下 执行 ./mongo --port 27017 进行客户端 连接 mongodb 服务器 如下所示

 mongoDB 在window 和 liunx 上的 单机部署和集群部署_第10张图片

特别注意: 对于 mongodb 关闭的时候 不要使用 kill -9 pid, 因为 mongodb 是依赖于 内存的,当强行关闭mongodb 进程的时候,很可能 有些数据没来得及 io 到 文件中,导致 mongodb 数据库 数据 丢失 或者 文件 混乱,在下一次 重新启动数据库的时候 会出现问题,

在 db 目录下回产生一个 mongod.lock 文件,造成 mongodb 启动 不成功.此时需要手动 删除 该文件, 并执行以下 

./mongod -f ../single/conf/mongod.conf  --repair 进行 修复, 然后再执行 ./mongod -f ../single/conf/mongod.conf  启动mongodb.

虽然该方法可以让mongodb 数据库启动成功,但是 会造成数据丢失,强烈不建议执行kill -9 命令关闭 mongodb 进程,而是使用更优雅的 ./mongod --shutdown -f  ../single/conf/mongod.conf 进行关闭.

三. mongodb 在 liunx 系统上的 集群部署

  mongodb 在一些 小众 或者 自己平时的 研发 过程中,单机系统很适用, 也更方便开发,但是在实际的 生产环境中,单机 会存在 单点故障, 海量 读写 访问时 对于 mongodb 的性能 会产生 极大的影响.因此就需要 对 mongodb 进行 集群.

mongodb 集群有 Master-Slaver, Replica Set,Shariding 三种 集群方式.

在实际的生产中,我 使用的多的是 Replica Set 模式

本文章 将 从 Master-Slaver 慢慢 的向 Replica Set 模式 进行 mongodb 集群的搭建.

1. 同上面 liunx 下 mongodb 单机部署 一样 下载 适合的 liunx 版本的 解压缩 mongodb 压缩包.进入 mongodb 文件

执行 mkdir 28017, mkdir 28018 , mkdir 28019, mkdir  28020 创建文件夹 如下图 所示:

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第11张图片

执行以下命令 在 相应的 目录文件下 创建 conf,data,log 文件

 for i in 28017 28018 28019 28020; do mkdir -p $i/conf; mkdir -p $i/data; mkdir -p $i/log; done

进入其中一个 文件 夹 查看 以 28017 为 例, cd 28017 如图所示:

进入 conf 目录 创建 mongodb.conf 并写入 如下的 配置 信息:

systemLog:
  destination: file
  path: /usr/soft/mongodb/28021/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /usr/soft/mongodb/28021/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  port: 28021
replication:
  oplogSizeMB: 2048

然后复制 该文件 到 28018,28019,28020 相应的 位置,再 执行 如下 命令 分别 修改 28018 28019 28020 配置

 for i in 28018 28019 28020; do sed -i "s#28017#$i#g" /usr/soft/mongodb/$i/conf/mongod.conf; done

至此配置文件的 相关操作 全部完成.

2.启动集群服务器

执行 如下的 命令 先 启动一个 mongodb 服务器 ./bin/mongod   --replSet my_repl -f  28017/conf/mongod.conf

分别执行对应的 命令 启动对应的 28018,28019,28020 端口服务器 执行命令 如下所示

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第12张图片

mongodb 的 几个服务器节点 全部 启动成功. 

进入 bin 目录 执行, ./mongo --port 28017 进行 连接mongodb 服务器

执行以下命令 config={_id:"my_repl",members:[{_id:0,host:"127.0.0.1:28018"},{_id:1,host:"127.0.0.1:28019"},{_id:2,host:"127.0.0.1:28020"}]} 进行主从设置

执行 rs.initiate(config); 使设置 config 生效.

执行 rs.status() 查看各个节点的 情况 如下所示:

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第13张图片

此时 进入 一台 Slaver 服务器 节点 ,执行 insert 和 find 都会报错, 如果 想让 该 从 服务器 具有 查询功能 必须 执行 如下的命令

rs.slaveOk(); 执行完成后 该服务器具有 读的权限 ,但是 任然不具有写的 功能.执行命令 如下所示:

进行 简单的 主从 测试:

主服务器进行 插入 成功 如下所示:

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第14张图片

进入 其中的 一个 从 服务器 进行 查询 结果如下:

mongoDB 在window 和 liunx 上的 单机部署和集群部署_第15张图片

至此 mongod 的 主从 搭建成功.虽然该方式 保证了 主从 集群,能够 是做到 部分 读写分离,但是 还是 存在 单点故障的 问题,为了解决单点故障的 问题,我们 会引入 另一个 节点 仲裁节点 arbiter. 仲裁节点会在 主节点 down 机之后,选举 从节点,使之 成为一个 主节点,而避免发生单点故障的 问题.

升级 Master-Slaver 

将 28020 节点 升级为 仲裁节点,仲裁节点 不会 进行 数据的 存储,属于 小量的 服务器 性能服务.配置过程如下:

执行如下命令: rs.addArb("127.0.0.1:28020")  添加为 仲裁节点

再配置一个 延迟 节点,延迟节点用于 数据 恢复,对于 由于 应用 升级 或者 用户操作失误导致 数据 错误 可以使用 延时节点进行数据恢复.延时节点还可以用来 做 数据报表 和 统计相关的 数据处理.

配置 28019 为 延迟 节点

cfg=rs.config
cfg.members[2].priority=0
cfg.members[2].slaveDelay=120
cfg.members[2].hidden=true
rs.reconfig(cfg)
cfg.members[2].arbiterOnly=true
rs.conf();

至此 mongodb 在 liunx 上的 集群 部署 完成 ,目前 的 4 个 节点 中 包括 一个 主节点 一个 从 节点 一个 仲裁 节点 一个 延时 节点,在生产环境中基本可以做到 高可用,在 海量数据中 可能要 根据需求 进行 相应的 拓展.

谢谢  我是 bigBear,欢迎指点 讨论.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库)