MongoDB 主从安装

1.前提条件

  1. 安装前确保所有节点已经完成 基础环境配置

  2. 需要设置进程数,编辑配置文件 /etc/security/limits.conf

* soft nproc 204800
* hard nproc 204800
  1. 本次安装的 MongoDB 版本为:6.0.3

2.环境和参数准备

  1. 集群中共有 3 个节点,分别为:bigdata9(Primary)bigdata10(Secondary)bigdata11(Secondary)
  2. MongoDB 的安装目录为:/opt/mongodb-linux-x86_64-rhel70-6.0.3
  3. MongoDB 的数据目录为:/data/mongo
  4. MongoDB 的日志目录为:/data/log/mongodb
  5. mongosh 的安装目录为:/opt/mongosh-1.5.1-linux-x64

3.配置及安装

安装 MongoDB 之前需要安装 openssl,libcurl,xz-libs

安装 openssl

tar -zxvf openssl-1.1.1q.tar.gz -C /opt
cd /opt/openssl-1.1.1q
./config
make
sudo make install

安装 libcurl

tar -zxvf curl-7.87.0.tar.gz -C /opt
cd /opt/curl-7.87.0
./configure --with-ssl
make
sudo make install

安装 xz-libs

rpm -ivh xz-libs-5.2.4-4.el8.x86_64.rpm

先安装 mongosh

tar -zxvf mongosh-1.5.1-linux-x64.tgz -C /opt
cd /opt/mongosh-1.5.1-linux-x64/bin/

sudo cp mongosh /usr/local/bin/
sudo cp mongosh_crypt_v1.so /usr/local/lib/

然后安装 MongoDB

tar -zxvf mongodb-linux-x86_64-rhel70-6.0.3.tgz -C /opt
cd /opt/mongodb-linux-x86_64-rhel70-6.0.3
cp bin/* /usr/local/bin/

创建 mongod 用户和 mongod 组

useradd mongod

创建目录

sudo mkdir -p /data/mongo
sudo mkdir -p /data/log/mongodb

给目录设置用户组和用户

sudo chown -R mongod:mongod /data/mongo
sudo chown -R mongod:mongod /data/log/mongodb

创建配置文件

vim /etc/mongod.conf
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0
   port: 27017
storage:
   dbPath: /data/mongo
systemLog:
   destination: file
   path: "/data/log/mongodb/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true

运行 MongoDB

mongod -f /etc/mongod.conf

验证是否启动成功

查看 /data/log/mongodb/mongod.log

出现 [initandlisten] waiting for connections on port 27017

即为成功

连接 MongoDB

mongosh

image-20230112142051606

创建 admin 用户

use admin
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

退出后,关闭 MongoDB

mongod -f /etc/mongod.conf --shutdown

设置开启认证和keyfile

首先生成 keyfile

#用openssl生成一个复杂的伪随机 1024 字符串用作集群共享密码
openssl rand -base64 756 > /opt/mongodb-linux-x86_64-rhel70-6.0.3/keyfile
#赋予只读权限(秘钥不可更改)
chmod 400 keyfile

修改配置文件

vim /etc/mongod.conf

在最后添加

security:
   authorization: enabled
   keyFile: /opt/mongodb-linux-x86_64-rhel70-6.0.3/keyfile

重新启动 MongoDB

mongod -f /etc/mongod.conf

连接

mongosh

验证用户权限

use admin
db.auth('admin','123456')

副本集配置

副本集中成员的数量为奇数个,保证能够选举出主节点

这里以三个副本集为例

首先在三个节点都部署了 MongoDB

停止 MongoDB,在每台机器上修改配置文件

vim /etc/mongod.conf

添加

replication:
   replSetName: rs0

进入 bigdata9 连接到 MongoDB

初始化

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "bigdata9" },
      { _id: 1, host: "bigdata10" },
      { _id: 2, host: "bigdata12" }
   ]
})

查看副本集配置

rs.conf()

查看主节点

rs.status

副本集测试

默认情况下其他节点只是作为主节点的副本,不能读,也不能写。

登录第二个节点,设置为可读

db.getMongo().setReadPref("primaryPreferred")

测试主从复制

在第一台机器插入数据

use test
# 插入一条数据
db.users.insert({name:"jack",age:0,addr:"qingdao",country:"China"})

登录第二台机器,查看是否有记录

db.users.find()

测试可用性

关闭第一台 MongoDB

mongod -f /etc/mongod.conf --shutdown

查看第二台或者第三台服务器,自动切换为主节点(Primary)