Skip to content

Latest commit

 

History

History
202 lines (137 loc) · 8.04 KB

05_安装和配置数据库.md

File metadata and controls

202 lines (137 loc) · 8.04 KB

5. 安装和配置数据库

因为 IAM 系统用到了 MariaDB、Redis、MongoDB 数据库来存储数据,而 IAM 服务在启动时会先尝试连接这些数据库,所以为了避免启动时连接数据库失败,这里我们先来安装需要的数据库。

5.1 配置 scripts/install/environment.sh

IAM 组件的安装配置都是通过环境变量文件 scripts/install/environment.sh 进行配置的,所以你需要先配置好 scripts/install/environment.sh。文件中的环境变量都有注释,你可以根据注释来配置。当然,你也可以直接使用environment.sh中配置的默认值,以提高你的安装效率。

scripts/install/environment.sh文件中配置MariaDB用户名的配置语句如下:

readonly MARIADB_USERNAME=${MARIADB_USERNAME:-iam}

readonly说明MARIADB_USERNAME只能被赋值一次。${MARIADB_USERNAME:-iam}使用了Bash shell的变量扩展语法,其语法格式为${待测变量:-默认值},表示:如果待测变量不存在或其值为空,则返回默认值,否则返回待测变量的值。

5.1 安装和配置 MariaDB

IAM 会把 REST 资源的定义信息存储在关系型数据库中,关系型数据库我选择了 MariaDB。你可能会问“为什么会选择 MariaDB,而不是 MySQL?”。选择 MariaDB 一方面是因为它是发展最快的 MySQL 分支,相比 MySQL,它加入了很多新的特性,并且它能够完全兼容 MySQL,包括 API 和命令行。另一方面是因为 MariaDB 是开源的,而且迭代速度很快。

MariaDB安装和配置步骤如下:

  1. 安装和配置MariaDB。

你可以通过以下命令,安装和配置 MariaDB,并将 root 密码设置为 iam59!z$

$ cd $IAM_ROOT
$ ./scripts/install/mariadb.sh iam::mariadb::install
  1. 测试MariaDB是否安装成功。

你可以通过以下命令,来测试 MariaDB 是否安装从成功:

$ mysql -h127.0.0.1 -uroot -p'iam59!z$'
MariaDB [(none)]>

执行上述命令后,成功进入了MariaDB的交互界面,并且没有报错,说明MariaDB安装成功。

5.2 安装和配置 Redis

在 IAM 系统中,由于 iam-authz-server 是从 iam-apiserver 拉取并缓存用户的密钥/策略信息的,因此同一份密钥/策略数据会分别存在 2 个服务中,这可能会出现数据不一致的情况。数据不一致会带来一些问题,例如:当我们通过 iam-apiserver 创建了一对密钥,但是这对密钥还没有被 iam-authz-server 缓存,这时候通过这对密钥访问 iam-authz-server 就会失败。

为了保证数据的一致性,我们可以使用 Redis 的发布订阅(Pub/Sub)功能进行消息通知。同时,iam-authz-server 也会将授权审计日志缓存到 Redis 中,所以也需要安装 Redis数据库。

Redis安装和配置步骤如下:

  1. 安装和配置Redis。

你可以通过以下命令来安装和配置 Redis,并将 Redis 的初始密码设置为 iam59!z$

$ cd $IAM_ROOT
$ ./scripts/install/redis.sh iam::redis::install

这里我们要注意,scripts/install/redis.sh 脚本中 iam::redis::install 函数对 Redis 做了一些配置,例如:修改 Redis 使其以守护进程的方式运行、修改 Redis 的密码为iam59!z$等,具体的配置内容,可查看iam::redis::install函数。

  1. 测试Redis是否安装成功。

安装完成后,你可以通过以下命令,来测试 Redis 是否安装成功:

$ redis-cli -h 127.0.0.1 -p 6379 -a 'iam59!z$' # 连接 Redis,-h 指定主机,-p 指定监听端口,-a 指定登录密码
127.0.0.1:6379>

执行上述命令后,成功进入了Redis的交互界面,并且没有报错,说明Redis安装成功。

5.3 安装和配置 MongoDB

