為新的 RHEL 8/9 系統建立並準備 Salt 基礎結構後,可以執行以下移轉步驟來完成到 RHEL 8/9 的升級。

準備並執行移轉

  1. 在 RHEL 7 和 RHEL 8/9 系統上停止 RaaS 服務。
  2. 將 gz 備份檔案從舊伺服器複製到新伺服器。gz 檔案必須儲存在 /var/lib/pgsql 目錄中,且必須設定 ownership=postgres:postgres。
  3. 從 postgres 使用者執行以下命令以移除資料庫目錄:
    su - postgres
    psql -U postgres
    drop database raas_43cab1f4de604ab185b51d883c5c5d09
    
  4. 建立空白資料庫並驗證使用者:
    create database raas_43cab1f4de604ab185b51d883c5c5d09
    \du – should display users for postgres and salteapi
  5. /etc/raas/pki/.raas.key/etc/raas/pki/.instance_id 檔案從舊的 RaaS 伺服器複製到新的 RaaS 伺服器。
  6. 對新的 PostgreSQL 資料庫執行升級命令:
    su – raas
    raas -l debug upgrade
    
現在,您可以在新的 rhel9-raas 伺服器上啟動 raas 服務。您還可以在瀏覽器中存取 Automation Config UI。接下來,必須在新的 RHEL 8/9 Salt 主節點上設定主節點外掛程式。

在新的 Salt 主節點上設定主節點外掛程式

在新的 rhel9-master 節點上執行這些步驟。
  1. 登入 Salt 主節點並確認 /etc/salt/master.d 目錄是否存在,或建立該目錄。
  2. 產生主節點組態設定。
    注意: 如果您要在升級安裝時保留設定,請備份現有主節點外掛程式組態檔後再執行此步驟。然後,將現有組態中的相關設定複製到新產生的檔案。
    sudo sseapi-config --all > /etc/salt/master.d/raas.conf
    重要: 如果已使用 onedir 安裝 Salt,則此可執行檔的路徑為 /opt/saltstack/salt/extras-3.10/bin/sseapi-config
  3. 編輯產生的 raas.conf 檔案,並按以下方式更新值:
    說明

    sseapi_ssl_validate_cert

    驗證 API (RaaS) 使用的憑證。預設值為 True

    如果使用的是自己的 CA 核發憑證,請將此值設定為 True,然後設定 sseapi_ssl_casseapi_ssl_certsseapi_ssl_cert: 設定。

    否則,請將此值設定為 False,從而不驗證憑證。

    sseapi_ssl_validate_cert:False

    sseapi_server

    RaaS 節點的 HTTP IP 位址,例如 http://example.comhttps://example.com (如果 SSL 已啟用)。

    sseapi_command_age_limit

    設定略過可能失效的舊工作之前的存留期 (以秒為單位)。例如,若要略過超過一天的工作,請設定為:

    sseapi_command_age_limit:86400

    略過的工作繼續存在於資料庫中,並且在 Automation Config 使用者介面中顯示 Completed 狀態。

    某些環境可能需要 Salt 主節點長時間處於離線狀態,並且需要 Salt 主節點在重新上線後執行已排入佇列的任何工作。如果您的環境適用此情況,請將存留期限制設定為 0

    sseapi_windows_minion_deploy_delay 設定延遲以允許所有必要的 Windows 服務變為作用中狀態。預設值為 180 秒。
    sseapi_linux_minion_deploy_delay 設定延遲以允許所有必要的 Linux 服務變為作用中狀態。預設值為 90 秒。
    sseapi_local_cache
         load: 3600
         tgt: 86400
         pillar: 3600
         exprmatch: 86400
         tgtmatch: 86400

    設定某些資料在每個 Salt 主節點上本機快取的時間長度。值以秒為單位。範例值是建議值。

    • load- salt save_load() 裝載

    • tgt- SSE 目標群組

    • pillar - SSE pillar 資料 (已加密)

    • exprmatch- SSE 目標運算式比對資料

    • tgtmatch- SSE 目標群組比對資料

  4. 可選:僅手動安裝需要執行此步驟。若要確認在連線主節點外掛程式前可以連線至 SSL,請編輯產生的 raas.conf 檔案以更新下列值。如果不更新這些值,主節點外掛程式會使用預設產生的憑證。
    說明
    sseapi_ssl_ca CA 檔案的路徑。
    sseapi_ssl_cert 憑證的路徑。預設值為 /etc/pki/raas/certs/localhost.crt
    sseapi_ssl_key 憑證私密金鑰的路徑。預設值為 /etc/pki/raas/certs/localhost.key
    id 透過在開頭處新增 #,註解此行標記。這不是必要的。
  5. 可選:更新與效能相關的設定。對於大型或忙碌的環境,可以透過調整以下設定來提升 Salt 主節點與 Automation Config 之間的通訊效能。
    • 設定主節點外掛程式引擎:

      主節點外掛程式 eventqueuerpcqueue 引擎會將與 Automation Config 的某些通訊從效能關鍵型代碼路徑卸載至專用程序。當引擎正在等待與 Automation Config 通訊時,會將裝載儲存在 Salt 主節點的本機檔案系統中,以便資料能夠在 Salt 主節點重新啟動過程中保持不變。tgtmatch 引擎會將部屬節點目標群組比對的計算從 RaaS 伺服器移至 Salt 主節點。

      若要啟用引擎,請確保 Salt 主節點外掛程式組態檔 (raas.conf) 中存在下列設定:

      engines: 
           - sseapi: {} 
           - eventqueue: {} 
           - rpcqueue: {} 
           - jobcompletion: {} 
           - keyauth: {} 
           - tgtmatch: {}

      若要設定 eventqueue 引擎,請確認存在以下設定:

      sseapi_event_queue: 
        name: sseapi-events 
        strategy: always 
        push_interval: 5 
        batch_limit: 2000 
        age_limit: 86400 
        size_limit: 35000000 
        vacuum_interval: 86400 
        vacuum_limit: 350000 

      可以根據佇列參數的共同運作方式來調整這些參數。例如,假設 Salt 事件匯流排上每秒平均有 400 個事件,上述設定允許在最早事件因大小或存留期限制而遭到捨棄之前,在 Salt 主節點上收集大約 24 小時的已排入佇列的事件流量。

      若要設定 rpcqueue 引擎,請驗證 raas.conf 中的以下設定:

      sseapi_rpc_queue: 
        name: sseapi-rpc 
        strategy: always 
        push_interval: 5 
        batch_limit: 500 
        age_limit: 3600 
        size_limit: 360000 
        vacuum_interval: 86400 
        vacuum_limit: 100000 
      若要設定 tgtmatch 引擎,請確保主節點外掛程式組態檔 (/etc/salt/master.d/raas.conf) 中存在以下設定:
      engines: 
          - sseapi: {} 
          - eventqueue: {} 
          - rpcqueue: {} 
          - jobcompletion: {} 
          - keyauth: {} 
          - tgtmatch: {} 
      
      sseapi_local_cache:     
          load: 3600 
          tgt: 86400 
          pillar: 3600 
          exprmatch: 86400 
          tgtmatch: 86400 
      
      sseapi_tgt_match: 
          poll_interval: 60     
          workers: 0 
          nice: 19
      備註: 若要在 Salt 主節點上利用目標比對,RaaS 組態中還必須存在以下組態設定: target_groups_from_master_only: true
    • 限制部屬節點粒紋裝載大小:
      sseapi_max_minion_grains_payload: 2000
    • 啟用略過早於定義時間 (以秒為單位) 的工作。例如,使用 86400 會設定為略過一天前的工作。如果設定為 0,將停用此功能:
      sseapi_command_age_limit:0
      備註:

      在系統升級期間,啟用此設定有助於防止儲存在資料庫中的舊命令意外執行。

    Salt 中的事件佇列以及 Salt 主節點外掛程式中的佇列引擎、Salt 主節點目標比對、Grain 裝載大小限制和命令存留期限制共同增加了輸送量,並減少了在對效能最敏感的代碼路徑中 Salt 主節點與 Automation Config 之間的通訊延遲。

  6. 重新啟動主節點服務。
    sudo systemctl restart salt-master
  7. 可選:您可能想要執行測試工作,以確保主節點外掛程式現已啟用主節點與 RaaS 節點之間的通訊。
    salt -v '*' test.ping
