前置依赖

  1. 添加MongoDB GPG Key

    1
    2
    3
    
    curl -fsSL https://pgp.mongodb.com/server-4.4.asc | \
    sudo gpg -o /usr/share/keyrings/mongodb-server-4.4.gpg \
    --dearmor
    
  2. 添加mongodb列表,我们使用的系统是Ubuntu 20.04 (Focal)

    1
    
    echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
    
  3. 更新系统软件包

    1
    
    sudo apt-get update
    

MongoDB Server

安装

安装服务

1
sudo apt-get install -y mongodb-org

配置

⚠️ 在配置的过程中尽量使用 DNS 主机名的方式而不是IP地址,防止 IP 改变导致需要更改配置

我们这里的副本集是一个 3 节点的副本架构,3 个节点的内网 IP 分别为 192.168.1.6192.168.1.7192.168.1.8 ,对应的 hostname 分别为 mongo1mongo2mongo3

新增主机 IP 地址映射

分别在三台主机下的 /etc/hosts 添加映射

  1. 打开 /etc/hosts 文件

    1
    
    sudo vim /etc/hosts
    
  2. 在文件中添加如下内容

    1
    2
    3
    
    192.168.1.6 mongo1
    192.168.1.7 mongo2
    192.168.1.8 mongo3
    
  3. 在三台机器上分别使用 ping 命令测试添加的映射是否生效

    1
    2
    3
    
    ping mongo1
    ping mongo2
    ping mongo3
    

配置 mongod.conf 配置文件

MongoDB 的配置文件路径为 /etc/mongod.conf,这里我们主要配置3个参数。

  1. 配置 bindIp 来控制那些人可以访问 mongodb 服务,在 /etc/mongod.conf 添加如下内容

    1
    2
    3
    
    net:
      port: 27017  # 修改了 port 内容,不使用默认端口加强安全性
      bindIp: 0.0.0.0 # 配置允许远程连接访问
    
  2. 配置 replSetName 参数,注意三个服务的配置文件里,这个值是一摸一样的!

    1
    2
    
    replication:
      replSetName: rs0
    
  3. 配置 keyFile 参数让副本成员质检通过 keyFile 进行身份校验

    1. 生成 keyfile 文件到 /data/mongo/mongodb.key

      1
      
      openssl rand -base64 756 > /data/mongo/mongodb.key
      
    2. /etc/mongod.conf 中配置 keyFile

      1
      2
      
      security:
        keyFile: /data/mongo/mongodb.key
      

到此,配置完成。

启动

我们这里使用的是 systemd(systemctl) 方式,service 方式可参考官方文档。分别在三个节点中执行如下命令启动 mongo

1
sudo service mongod start

初始化集群

  1. 使用 mongo 连接到服务

    1
    
    mongo 127.0.0.1:27017
    
  2. 初始化集群

    1
    2
    3
    4
    5
    6
    7
    8
    
    rs.initiate( {
       _id : "rs0",
       members: [
          { _id: 0, host: "mongo1:27017" },
          { _id: 1, host: "mongo2:27017" },
          { _id: 2, host: "mongo3:27017" }
       ]
    })
    
  3. 集群连接用户创建,这里我们创建用户名为 root 的用户

    1
    2
    
    use admin # 切换到 admin 用户
    db.createUser({user:'root', pwd:'xxxx', roles: ['root']}) # 创建用户名为 root, 密码为 xxxx, 角色为 root 的用户 
    

测试连接

⚠️ 阿里云等云服务主机需要修改安全组策略开通 27017 服务端口

使用如下命令进行连通性测试:

1
mongo mongodb://root:xxxx@mongo1:27017,mongo2:27017,mongo3:27017