因为 iam-pump 会将 iam-authz-server 产生的授权日志处理后存储在 MongoDB 中,所以也需要安装 MongoDB 数据库,可以通过以下两步来安装:

  1. 安装 MongoDB。
  2. 创建 MongoDB 账号。
  1. 安装 MongoDB

你可以通过以下 4 步来安装 MongoDB。

  1. 配置 MongoDB 源,并安装 MongoDB。

centos: CentOS8.x 系统默认没有配置安装 MongoDB 需要的 yum 源,所以你需要先配置好 yum 源再安装:

$ sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo<<'EOF'
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF

$ sudo yum install -y mongodb-org

ubuntu:

sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

sudo apt-get update
sudo apt install mongodb-org
  1. 关闭 SELinux。

centos: 在安装的过程中,SELinux 可能会阻止 MongoDB 访问/sys/fs/cgroup,所以你还需要关闭 SELinux:

$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config # 永久关闭 SELINUX

ubuntu:

$ sudo systemctl stop firewalld.service
$ sudo systemctl disable firewalld.service
  1. 开启外网访问权限和登录验证。

MongoDB 安装完之后,默认情况下是不会开启外网访问权限和登录验证的,为了方便使用和保证安全,我建议你先开启这些功能,执行以下命令开启:

$ sudo sed -i '/bindIp/{s/127.0.0.1/0.0.0.0/}' /etc/mongod.conf
$ sudo sed -i '/^#security/a\security:\n  authorization: enabled' /etc/mongod.conf
  1. 启动 MongoDB。

配置完 MongoDB 之后,可以通过以下命令来启动MongoDB:

$ sudo systemctl start mongod
$ sudo systemctl enable mongod # 设置开机启动
$ sudo systemctl status mongod # 查看 mongod 运行状态,如果输出中包含 active (running)字样说明 mongod 成功启动。

启动成功之后,你可以通过 mongo 命令登录 MongoDB:

$ mongo --quiet "mongodb://127.0.0.1:27017"
>

执行上述命令后,成功进入了MongoDB的交互界面,并且没有报错,说明MongoDB安装成功。

  1. 创建 MongoDB 账号

安装完 MongoDB 后,默认是没有用户的,为了方便 IAM 应用使用,你需要先创建好管理员账号。通过管理员账号登录 MongoDB后,你可以执行创建普通用户、数据库等操作。具体操作步骤如下。

  1. 创建管理员账号。

通过 use admin 指令切换到 admin 数据库,再通过 db.auth("用户名","用户密码") 验证用户登录权限。如果返回 1 表示验证成功;如果返回 0 表示验证失败,具体的命令如下:

$ mongo --quiet "mongodb://127.0.0.1:27017"
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"iam59!z$",roles:["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> db.auth("root", "iam59!z$")
1

提示: 如果想删除用户,可以使用 db.dropUser("用户名") 命令来删除。

db.createUser用来创建一个MongoDB用户,用到了以下 3 个参数:

  • user: 用户名。
  • pwd: 用户密码。
  • roles: 用来设置用户的权限,比如读、写、读写等。

因为 admin 用户具有 MongoDB 的 root 权限,权限过大,安全性会降低。为了提高安全性,还需要创建一个 iam 普通用户来连接和操作 MongoDB。

  1. 创建 iam 用户。

创建 iam 用户命令如下:

$ mongo --quiet mongodb://root:'iam59!z$'@127.0.0.1:27017/iam_analytics?authSource=admin # 用管理员账户连接 MongoDB
> use iam_analytics
switched to db iam_analytics
> db.createUser({user:"iam",pwd:"iam59!z$",roles:["dbOwner"]})
Successfully added user: { "user" : "iam", "roles" : [ "dbOwner" ] }
> db.auth("iam", "iam59!z$")
1

创建完 iam 普通用户后,可以执行以下命令,通过 iam 用户登录 MongoDB:

$ mongo --quiet mongodb://iam:'iam59!z$'@127.0.0.1:27017/iam_analytics?authSource=iam_analytics

至此,我们成功安装了 IAM 系统需要的数据库 MariaDB、Redis 和 MongoDB。