注意:

将 Oracle Linux Automation Manager 迁移到群集部署

简介

无论是从以前的发行版升级还是从单个主机安装开始,这两种环境都可以迁移到集群部署。管理员需要在迁移之前规划其拓扑,因为集群可能由控制层、执行和跳节点以及远程数据库的组合组成。

学完本教程后,您将了解如何将单个主机安装迁移到具有远程数据库的群集部署。

目标

在本教程中,您将学习如何:

先决条件

部署 Oracle Linux Automation Manager

注:如果在您自己的租户中运行,请阅读 linux-virt-labs GitHub 项目 README.md ,并在部署实验室环境之前完成先决条件。

  1. 在 Luna 桌面上打开一个终端。

  2. 克隆 linux-virt-labs GitHub 项目。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 转到工作目录。

    cd linux-virt-labs/olam
    
  4. 安装所需的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 更新 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
    
  6. 部署实验室环境。

    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

  1. 打开终端并配置到 Oracle Linux Automation Manager 的 SSH 隧道。

    ssh -L 8444:localhost:443 oracle@<hostname_or_ip_address>
    

    在免费实验室环境中,使用 olam-node 实例的外部 IP 地址。

  2. 打开 Web 浏览器并输入 URL。

    https://localhost:8444
    

    注:根据使用的浏览器批准安全警告。对于 Chrome,单击 **Advanced 按钮,然后单击 Proceed to localhost (unsafe) 链接。

  3. 使用在自动部署期间创建的 admin用户名admin密码登录到 Oracle Linux Automation Manager。

    olam-login

  4. 登录后,将显示 WebUI。

    鄂拉姆 - 韦布伊

迁移到集群部署

虽然 Oracle Linux Automation Manager 作为单个主机部署运行,但它还支持以集群的形式运行,其中包含远程数据库以及单独的控制层和执行节点。安装会将单主机实例配置为 hybrid 节点。迁移到集群部署的第一步是将此实例转换为 control plane 节点。

有关不同安装拓扑的更多信息,请参见 Oracle Linux Automation Manager 安装指南文档中的 Planning the Installation 一章。

准备控制层节点

  1. 切换到连接到运行 Oracle Linux Automation Manager 的 olam-node 实例的终端。

    注:从现在开始,我们将此实例称为控制层节点。

  2. 停止 Oracle Linux Automation Manager 服务。

    sudo systemctl stop ol-automation-manager
    
  3. 创建数据库的备份。

    sudo su - postgres -c 'pg_dumpall > /tmp/olamv2_db_dump'
    

安装远程数据库

  1. 将数据库备份从控制层节点复制到新的远程数据库主机。

    scp /tmp/olamv2_db_dump oracle@db-node:/tmp/
    

    scp 命令使用节点之间的 SSH 连接进行通信。由于免费实验室环境在实例之间配置了无密码 SSH 登录,因此可以建立此连接。

  2. 通过 ssh 连接到 db-node 实例。

    ssh oracle@db-node
    
  3. 启用数据库模块流。

    Oracle Linux Automation Manager 允许使用 Postgresql 数据库版本 12 或 13。我们将在本教程中使用并启用版本 13 模块流。

    sudo dnf -y module reset postgresql
    sudo dnf -y module enable postgresql:13
    
  4. 安装数据库服务器。

    sudo dnf -y install postgresql-server
    
  5. 添加数据库防火墙规则。

    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  6. 初始化数据库。

    sudo postgresql-setup --initdb
    
  7. 设置数据库默认存储算法。

    sudo sed -i "s/#password_encryption.*/password_encryption = scram-sha-256/"  /var/lib/pgsql/data/postgresql.conf
    

    有关此数据库功能的更多详细信息,请参阅上游文档中的密码验证

  8. 更新基于数据库的验证文件。

    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 地址连接时验证用户的密码。

  9. 更新数据库在其上侦听连接的 listen_address 值。

    sudo sed -i "/^#port = 5432/i listen_addresses = '"$(hostname -s)"'" /var/lib/pgsql/data/postgresql.conf
    

    您可以为此值选择 IP 地址或主机名。本教程使用 hostname -s 选择主机名。

  10. 启动和启用数据库服务。

    sudo systemctl enable --now postgresql
    
  11. 导入数据库转储文件。

    sudo su - postgres -c 'psql -d postgres -f /tmp/olamv2_db_dump'
    
  12. 设置 Oracle Linux Automation Manager 数据库用户帐户密码。

    sudo su - postgres -c "psql -U postgres -d postgres -c \"alter user awx with password 'password';\""
    

    此命令将 awx 密码设置为 password。如果在空闲练习环境中运行此命令,请选择更安全的密码。

  13. 关闭连接到 db-node 实例的 SSH 会话,完成设置远程数据库所需的步骤。

    exit
    

