計劃性停機與還原

原則:先關機的最後開 假設有三台 controller node, 名字為 c1, c2, c3 誰是 c1, c2, c3 不重要

  • 關機步驟:

    • 關閉所有 instance
    • 關閉 compute node
    • 停用 kolla container wget -O ~/stop_kolla.sh https://gist.githubusercontent.com/kjelly/ad57505d8eaa21ca3b79aa4b18b17de6/raw/e0b29a51f8bb3277f9f3398c615fa5f6224d208e/stop_kolla.sh bash ~/stop_kolla.sh
    • 關閉 c1
    • 關閉 c2
    • 關閉 c3
  • 復原步驟:

    • 開啟 c3
    • 開啟 c2
    • 開啟 c1
    • 開啟 compute node
    • 開啟 instance

突然停機應變措施

compute node 突然停機: 開啟它 單一 controller node 突然停機: 開啟它 複數的 controller node 突然停機: 找出最晚掛的,最先開

備份 kolla

  • 備份 deploy node 下的 /etc/kolla 的檔案
  • 使用 sqldump 備份資料庫:
    • mysqldump -u root -p --all-databases > alldb.sql
  • 備份 ceph 的 pool

容器備份數據庫命令如下

[root@cs-controller01 ~]# docker exec -it mariadb mysqldump -uroot -pxxxx --all-databases > alldb.sql

根據備份重建 kolla 環境

  • 將之前備份的 kolla 設定檔還原到 /etc/kolla 路徑
  • 重新佈署 OpenStack
  • 還原 mysql cluseter/mariadb cluster:
    • mysql -u root -p < alldb.sql
  • 還原 ceph 資料

單一 controller node 損壞

  • 重灌作業系統(如果作業系統有故障的話)
  • 清除 kolla container
    wget https://raw.githubusercontent.com/openstack/kolla-ansible/master/tools/cleanup-containers -O 
    ~
    /cleanup-containers
    sudo bash 
    ~
    /cleanup-containers
    
  • 更新 inventory (下面動作與佈署 OpenStack 相同,只是在執行 prepare 和 ka bootstrap-servers 時, 只能在新主機上跑,避免 OpenStack 損壞)
  • 執行 prepare
  • 處理 networking bonding 等動作
  • 執行 ka bootstrap-servers
  • 執行 ka deploy

mariadb cluster 無法正常啟動

  • 將所有 controller 的 mariadb 和 haproxy 停止

    sudo docker stop mariadb
    sudo docker stop haproxy
    
  • 找出擁有最新資料的主機。在每一台電腦下下面指令,找出 log number 最大的主機。 172.23.103.1:4000/kolla/centos-source-mariadb:4.0.1 這個要換成該環境的 image。

    sudo docker run --net=host --rm -e 
    "
    KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
    "
     -v /etc/kolla/mariadb:/var/lib/kolla/config_files  -v mariadb:/var/lib/mysql -it 172.23.103.1:4000/kolla/centos-source-mariadb:4.0.1 mysqld --wsrep-recover
    
  • 在擁有最大 log number 的主機做下面指令,該主機為 master。 進入 mariadb container,以下指令都在此 container 內部執行。

    sudo docker run --net=host --rm -e 
    "
    KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
    "
     -v /etc/kolla/mariadb:/var/lib/kolla/config_files  -v mariadb:/var/lib/mysql -it --name mariadb_recovery 172.23.103.1:4000/kolla/centos-source-mariadb:4.0.1 /bin/bash
    

    初始化 mariadb 設定檔

    kolla_start
    

    若上面指令無法持續執行(指無法回到bash),則執行下面步驟,否則就跳過

    啟動 database server

    mysqld_safe --wsrep_cluster_address=gcomm://
    

    若上面指令無法持續執行(指無法回到bash),則執行下面步驟,否則就跳過

    編輯 /var/lib/mysql/grastate.dat 檔案,將 safe_to_bootstrap 改成 1

    啟動 database server。此時這指令會持續執行。

    mysqld_safe --wsrep_cluster_address=gcomm://
    
  • 在其他 controller node 執行下面動作

    docker start mariadb
    

    若上面指令會執行失敗,則將 /var/lib/mysql/grastate.dat 改成 1。用下面的指令編輯。

    sudo docker run -u root --net=host --rm -e 
    "
    KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
    "
     -v /etc/kolla/mariadb:/var/lib/kolla/config_files  -v mariadb:/var/lib/mysql -it 172.23.103.1:4000/kolla/centos-source-mariadb:4.0.1 vi /var/lib/mysql/grastate.dat
    
  • 將剛剛在 master (用另外一個連線) ,停止你剛剛自己啟動的 container。

    sudo docker stop mariadb_recovery
    sudo docker rm mariadb_recovery
    

    啟動原本的 container。

    sudo docker start mariadb
    sudo docker start haproxy
    
  • 啟動其他主機的 haproxy

    sudo docker start haproxy
    

galera cluster 發生此錯誤 this member has applied more events than the primary component.Data loss is possible. Aborting.

解決辦法

cd
 /var/lib/mysql
rm grastate.dat ib_log
*
 -f

更新 haproxy 憑證

  • 將新的憑證檔 ( haproxy.pem) 放到所有 deploy node 的 /etc/kolla/certificates 下

  • 重新跑 reconfigure

ka reconfigure

results matching ""

    No results matching ""