RHEL 8/9 主節點現在會顯示在 主節點金鑰頁面中。
注意: 此時不要接受主節點金鑰。

設定部屬節點代理程式

按照以下步驟將 rhel9-master 節點上的部屬節點代理程式設定為指向自身。
  1. 透過 SSH 登入 rhel9-master 節點,然後瀏覽到 /etc/salt/minion.d 目錄。
  2. 編輯 minion.conf 檔案,並將主節點設定變更為 master:localhost
  3. 瀏覽到 /etc/salt/pki/minion 目錄,然後刪除 minion_master.pub 檔案。
  4. 使用 重新啟動 salt-minion 服務
    systemctl restart salt-minion
  5. 透過執行以下命令檢視並接受 rhel9-master 上的部屬節點金鑰:
    salt-key
    salt-key -A
  6. Automation Config 中,導覽至管理 > 主節點金鑰,然後接受主節點金鑰。

    RHEL8/9 主節點現在應顯示在目標頁面中。

  7. 透過 SSH 登入 RHEL7 主節點,然後刪除 rhel9-master 部屬節點的金鑰。

移轉 Salt-Minion 系統

有多種方式可移轉受管理的系統。如果您已設定某個程序,請遵循該程序。如果未設定程序,請使用以下指示將 salt-minion 從舊的 Salt 主節點移轉到新的 Salt 主節點。
備註: 這些步驟不適用於多主節點系統。
  1. 建立協調檔案。例如,
    # Orchestration to move Minions from one master to another
    # file: /srv/salt/switch_masters/init.sls
    {% import_yaml 'switch_masters/map.yaml' as mm %}
    {% set minions = mm['minionids'] %}
    
    {% if minions %}
    {% for minion in minions %}
    move_minions_{{ minion }}:
      salt.state:
        - tgt: {{ minion }}
        - sls:
          - switch_masters.move_minions_map
    
    {% endfor %}    
    {% else %}
    no_minions:
      test.configurable_test_state:
        - name: No minions to move
        - result: True 
        - changes: False 
        - comment: No minions to move
    {% endif %}
    
    remove_minions:
      salt.runner:
        - name: manage.down
        - removekeys: True 
    
    # map file for moving minions
    # file: /srv/salt/switch_masters/map.yaml
    newsaltmaster: <new_ip_address>
    oldsaltmaster: <old_ip_address>
    minionids:
      - minion01
      - minion02
      - minion03
    state to switch minions from one master to another
    # file: /srv/salt/swith_masters/move_minions_map.sls
    {% set minion = salt['grains.get']('os') %}
    # name old master and set new master ip address
    {% import_yaml 'switch_masters/map.yaml' as mm %}
    {% set oldmaster = mm['oldsaltmaster'] %}
    {% set newmaster = mm['newsaltmaster'] %}
    
    # remove minion_master.pub key
    {% if minion == 'Windows' %}
    remove_master_key:
      file.absent:
        - name: c:\ProgramData\Salt Project\Salt\conf\pki\minion\minion_master.pub
    
    change_master_assignment:
      file.replace:
        - name: c:\ProgramData\Salt Project\Salt\conf\minion.d\minion.conf 
        - pattern: 'master: {{oldmaster}}'
        - repl: 'master: {{newmaster}}'
        - require:
          - remove_master_key
    {% else %}
    remove_master_key:
      file.absent:
        - name: /etc/salt/pki/minion/minion_master.pub
    
    # modify minion config file
    change_master_assignment:
      file.replace:
        - name: /etc/salt/minion.d/minion.conf 
        - pattern: 'master: {{oldmaster}}'
        - repl: 'master: {{newmaster}}'
        - require:
          - remove_master_key
    {% endif %}
    # restart salt-minion
    restart_salt_minion:
      service.running:
        - name: salt-minion 
        - require:
          - change_master_assignment
        - watch:
          - change_master_assignment
    
  2. 建立包含以下代碼的 map.yaml 檔案 (請參閱上面的代碼範例):
    1. <舊的 salt 主節點> IP 位址/FQDN
    2. <新的 salt 主節點> IP 位址/FQDN
    3. 要移動的 Salt 部屬節點識別碼的清單。
  3. 建立狀態檔案 (請參閱上面的代碼範例) 以處理移轉。例如,move_minions_map.sls
  4. 將這些檔案新增到 RHEL7 Salt 主節點上的某個目錄 (例如,/srv/salt/switch_masters)。
  5. 在 RHEL7 Salt 主節點上執行協調檔案。這會導致 Salt 部屬節點服務重新啟動時出現一些錯誤,並且無法為 RHEL7 Salt 主節點恢復連線。
  6. Automation Config 中監控進度。接受 UI 中填入的已移轉 Salt 部屬節點識別碼。
  7. 移轉所有系統後,針對這些系統執行 test.ping 工作,以驗證所有服務是否均正常通訊。