添加远程数据库设置

  1. 通过检查终端提示符确认与 olam-node 实例的连接。

  2. 验证主机是否可以与远程数据库通信。

    pg_isready -d awx -h db-node -p 5432 -U awx
    

    postgresql 程序包包括 pg_isready 命令。该软件包是原始单主机安装的一部分。如果此命令不起作用,您可能跳过上面的某个步骤,或者缺少对网络上端口 5432 的入站访问。

  3. 将远程数据库设置添加到新的定制配置文件。

    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 数据库用户帐户设置的相同密码。

  4. 停止并禁用控制层节点上的本地数据库。

    sudo systemctl stop postgresql
    sudo systemctl disable postgresql
    
  5. 屏蔽本地数据库服务。

    sudo systemctl mask postgresql
    

    此步骤可防止在启动 Oracle Linux Automation Manager 服务时启动本地数据库服务。

  6. 启动 Oracle Linux Automation Manager。

    sudo systemctl start ol-automation-manager
    
  7. 验证 Oracle Linux Automation Manager 是否连接到远程数据库。

    sudo su -l awx -s /bin/bash -c "awx-manage check_db"
    

    如果连接成功,输出将返回远程数据库版本详细信息。

删除本地数据库实例

确认与远程数据库的连接正常后,删除原始本地数据库是安全的。

  1. 删除数据库程序包。

    sudo dnf -y remove postgresql
    
  2. 删除包含旧数据库数据文件的 pgsql 目录。

    sudo rm -rf /var/lib/pgsql
    

更改控制层节点的节点类型

转换为群集部署时,将单主机实例 node_type 从 hybrid 切换到 control

  1. 确认控制层节点的当前节点类型。

    sudo su -l awx -s /bin/bash -c "awx-manage list_instances"
    

    输出显示 node_type 设置为 hybrid 的值。

  2. 删除默认实例组。

    sudo su -l awx -s /bin/bash -c "awx-manage remove_from_queue --queuename default --hostname $(hostname -i)"
    
  3. 定义新实例和队列。

    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)"
    
    
  4. 在定制设置文件中添加默认队列名称值。

    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
    
  5. 更新受体设置。

    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
    
  6. 重新启动 Oracle Linux Automation Manager

    sudo systemctl restart ol-automation-manager
    

将单主机混合节点转换为具有远程数据库的控制平面节点已完成。现在,我们将添加一个执行层节点,以使此集群完全正常运行。

向群集中添加执行层节点

在群集完全正常运行之前,添加一个或多个执行节点。执行节点使用 ansible-runner 运行标准作业,后者在基于 OLAM EE Podman 容器的执行环境中运行剧本。

准备执行层节点

  1. 通过 ssh 连接到 *exe-node 实例。

    ssh exe-node
    
  2. 安装 Oracle Linux Automation Manager 系统信息库软件包。

    sudo dnf -y install oraclelinux-automation-manager-release-el8
    
  3. 禁用旧发行版的系统信息库。

    sudo dnf config-manager --disable ol8_automation ol8_automation2
    
  4. 启用当前发行版的系统信息库。

    sudo dnf config-manager --enable ol8_automation2.2
    
  5. 安装 Oracle Linux Automation Manager 软件包。

    sudo dnf -y install ol-automation-manager
    
  6. 添加受体防火墙规则。

    sudo firewall-cmd --add-port=27199/tcp --permanent
    sudo firewall-cmd --reload
    
  7. 编辑 Redis 套接字配置。

    sudo sed -i '/^# unixsocketperm/a unixsocket /var/run/redis/redis.sock\nunixsocketperm 775' /etc/redis.conf
    
  8. 从控制层节点复制密钥。

    ssh oracle@olam-node "sudo cat /etc/tower/SECRET_KEY" | sudo tee /etc/tower/SECRET_KEY > /dev/null
    

    重要提示:每个群集节点都需要相同的密钥。

  9. 创建包含所需设置的定制设置文件。

    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 是群集内主机的唯一标识符。

  10. 创建包含远程数据库配置的定制设置文件。

    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
    
  11. 部署 ansible-runner 执行环境。

    1. awx 用户身份打开 shell。

      sudo su -l awx -s /bin/bash
      
    2. 将任何现有容器迁移到最新的 podman 版本,同时保持无特权名称空间处于活动状态。

      podman system migrate
      
    3. 为 Oracle Linux Automation Manager 提取 Oracle Linux Automation Engine 执行环境。

      podman pull container-registry.oracle.com/oracle_linux_automation_manager/olam-ee:2.2
      
    4. 退出 awx 用户 shell。

      exit
      
  12. 为 NGINX 生成 SSL 证书。

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/tower/tower.key -out /etc/tower/tower.crt
    

    输入请求的信息或仅按 ENTER 键。

  13. 将默认 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
    
  14. 更新受体配置文件。

    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 地址和端口。
  15. 启动和启用 Oracle Linux Automation Manager 服务。

    sudo systemctl enable --now ol-automation-manager.service
    
  16. 关闭连接到 exe-node 实例的 SSH 会话,因为这完成了设置执行节点的必要步骤。

    exit
    

