mongodb安装

环境准备

  • 一台linux服务器,并且需要root权限
  • mongodb客户端,用于验证连接是否成功,下载地址

1. 单机版安装

  1. 配置程序包管理系统(yum)
1
vi /etc/yum.repos.d/mongodb-org-4.2.repo
  • 将以下内容复制到文件中
1
2
3
4
5
6
[mongodb-org-4.2]
name=mongodb Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
  1. 安装mongodb
1
yum install -y mongodb-org

默认情况下,mongodb使用mongod用户帐户运行,并使用以下默认目录

1
2
3
4
# 数据目录
/var/lib/mongo
# 日志目录
/var/log/mongodb
  1. 开启远程访问
1
2
vi /etc/mongod.conf
bindIp: 0.0.0.0
  1. 基本命令
1
2
3
4
5
6
systemctl start mongod
systemctl restart mongod
systemctl status mongod
systemctl stop mongod
systemctl enable mongod
systemctl is-enabled mongod
  1. 创建管理员用户
1
2
3
4
5
# 进入mongo
mongo
# 创建管理员,用户名密码可自定义,root角色是mongo最高权限用户,用于对整个mongo进行管理
use admin
db.createUser({user:"admin",pwd:"admin",roles:["root"]})
  1. 创建普通用户
1
2
3
4
5
# 进入mongo
mongo
# 创建数据库
use wx
db.createUser({user:"wx",pwd:"123456",roles:[{role:"dbOwner",db:"wx"}]})
  1. 开启权限认证
1
2
3
4
vi /etc/mongod.conf
# 开启认证
security:
authorization: enabled
  1. 重启mongo
1
2
3
4
systemctl restart mongod
# 之后登录的时候就需要加上用户名和密码
mongo admin -u admin -p admin
mongo wx -u wx -p 123456
  1. 卸载
1
2
3
4
sudo yum erase $(rpm -qa | grep mongodb-org)

rm -rf /var/log/mongodb/
rm -rf /var/lib/mongo/

2. 副本集模式安装

服务器 端口 说明 备注
192.168.186.128 27017 primary 主节点
192.168.186.131 27017 secondary 从节点
192.168.186.132 27017 arbiter 仲裁者
  1. 按照单机版 1,2,3,4 步骤为三台机器分别安装上mongo

确保三台机器之间可以互相通信

  1. 进入主节点,创建admin用户
1
2
3
mongo
use admin
db.createUser({user:"admin",pwd:"admin",roles:["root"]})
  1. 为每个节点设置副本集名称
1
2
3
4
5
6
vi /etc/mongod.conf

replication:
replSetName: test
# 更改完成后分别重启三台服务器
systemctl restart mongod
  1. 进入主节点,配置副本集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 用admin账户登录
mongo admin -u admin -p admin

# 配置副本
config = {
_id: "test",
members: [
{ _id: 0, host: "192.168.186.128:27017",priority:2 },
{ _id: 1, host: "192.168.186.131:27017",priority:1 },
{ _id: 2, host: "192.168.186.132:27017",arbiterOnly:true }
]
}

# 初始化配置
rs.initiate(config)
# 查询配置
rs.conf()
# 查询状态
rs.status()
# 推出
exit
  1. 副本集认证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 在主节点生成keyfile文件,并将该文件同步到其他节点
openssl rand -base64 745 > /usr/local/lib/mongodb-keyfile

# 在每个节点下为文件赋予权限
chown mongod /usr/local/lib/mongodb-keyfile
chmod 600 /usr/local/lib/mongodb-keyfile

# 编辑每个节点的配置文件
vi /etc/mongod.conf
# 开启认证
security:
authorization: enabled
keyFile: /usr/local/lib/mongodb-keyfile

# 依次重启每个节点,先启动主节点
systemctl restart mongod
  1. 故障测试

从节点故障测试

  • 128 和 132 对 131 的心跳失败。因为主节点还在,因此,没有触发投票选举。
  • 如果此时,在主节点写入数据。再启动从节点,会发现,主节点写入的数据,会自动同步给从节点。
  • 此时副本集具有读写功能

主节点故障测试

  • 131 和 132 对 128 的心跳失败,当失败超过10秒,此时因为没有主节点了,会自动发起投票。
  • 而从节点只有一个,因此,候选人只有一个就是131
  • 132 向 131 投了一票,131本身自带一票,因此共两票,超过了“大多数”
  • 132 是仲裁节点,没有选举权,131不向其投票,其票数是0
  • 此时副本集具有读写功能

仲裁节点和主节点故障

  • 131 仍然是从节点,副本集中没有主节点了,导致此时副本集是只读状态,无法写入
  • 为啥不选举了? 因为131 的票数,没有获得大多数,即没有大于等于2,它只有默认的一票(优先级 是1) 如果要触发选举,随便加入一个成员即可。 如果只加入132 节点,则主节点一定是131,因为没得选了,仲裁节点不参与选举, 但参与投票
    如果只加入128 节点,会发起选举。因为128和131都是两票,则按照谁数据新,谁当主节点。

仲裁节点和从节点故障

  • 128 主节点自动降级为副本节点。(服务降级)
  • 此时副本集是只读状态,无法写入

3. 分片集群安装

4. 注意点

  • 生产环境为了安全性,务必开启mongo的认证,
  • bindIp生产环境不建议设置为0.0.0.0,一般只开放使用服务器的IP即可
  • 建议不要使用通用的端口27017,换成其他端口
  • 将认证密码设置复杂点,避免被黑客的爆破字典试出来
  • 详细文档 https://gitee.com/abcd1234567_1/mongo-db.git
文章目录
  1. 1. 1. 单机版安装
  2. 2. 2. 副本集模式安装
  3. 3. 3. 分片集群安装
  4. 4. 4. 注意点
|