移轉現有檔案

此程序完全取決於您的組織建立、儲存和管理狀態檔案及組態檔的方式。下面概述了最常見的使用案例以供參考。

使用案例 1:Automation Config 檔案伺服器

在此使用案例中,Automation Config 檔案儲存在 Postgres 資料庫中,並顯示在 Automation Config UI 中。

在還原 Postgres 資料庫期間,將復原並移轉這些檔案。您無需執行任何額外步驟來將這些檔案移轉到 RHEL8/9 環境。

使用案例 2:Github/Gitlab 檔案伺服器

在此使用案例中,Automation Config 狀態檔案和組態檔儲存在 Github/Gitlab/Bitbucket 或某種其他代碼版本控制系統中。

由於這些檔案儲存在第三方工具中,因此您需要設定新的 RHEL8/9 主節點以連線到存放庫系統。此組態將鏡像 RHEL7 存放庫組態。

使用案例 3:Salt 主節點的本機檔案根目錄

在此使用案例中,Automation Config 儲存在 Salt 主節點上的本機檔案伺服器目錄中。

若要將這些檔案移轉到 RHEL8/9 主節點,請從 RHEL7 主節點將相應的目錄複製到 RHEL8/9 主節點。
  1. 狀態檔案和 pillar 檔案分別儲存在 /srv/salt/srv/pillar 中。
  2. 使用安全複製工具 (例如 wincp 或命令列) 從 RHEL7 主節點將這些目錄安全複製到 RHEL8/9 主節點。
  3. 使用 Salt \* saltutil.refresh_pillar 重新整理 pillar 日期