预配执行层节点

  1. 通过检查终端提示符确认与 olam-node 实例的连接。

    必须在群集的某个控制层节点上运行预配步骤,并将其应用于 Oracle Linux Automation Manager 的所有群集实例。

  2. 定义执行实例和队列。

    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 列表运行作业。
  3. 注册服务网格对等方关系。

    sudo su -l awx -s /bin/bash -c "awx-manage register_peers $(ssh exe-node hostname -i) --peers $(hostname -i)"
    

验证执行层节点注册

  1. 通过 ssh 连接到 *exe-node 实例。

    ssh exe-node
    
  2. 验证 Oracle Linux Automation Manager 网格服务是否正在运行。

    sudo systemctl status receptor-awx
    
  3. 检查服务网格的状态。

    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
    

    有关受体的详细信息,请参阅上游文档

  4. 验证正在运行的集群实例并显示可用容量。

    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 迁移到群集部署的过程。

(可选)验证群集是否正常工作

  1. 刷新用于显示上一个 WebUI 的 Web 浏览器窗口,或者打开新的 Web 浏览器窗口并输入 URL。

    https://localhost:8444
    

    URL 中使用的端口需要与 SSH 隧道的本地端口匹配。

    注:根据使用的浏览器批准安全警告。对于 Chrome,单击 Advanced(高级)按钮,然后单击 Proceed to localhost (unsafe) 链接。

  2. 使用 USERNAME admin 和密码 admin 再次登录到 Oracle Linux Automation Manager。

    olam2- 登录

  3. 登录后,将显示 WebUI。

    olam2-webui

  4. 使用左侧的导航菜单,单击管理部分下的实例组

    olam2- 菜单 -ig

  5. 在主窗口中,单击添加按钮,然后选择添加实例组

    olam2-ig

  6. 创建新实例组页上输入必需的信息。

    olam2-new-ig

  7. 单击保存按钮。

  8. 详细信息汇总页中,单击实例选项卡。

  9. 实例页中,单击关联按钮。

  10. 选择实例页上,单击执行节点旁边的复选框。

    olam2-ig-associate

  11. 单击保存按钮。

  12. 使用左侧的导航菜单,单击资源部分下的库存

    olam2- 菜单 -inv

  13. 在主窗口中,单击添加按钮,然后选择添加库存

    olam2 - 库存

  14. 创建新库存页上输入必需的信息。

    olam2- 新 inv

    对于实例组,选择搜索图标以显示选择实例组弹出对话框。单击执行组旁边的复选框,然后单击选择按钮。

  15. 单击保存按钮。

  16. 详细信息汇总页中,单击主机选项卡。

    olam2-inv-detail

  17. 主机页中,单击添加按钮。

    olam2- 主机

  18. 创建新主机页上,输入可用实例的 IP 地址或主机名。

    olam2- 新主机

    在免费实验环境中,我们将使用 db-node ,这是远程数据库实例的主机名。

  19. 单击保存按钮。

  20. 导航到左侧的菜单,然后单击 ** 身份证明 `。

    olam2- 菜单 - 贷项

  21. 身份证明页上,单击添加按钮。

    olam2- 身份证明

  22. 创建新身份证明页上输入必需的信息。

    olam2- 新储值

    对于身份证明类型,单击下拉菜单并选择计算机。显示凭证的类型详细信息

    输入 oracle用户名并浏览 SSH 私钥。单击 Browse...(浏览 ...)按钮将显示 Open File(打开文件)对话框窗口。

    olam2-open-file

    右键单击该对话框的主窗口,然后选择显示隐藏文件

    olam2- 显示 - 隐藏

    然后选择 .ssh 文件夹和 id_rsa 文件。单击 Open 按钮将导致私钥文件的内容复制到 SSH Private Key 对话框中。向下滚动并单击保存按钮。

  23. 导航到左侧的菜单,然后单击库存

    olam2- 菜单 -inv

  24. 库存页面中,单击测试库存。

    olam2-inv-test

  25. 详细信息汇总页中,单击主机选项卡。

    olam2-inv-test-detail

  26. Hosts(主机)页面上,单击 db-node 主机旁边的复选框。

    olam2-webui

    然后单击 Run Command(运行命令)按钮。

  27. 运行命令对话框中,从模块值列表中选择 ping 模块,然后单击下一步按钮。

    olam2-webui

  28. 选择 OLAM EE (2.2) 执行环境,然后单击 Next 按钮。

    olam2-webui

  29. 选择 db-node 计算机凭证,然后单击 Next 按钮。

    olam2-webui

  30. 面板将刷新并显示命令的预览。

    olam2-webui

    查看详细信息后,单击启动按钮。

  31. 作业将启动并显示作业输出页。

    olam2-webui

    如果所有内容都成功运行,输出将显示执行节点使用 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 帮助中心