MongoDB副本集(Replica Sets)安装部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、安装包
  • 二、MongoDB副本集(Replica Sets)搭建教程
    • 1.准备工作
    • 2.安装主节点
      • 2.1解压并创建重要目录
    • 2.2编辑配置文件
    • 2.3设置环境变量
      • 2.4启动mongodb
      • 2.5关闭mongodb
      • 2.6删除数据
      • 2.7发布为系统服务
    • 3.剩余两台安装(单机可跳过后续步骤)
      • 3.1目录拷贝
      • 3.2设置环境变量
  • 4.集群创建
    • 4.1mongodb服务启动
    • 4.2初始化集群
  • 5.启用登录验证
    • 5.1创建管理员账号
    • 5.2创建keyFile
    • 5.3配置文件修改
    • 54keyFile与mongo.conf文件复制
    • 5.5重启主、次、仲裁三台机器mongodb
  • 6.创建数据库及普通用户
  • 总结


前言

mongodb副本集集群部署,结合网上查找资料及自己实践,进行一次完整的安装记录,并附上对应安装包,提供给需要的人使用。此安装包支持linux-x86架构;


一、安装包

mongodb安装包:此博客可下载

二、MongoDB副本集(Replica Sets)搭建教程

1.准备工作

准备3台服务器(自己电脑上装了3台虚拟机进行测试安装,没有问题后安装至生产环境)

  1. 192.168.112.128:27017 主要成员(Primary)
  2. 192.168.112.129:27017 仲裁(Arbiter)
  3. 192.168.112.130:27017 副本成员(Secondaries
副本集有两种类型,三种角色。
两种类型:
   1.主节点(Primary)类型:数据操作的主要连接点,可读写
   2.次、辅助、从节点(Secondaries)类型:数据冗余备份节点,可以读(需要设置)或选举
三种角色:
   1.主要成员(Primary):主要接收所有写操作。就是主节点。
   2.副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。
   3.仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型

2.安装主节点

2.1解压并创建重要目录

将压缩的安装移动到/usr/local目录下,并且将其解压重命名为mongodb,最后在mongodb下创建一些文件目录和配置文件。

#移动安装包到/usr/local目录
mv mongodb-linux-x86_64-rhel70-5.0.7.tgz /usr/local/
 进行解压
tar zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz 
#重命名文件
mv mongodb-linux-x86_64-rhel70-4.4.5 mongodb
#创建目录
cd mongodb && mkdir {data,log,conf,pid}
#创建配置文件
touch /usr/local/mongodb/conf/mongo.conf

各目录介绍:
data目录用来存放数据库数据文件
log目录存放mongo的日志文件
conf目录存放mongodb的配置文件
pid目录存放mongodb运行时的pid文件

2.2编辑配置文件

编辑配置文件(/usr/local/mongodb/conf/mongo.conf),编辑完成后保存退出。

systemLog:
  #MongoDB发送所有日志输出的目标指定为文件  
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径  
  path: "/usr/local/mongodb/log/mongod.log"
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾  
  logAppend: true
storage:
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod
  dbPath: "/usr/local/mongodb/data"
  journal:
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。     
    enabled: true
processManagement:
  #启用在后台运行mongos或mongod进程的守护进程模式。  
  fork: true
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
  pidFilePath: "/usr/local/mongodb/pid/mongod.pid"
  #从中加载时区数据库的完整路径
  timeZoneInfo: /usr/share/zoneinfo
net:
  #服务实例绑定所有IP
  #bindIpAll: true
  #服务实例绑定的IP,0.0.0.0让所有机器都能连接。
  bindIp: 0.0.0.0
  #绑定的端口  
  port: 27017
replication:
  #副本集的名称  
  replSetName: "bdcjq"

注:replication(副本集)配置项不配置的话就是单机配置文件

2.3设置环境变量

设置好环境变量,方便后续直接执行mongo脚本

# 将mongodb的bin目录添加环境变量PATH中去
[root@localhost mongodb]# echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
# 刷新环境变量
[root@localhost mongodb]# source /etc/profile
# 测试环境变量设置是否成功
[root@localhost mongodb]# mongo -version
MongoDB shell version v4.4.5
Build Info: {
    "version": "4.4.5",
    "gitVersion": "b977129dc70eed766cbee7e412d901ee213acbda",
    "openSSLVersion": "OpenSSL 1.0.1e-fips 11 Feb 2013",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "rhel70",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

2.4启动mongodb

启动测试下mongo是否启动成功。显示started successfully,说明启动成功

[root@localhost mongodb]# mongod -f /usr/local/mongodb/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 18064
child process started successfully, parent exiting

2.5关闭mongodb

[root@localhost mongodb]#  ps -ef | grep mongo
root      71114      1 29 23:44 ?        00:00:01 mongod -f /usr/local/mongodb/conf/mongo.conf
root      80560  36922  0 23:44 pts/0    00:00:00 grep --color=auto mongo
[root@localhost mongodb]# kill -9 71114

2.6删除数据

清空 data,log, pid 三个目录,后面再复制mongodb目录至其它两台机器上,其他两台机器上的数据目录就是全新的。

[root@localhost mongodb]# cd /usr/local/mongodb/
[root@localhost mongodb]# rm -rf {data/*,log/*,pid/*}

2.7发布为系统服务

  1. 在/usr/lib/systemd/system 下创建一个mongod.service 文件,内容如下:
[Unit]
Description=mongodb service
Documentation=https://docs.mongodb.com/manual/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/mongodb/pid/mongod.pid
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongo.conf
PrivateTmp=true
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
  1. 服务使用命令
  • 启动服务
systemctl start mongod.service
  • 重启服务
systemctl restart mongod.service
  • 关闭服务
systemctl stop mongod.service
  • 开机启动
systemctl enable mongod.service

其它两台服务器可以参考上面的方式进行创建服务。

3.剩余两台安装(单机可跳过后续步骤)

3.1目录拷贝

将上面已经安装好的mongodb目录完整的拷贝到其它两台服务器上,下面使用scp命令进行拷贝文件。(登录主节点129.168.112.128)

使用 scp 的 -r 选项,进行文件夹拷贝,根据提示输入远程机器的root密码即可。

#拷贝到 129.168.112.129
[root@localhost local]# scp -r /usr/local/mongodb [email protected]:/usr/local/
The authenticity of host ‘192.168.112.129 (192.168.112.129)’ can’t be established.
ECDSA key fingerprint is SHA256:h72YDYewH4bpsq408yVkdF5S2hPzsbeYO03UqMselWI.
ECDSA key fingerprint is MD5:55:ed:19:03:c0:2e:3b:9d:2e:7e:ef:74:17:c9:e2:59.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.112.129’ (ECDSA) to the list of known hosts.
[email protected]’s password:
#拷贝到 129.168.112.130
[root@localhost local]# scp -r /usr/local/mongodb [email protected]:/usr/local/
[email protected]’s password:

3.2设置环境变量

登录129.168.112.129

# 将mongodb的bin目录添加环境变量PATH中去
[root@localhost mongodb]# echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
# 刷新环境变量
[root@localhost mongodb]# source /etc/profile

登录129.168.112.130

# 将mongodb的bin目录添加环境变量PATH中去
[root@localhost mongodb]# echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
# 刷新环境变量
[root@localhost mongodb]# source /etc/profile

4.集群创建

4.1mongodb服务启动

3台机器均启动mongodb

mongod -f /usr/local/mongodb/conf/mongo.conf

4.2初始化集群

登录主节点服务器,连接mongodb进行副本集初始化

mongo
注:如果提示命令不存在,检查2.7章节"发布为系统服务"是否配置或是否配置错误

登录后,初始化集群,其中id为配置文件中设定的副本集名称。
在这里插入图片描述


>cfg={ _id:"bdcjq", members:[ 
{_id:0,host:'192.168.112.128:27017',priority:10},
{_id:1,host:'192.168.112.130:27017',priority:5}, 
{_id:2,host:'192.168.112.129:27017',arbiterOnly:true}] };
>rs.initiate(cfg)

#此输出代表初始化集群成功:{ “ok” : 1 }
#查看副本集状态 :rs.status()
说明:

  1. 当执行完初始化成功后,我们使用mongo终端连接到192.168.112.129(仲裁节点),192.168.112.130(次节点)。可以发现命令提示符分别变成了bdcjq:ARBITER>和bdcjq:SECONDARY>
  2. 默认次节点是不可以读写操作的,但是我们可以设置拥有读权限(次节点认证过后,执行:rs.secondaryOk() 或者rs.secondaryOk(true)即可)
  3. 我们可以取消次节点的读权限(rs.secondaryOk(false))

5.启用登录验证

一般生产环境都是需要登录才能够操作数据库,下面就如何开起mongodb副本集集群登录认证做出说明。

5.1创建管理员账号

启用登录验证之前创建管理员账号

[root@localhost mongodb]# mongo
>use admin
>db.createUser({user: "root",pwd: "123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},"readWriteAnyDatabase"]})
>db.grantRolesToUser("root", ["clusterAdmin"])

5.2创建keyFile

登录主节点192.168.112.128,创建keyFile(keyfile是用于mongodb集群内部成员认证用的。keyfile主要是用于集群内部认证用,唯一的要求是6-1024长度内容,集群内部成员该文件值必须一样才可以)-

-主节点创建后复制到次节点和仲裁节点
openssl rand -base64 21 > /usr/local/mongodb/keyFile
chmod 400 /usr/local/mongodb/keyFile

5.3配置文件修改

vi /usr/local/mongodb/conf/mongo.conf

mongo.conf配置文件增加以下内容

#安全配置
security:
  #配置密码文件
  keyFile:/usr/local/mongodb/keyFile
  #开启认证方式运行
  authorization: "enabled"

54keyFile与mongo.conf文件复制

将主节点配置完整的keyFile与mongo.conf两个文件复制到次节点和仲裁节点

scp  /usr/local/mongodb/keyFile [email protected]:/usr/local/mongodb
scp  /usr/local/mongodb/keyFile [email protected]:/usr/local/mongodb
scp  /usr/local/mongodb/conf/mongo.conf [email protected]:/usr/local/mongodb/conf
scp  /usr/local/mongodb/conf/mongo.conf [email protected]:/usr/local/mongodb/conf

5.5重启主、次、仲裁三台机器mongodb

[root@localhost mongodb]# systemctl restart mongodb.service

6.创建数据库及普通用户

启用用户验证后,登录主节点创建数据库及用户即可,主节点创建后会自动同步至次节点

[root@localhost mongodb]# mongo
bdcjq:PRIMARY>use admin
bdcjq:PRIMARY>db.auth("root","123456")
1
#此处显示1说明正常登录,不是1说明登录失败#
#开始创建数据库及普通用户
bdcjq:PRIMARY>use test
switched to db test
bdcjq:PRIMARY>db.test.insert({"name":"aaa"})
WriteResult({ "nInserted" : 1 })
bdcjq:PRIMARY>db.createUser(
{
  user: "ceshi",
  pwd: "123456",
  roles: [ { role: "readWrite", db: "test" }]
}
)

用户创建显示下方内容即创建成功

Successfully added user: {
“user” : “ceshi”,
“roles” : [
{
“role” : “readWrite”,
“db” : “test”
}
] }

验证创建数据库及用户是否成功

bdcjq:PRIMARY>show dbs
admin        0.000GB
config       0.000GB
local        0.000GB
test         0.000GB

总结

第一次梳理,如不清楚可留言

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