注意:
- 此教程位于 Oracle 提供的免费实验室环境中。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
将 Oracle Linux Automation Manager 迁移到群集部署
简介
无论是从以前的发行版升级还是从单个主机安装开始,这两种环境都可以迁移到集群部署。管理员需要在迁移之前规划其拓扑,因为集群可能由控制层、执行和跳节点以及远程数据库的组合组成。
学完本教程后,您将了解如何将单个主机安装迁移到具有远程数据库的群集部署。
目标
在本教程中,您将学习如何:
- 设置远程数据库
- 迁移到集群部署
先决条件
-
安装有 Oracle Linux Automation Manager 的系统。
有关安装 Oracle Linux Automation Manager 的详细信息,请参见《Oracle Linux Automation Manager 安装指南》。
部署 Oracle Linux Automation Manager
注:如果在您自己的租户中运行,请阅读 linux-virt-labs
GitHub 项目 README.md ,并在部署实验室环境之前完成先决条件。
-
在 Luna 桌面上打开一个终端。
-
克隆
linux-virt-labs
GitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
转到工作目录。
cd linux-virt-labs/olam
-
安装所需的集合。
ansible-galaxy collection install -r requirements.yml
-
更新 Oracle Linux 实例配置。
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "olam-node" type: "control" 2: instance_name: "exe-node" type: "execution" 3: instance_name: "db-node" type: "db" passwordless_ssh: true add_cluster_ports: true EOF
-
部署实验室环境。
ansible-playbook create_instance.yml -e ansible_python_interpreter="/usr/bin/python3.6" -e "@instances.yml" -e olam_single_host=true
免费实验室环境需要额外的变量
ansible_python_interpreter
,因为它为 Oracle Cloud Infrastructure SDK for Python 安装了 RPM 程序包。此软件包安装的位置位于 python3.6 模块下。默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将
-e instance_shape="VM.Standard3.Flex"
或-e os_version="9"
添加到部署命令。重要提示:等待剧本成功运行并进入暂停任务。Oracle Linux Automation Manager 安装在手册的此阶段已完成,并且实例已准备就绪。记下之前的播放,该播放输出所部署节点的公共和专用 IP 地址。
登录到 WebUI
-
打开终端并配置到 Oracle Linux Automation Manager 的 SSH 隧道。
ssh -L 8444:localhost:443 oracle@<hostname_or_ip_address>
在免费实验室环境中,使用 olam-node 实例的外部 IP 地址。
-
打开 Web 浏览器并输入 URL。
https://localhost:8444
注:根据使用的浏览器批准安全警告。对于 Chrome,单击 **Advanced 按钮,然后单击 Proceed to localhost (unsafe) 链接。
-
使用在自动部署期间创建的
admin
的用户名和admin
的密码登录到 Oracle Linux Automation Manager。 -
登录后,将显示 WebUI。
迁移到集群部署
虽然 Oracle Linux Automation Manager 作为单个主机部署运行,但它还支持以集群的形式运行,其中包含远程数据库以及单独的控制层和执行节点。安装会将单主机实例配置为 hybrid
节点。迁移到集群部署的第一步是将此实例转换为 control plane
节点。
有关不同安装拓扑的更多信息,请参见 Oracle Linux Automation Manager 安装指南文档中的 Planning the Installation 一章。
准备控制层节点
-
切换到连接到运行 Oracle Linux Automation Manager 的 olam-node 实例的终端。
注:从现在开始,我们将此实例称为控制层节点。
-
停止 Oracle Linux Automation Manager 服务。
sudo systemctl stop ol-automation-manager
-
创建数据库的备份。
sudo su - postgres -c 'pg_dumpall > /tmp/olamv2_db_dump'
安装远程数据库
-
将数据库备份从控制层节点复制到新的远程数据库主机。
scp /tmp/olamv2_db_dump oracle@db-node:/tmp/
scp
命令使用节点之间的 SSH 连接进行通信。由于免费实验室环境在实例之间配置了无密码 SSH 登录,因此可以建立此连接。 -
通过 ssh 连接到 db-node 实例。
ssh oracle@db-node
-
启用数据库模块流。
Oracle Linux Automation Manager 允许使用 Postgresql 数据库版本 12 或 13。我们将在本教程中使用并启用版本 13 模块流。
sudo dnf -y module reset postgresql sudo dnf -y module enable postgresql:13
-
安装数据库服务器。
sudo dnf -y install postgresql-server
-
添加数据库防火墙规则。
sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload
-
初始化数据库。
sudo postgresql-setup --initdb
-
设置数据库默认存储算法。
sudo sed -i "s/#password_encryption.*/password_encryption = scram-sha-256/" /var/lib/pgsql/data/postgresql.conf
有关此数据库功能的更多详细信息,请参阅上游文档中的密码验证。
-
更新基于数据库的验证文件。
echo "host all all 0.0.0.0/0 scram-sha-256" | sudo tee -a /var/lib/pgsql/data/pg_hba.conf > /dev/null
此附加行执行 SCRAM-SHA-256 验证,以在从任何 IP 地址连接时验证用户的密码。
-
更新数据库在其上侦听连接的 listen_address 值。
sudo sed -i "/^#port = 5432/i listen_addresses = '"$(hostname -s)"'" /var/lib/pgsql/data/postgresql.conf
您可以为此值选择 IP 地址或主机名。本教程使用
hostname -s
选择主机名。 -
启动和启用数据库服务。
sudo systemctl enable --now postgresql
-
导入数据库转储文件。
sudo su - postgres -c 'psql -d postgres -f /tmp/olamv2_db_dump'
-
设置 Oracle Linux Automation Manager 数据库用户帐户密码。
sudo su - postgres -c "psql -U postgres -d postgres -c \"alter user awx with password 'password';\""
此命令将
awx
密码设置为password
。如果在空闲练习环境中运行此命令,请选择更安全的密码。 -
关闭连接到 db-node 实例的 SSH 会话,完成设置远程数据库所需的步骤。
exit
添加远程数据库设置
-
通过检查终端提示符确认与 olam-node 实例的连接。
-
验证主机是否可以与远程数据库通信。
pg_isready -d awx -h db-node -p 5432 -U awx
postgresql 程序包包括
pg_isready
命令。该软件包是原始单主机安装的一部分。如果此命令不起作用,您可能跳过上面的某个步骤,或者缺少对网络上端口 5432 的入站访问。 -
将远程数据库设置添加到新的定制配置文件。
cat << EOF | sudo tee /etc/tower/conf.d/db.py > /dev/null DATABASES = { 'default': { 'ATOMIC_REQUESTS': True, 'ENGINE': 'awx.main.db.profiled_pg', 'NAME': 'awx', 'USER': 'awx', 'PASSWORD': 'password', 'HOST': 'db-node', 'PORT': '5432', } } EOF
使用先前为
awx
数据库用户帐户设置的相同密码。 -
停止并禁用控制层节点上的本地数据库。
sudo systemctl stop postgresql sudo systemctl disable postgresql
-
屏蔽本地数据库服务。
sudo systemctl mask postgresql
此步骤可防止在启动 Oracle Linux Automation Manager 服务时启动本地数据库服务。
-
启动 Oracle Linux Automation Manager。
sudo systemctl start ol-automation-manager
-
验证 Oracle Linux Automation Manager 是否连接到远程数据库。
sudo su -l awx -s /bin/bash -c "awx-manage check_db"
如果连接成功,输出将返回远程数据库版本详细信息。
删除本地数据库实例
确认与远程数据库的连接正常后,删除原始本地数据库是安全的。
-
删除数据库程序包。
sudo dnf -y remove postgresql
-
删除包含旧数据库数据文件的
pgsql
目录。sudo rm -rf /var/lib/pgsql
更改控制层节点的节点类型
转换为群集部署时,将单主机实例 node_type 从 hybrid
切换到 control
。
-
确认控制层节点的当前节点类型。
sudo su -l awx -s /bin/bash -c "awx-manage list_instances"
输出显示
node_type
设置为hybrid
的值。 -
删除默认实例组。
sudo su -l awx -s /bin/bash -c "awx-manage remove_from_queue --queuename default --hostname $(hostname -i)"
-
定义新实例和队列。
sudo su -l awx -s /bin/bash -c "awx-manage provision_instance --hostname=$(hostname -i) --node_type=control" sudo su -l awx -s /bin/bash -c "awx-manage register_queue --queuename=controlplane --hostnames=$(hostname -i)"
-
在定制设置文件中添加默认队列名称值。
cat << EOF | sudo tee -a /etc/tower/conf.d/olam.py > /dev/null DEFAULT_EXECUTION_QUEUE_NAME = 'execution' DEFAULT_CONTROL_PLANE_QUEUE_NAME = 'controlplane' EOF
-
更新受体设置。
cat << EOF | sudo tee /etc/receptor/receptor.conf > /dev/null --- - node: id: $(hostname -i) - log-level: info - tcp-listener: port: 27199 - control-service: service: control filename: /var/run/receptor/receptor.sock - work-command: worktype: local command: /var/lib/ol-automation-manager/venv/awx/bin/ansible-runner params: worker allowruntimeparams: true verifysignature: false EOF
-
重新启动 Oracle Linux Automation Manager
sudo systemctl restart ol-automation-manager
将单主机混合节点转换为具有远程数据库的控制平面节点已完成。现在,我们将添加一个执行层节点,以使此集群完全正常运行。
向群集中添加执行层节点
在群集完全正常运行之前,添加一个或多个执行节点。执行节点使用 ansible-runner 运行标准作业,后者在基于 OLAM EE Podman 容器的执行环境中运行剧本。
准备执行层节点
-
通过 ssh 连接到 *exe-node 实例。
ssh exe-node
-
安装 Oracle Linux Automation Manager 系统信息库软件包。
sudo dnf -y install oraclelinux-automation-manager-release-el8
-
禁用旧发行版的系统信息库。
sudo dnf config-manager --disable ol8_automation ol8_automation2
-
启用当前发行版的系统信息库。
sudo dnf config-manager --enable ol8_automation2.2
-
安装 Oracle Linux Automation Manager 软件包。
sudo dnf -y install ol-automation-manager
-
添加受体防火墙规则。
sudo firewall-cmd --add-port=27199/tcp --permanent sudo firewall-cmd --reload
-
编辑 Redis 套接字配置。
sudo sed -i '/^# unixsocketperm/a unixsocket /var/run/redis/redis.sock\nunixsocketperm 775' /etc/redis.conf
-
从控制层节点复制密钥。
ssh oracle@olam-node "sudo cat /etc/tower/SECRET_KEY" | sudo tee /etc/tower/SECRET_KEY > /dev/null
重要提示:每个群集节点都需要相同的密钥。
-
创建包含所需设置的定制设置文件。
cat << EOF | sudo tee /etc/tower/conf.d/olamv2.py > /dev/null CLUSTER_HOST_ID = '$(hostname -i)' DEFAULT_EXECUTION_QUEUE_NAME = 'execution' DEFAULT_CONTROL_PLANE_QUEUE_NAME = 'controlplane' EOF
CLUSTER_HOST_ID
是群集内主机的唯一标识符。 -
创建包含远程数据库配置的定制设置文件。
cat << EOF | sudo tee /etc/tower/conf.d/db.py > /dev/null DATABASES = { 'default': { 'ATOMIC_REQUESTS': True, 'ENGINE': 'awx.main.db.profiled_pg', 'NAME': 'awx', 'USER': 'awx', 'PASSWORD': 'password', 'HOST': 'db-node', 'PORT': '5432', } } EOF
-
部署 ansible-runner 执行环境。
-
以
awx
用户身份打开 shell。sudo su -l awx -s /bin/bash
-
将任何现有容器迁移到最新的 podman 版本,同时保持无特权名称空间处于活动状态。
podman system migrate
-
为 Oracle Linux Automation Manager 提取 Oracle Linux Automation Engine 执行环境。
podman pull container-registry.oracle.com/oracle_linux_automation_manager/olam-ee:2.2
-
退出
awx
用户 shell。exit
-
-
为 NGINX 生成 SSL 证书。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/tower/tower.key -out /etc/tower/tower.crt
输入请求的信息或仅按
ENTER
键。 -
将默认 NGINX 配置替换为以下配置。
cat << 'EOF' | sudo tee /etc/nginx/nginx.conf > /dev/null user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; } EOF
-
更新受体配置文件。
cat << EOF | sudo tee /etc/receptor/receptor.conf > /dev/null --- - node: id: $(hostname -i) - log-level: debug - tcp-listener: port: 27199 - tcp-peer: address: $(ssh olam-node hostname -i):27199 redial: true - control-service: service: control filename: /var/run/receptor/receptor.sock - work-command: worktype: ansible-runner command: /var/lib/ol-automation-manager/venv/awx/bin/ansible-runner params: worker allowruntimeparams: true verifysignature: false EOF
node:id
是当前节点的主机名或 IP 地址。tcp-peer:address
是受体网格的主机名或控制平面节点上的 IP 地址和端口。
-
启动和启用 Oracle Linux Automation Manager 服务。
sudo systemctl enable --now ol-automation-manager.service
-
关闭连接到 exe-node 实例的 SSH 会话,因为这完成了设置执行节点的必要步骤。
exit
预配执行层节点
-
通过检查终端提示符确认与 olam-node 实例的连接。
必须在群集的某个控制层节点上运行预配步骤,并将其应用于 Oracle Linux Automation Manager 的所有群集实例。
-
定义执行实例和队列。
sudo su -l awx -s /bin/bash -c "awx-manage provision_instance --hostname=$(ssh exe-node hostname -i) --node_type=execution" sudo su -l awx -s /bin/bash -c "awx-manage register_default_execution_environments" sudo su -l awx -s /bin/bash -c "awx-manage register_queue --queuename=execution --hostnames=$(ssh exe-node hostname -i)"
register_queue
使用queuename
创建/更新作业,并使用逗号分隔的hostnames
列表运行作业。
-
注册服务网格对等方关系。
sudo su -l awx -s /bin/bash -c "awx-manage register_peers $(ssh exe-node hostname -i) --peers $(hostname -i)"
验证执行层节点注册
-
通过 ssh 连接到 *exe-node 实例。
ssh exe-node
-
验证 Oracle Linux Automation Manager 网格服务是否正在运行。
sudo systemctl status receptor-awx
-
检查服务网格的状态。
sudo receptorctl --socket /var/run/receptor/receptor.sock status
输出示例:
[oracle@execution-node ~]$ sudo receptorctl --socket /var/run/receptor/receptor.sock status Node ID: 10.0.0.62 Version: +g System CPU Count: 2 System Memory MiB: 15713 Connection Cost 10.0.0.55 1 Known Node Known Connections 10.0.0.55 10.0.0.62: 1 10.0.0.62 10.0.0.55: 1 Route Via 10.0.0.55 10.0.0.55 Node Service Type Last Seen Tags 10.0.0.62 control Stream 2022-11-06 19:46:53 {'type': 'Control Service'} 10.0.0.55 control Stream 2022-11-06 19:46:06 {'type': 'Control Service'} Node Work Types 10.0.0.62 ansible-runner 10.0.0.55 local
有关受体的详细信息,请参阅上游文档。
-
验证正在运行的集群实例并显示可用容量。
sudo su -l awx -s /bin/bash -c "awx-manage list_instances"
当群集在所有实例之间建立通信后,输出将显示
green
。如果结果显示为red
,请等待 20-30 秒,然后尝试重新运行命令。输出示例:
[oracle@control-node ~]$ sudo su -l awx -s /bin/bash -c "awx-manage list_instances" [controlplane capacity=136] 10.0.0.55 capacity=136 node_type=control version=19.5.1 heartbeat="2022-11-08 16:24:03" [default capacity=0] [execution capacity=136] 10.0.0.62 capacity=136 node_type=execution version=19.5.1 heartbeat="2022-11-08 17:16:45"
完成将 Oracle Linux Automation Manager 迁移到群集部署的过程。
(可选)验证群集是否正常工作
-
刷新用于显示上一个 WebUI 的 Web 浏览器窗口,或者打开新的 Web 浏览器窗口并输入 URL。
https://localhost:8444
URL 中使用的端口需要与 SSH 隧道的本地端口匹配。
注:根据使用的浏览器批准安全警告。对于 Chrome,单击 Advanced(高级)按钮,然后单击 Proceed to localhost (unsafe) 链接。
-
使用 USERNAME
admin
和密码admin
再次登录到 Oracle Linux Automation Manager。 -
登录后,将显示 WebUI。
-
使用左侧的导航菜单,单击管理部分下的实例组。
-
在主窗口中,单击添加按钮,然后选择添加实例组。
-
在创建新实例组页上输入必需的信息。
-
单击保存按钮。
-
在详细信息汇总页中,单击实例选项卡。
-
从实例页中,单击关联按钮。
-
在选择实例页上,单击执行节点旁边的复选框。
-
单击保存按钮。
-
使用左侧的导航菜单,单击资源部分下的库存。
-
在主窗口中,单击添加按钮,然后选择添加库存。
-
在创建新库存页上输入必需的信息。
对于实例组,选择搜索图标以显示选择实例组弹出对话框。单击执行组旁边的复选框,然后单击选择按钮。
-
单击保存按钮。
-
从详细信息汇总页中,单击主机选项卡。
-
从主机页中,单击添加按钮。
-
在创建新主机页上,输入可用实例的 IP 地址或主机名。
在免费实验环境中,我们将使用 db-node ,这是远程数据库实例的主机名。
-
单击保存按钮。
-
导航到左侧的菜单,然后单击 ** 身份证明 `。
-
在身份证明页上,单击添加按钮。
-
在创建新身份证明页上输入必需的信息。
对于身份证明类型,单击下拉菜单并选择计算机。显示凭证的类型详细信息。
输入
oracle
的用户名并浏览 SSH 私钥。单击 Browse...(浏览 ...)按钮将显示 Open File(打开文件)对话框窗口。右键单击该对话框的主窗口,然后选择显示隐藏文件。
然后选择
.ssh
文件夹和id_rsa
文件。单击 Open 按钮将导致私钥文件的内容复制到 SSH Private Key 对话框中。向下滚动并单击保存按钮。 -
导航到左侧的菜单,然后单击库存。
-
从库存页面中,单击测试库存。
-
从详细信息汇总页中,单击主机选项卡。
-
在 Hosts(主机)页面上,单击
db-node
主机旁边的复选框。然后单击 Run Command(运行命令)按钮。
-
从运行命令对话框中,从模块值列表中选择
ping
模块,然后单击下一步按钮。 -
选择 OLAM EE (2.2) 执行环境,然后单击 Next 按钮。
-
选择 db-node 计算机凭证,然后单击 Next 按钮。
-
面板将刷新并显示命令的预览。
查看详细信息后,单击启动按钮。
-
作业将启动并显示作业输出页。
如果所有内容都成功运行,输出将显示执行节点使用 Ansible
ping
模块联系db-node
实例的SUCCESS
消息。如果未看到输出,请通过单击详细信息选项卡并返回到输出选项卡来刷新页面。
后续步骤
WebUI 中的输出确认您具有适用于 Oracle Linux Automation Manager 的工作群集环境。继续培养您的技能,并查看我们在 Oracle Linux 培训站上提供的其他 Oracle Linux Automation Manager 培训。
相关链接
Oracle Linux Automation Manager 文档
Oracle Linux Automation Manager 培训
Oracle Linux 培训站
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Migrate Oracle Linux Automation Manager to a Clustered Deployment
F74667-02
Copyright ©2022, Oracle and/or its affiliates.