搜尋此網誌

2022年6月5日 星期日

MariaDB 資料庫叢集的保護機制

 (原文:https://galeracluster.com/2016/11/introducing-the-safe-to-bootstrap-feature-in-galera-cluster )

資料庫叢集MariaDB Galera Cluster 的設計是朝服務啟動之後就永不停止,在平時的運作上不需要關閉整座叢集。然而實際運維過程上有可能遭遇到意外,例如被無預警斷網、停電等等。因此為了因應各種無預警狀況,導入了一項被稱為【Safe-To-Bootstrap】的管制機制。


其原理是當一個健康叢集所有成員(資料庫節點)均處於服務運作狀態時,每一台節點的【Safe-To-Bootstrap】值被設置為0,而健康叢集運行過程會推選出領頭羊(Primary) 節點,只有按順序將領頭羊節點留在最後一台關機者,該領頭羊的【Safe-To-Bootstrap】才會被設置為1。而被設置為1者,並且在所有節點重新復原啟動過程中,【還必須】是第一台開機啟動者,這樣叢集才能夠自動的恢復起來


在此引用名詞【柵欄】形容用來阻擋資料庫成員脫離了MariaDB Galera Cluster後獨自對外提供服務,導致發生比災難更大的災難。也就是資料庫發生腦裂現象(split-brain)。資料被打散個別儲存於MariaDB Galera Cluster之內與外,嚴重程度到無法重新復原。為阻止此現象,透過【柵欄】設計,阻擋資料庫服務節點於不正常關閉停止後服務又被自動啟動,如此降低發生腦裂現象風險。


而這樣的刻意設計安排,目的是希望經由人員介入判斷後再排除障礙使其恢復MariaDB Galera Cluster服務。現實中有很高的機率在搶時間恢復服務壓力下,直接啟動所有的資料庫節點服務。而這樣的行為,如果不阻擋很容易演變人為介入的資料庫腦裂現象。而這就常演變為服務中斷時間愈來愈久。


MariaDB 資料庫備份與還原



一、MariaDB資料庫資料備份

由於資料會依據使用量逐漸擴增,目錄空間是需要額外考量的課題。
請事先安排好備份資料的目錄,不要占用到CENTOS作業系統的空間而導致系統不穩定。資料備份命令如下:

mysqldump --single-transaction  --quick  -u$u -p$pwd  omnistore  > $target  &&  gzip $target

(1)$u $pwd 分別代入 root1qaz2wsx,請依需求自行變更。
(2)$target 代入路徑與檔名,例如 /tmp/backup.sql,請依需求自行變更。
(3):上述命令會將備份資料ZIP壓縮起來,請依需求自行變更。
(4):盡可能安排於離峰時間進行資料庫備份作業


二、 MariaDB資料庫資料還原

建議要還原資料之前,MariaDB Galera Cluster 均已經建立好。在第一台節點上
執行資料還原命令如下

mysql -u$u -p$pwd  omnistore  < $target

(1)$u $pwd 分別代入 root1qaz2wsx,請依需求自行變更。
(2)$target 代入路徑與檔名,例如 /tmp/backup.sql,請依需求自行變更。


三、 透過第三方軟體進行備份

可參考官網推薦的 mydump 工具
https://mariadb.com/kb/en/mariadb-backups-overview-for-sql-server-users/




安裝 MariaDB

嗯.... 因工作因素,經常要安裝 MariaDB,整理以下常用資訊


MariaDB 版本 10.x.x

安裝:

可以先到這裡決定好要下載自己喜歡的平台版本

我個人習慣都是在 CentOS上,因為企業客戶大都受限於資安法規因素,選擇上偏向於合規居多。

https://mariadb.org/download/?t=repo-config


不知道攻城獅是否注意到 台灣有新增一個 MIRROR SITE 了,速度很快

tw1.mirror.blendbyte.net

大部分SE工程師不太在意,但是如果要常常製作 OFF-LINE TAR 安裝包去客戶端安裝的人

沒遇過客戶端不能連接INTERNET 的 SE 攻城獅 算是很幸福的!


我個人的安裝習慣是

yum install -y MariaDB-server MariaDB-common MariaDB-backup MariaDB-client


啟動參數:

以下也是我個人的習慣

先從第一台資料庫節點開始設定,執行以下命令:

cp /etc/my.cnf.d/server.cnf  /etc/my.cnf.d/server.cnf.bak

編輯vi /etc/my.cnf.d/server.cnf

找到 [mysqld] 以後,加入以下:


#datadir=/var/lib/mysql            #保留日後使用

#socket=/var/lib/mysql/mysql.sock   #保留日後使用

#pid-file=/run/mariadb/mariadb.pid  #保留日後使用

# query_cache_type=0/1/DEMAND   #保留日後使用

query_cache_type=DEMAND

query_cache_size=8864000

log-error=/var/log/mariadb/mariadb.log

slow_query_log_file=/var/log/mariadb/slow-mariadb.log

long_query_time=2

bind-address=0.0.0.0

lower_case_table_names=1

collation-server=utf8mb4_unicode_ci

init-connect='SET NAMES utf8mb4'

character-set-server=utf8mb4

skip-name-resolve

max_connections=819200        # 開最大讓系統會動態自行調節

max_connect_errors=1000

max_allowed_packet=4096M

connect_timeout=15

innodb_buffer_pool_size=8G

innodb_buffer_pool_instances=16

innodb_buffer_pool_chunk_size=128M

innodb_fast_shutdown=0


存檔後、執行以下命令啟動MariaDB資料庫:

mkdir -p /var/log/mariadb/

touch /var/log/mariadb/mariadb.log

touch /var/log/mysqld.log

touch /var/run/mysqld.pid

chmod 666 /var/log/mysqld.log

chmod 666 /var/run/mysqld.pid

chown -R mysql:mysql /var/log/mariadb

systemctl disable firewalld; systemctl stop firewalld

systemctl enable mariadb

systemctl restart mariadb

systemctl status -l mariadb


確認Mariadb LOG 檔案紀錄狀態結果:

cat /var/log/mariadb/mariadb.log


設定資料庫 root 帳號的登入密碼,假設密碼為 1qaz2wsx

mysql -h localhost -u root

FLUSH PRIVILEGES;

ALTER USER 'root'@'%' IDENTIFIED BY '1qaz2wsx';

ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz2wsx';

FLUSH PRIVILEGES;

SHOW GRANTS;

exit


將資料庫設定開放 root 連線,執行以下命令:

mysql -h localhost -u root

FLUSH PRIVILEGES;

GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '1qaz2wsx' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1qaz2wsx' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost.localdomain' IDENTIFIED BY '1qaz2wsx' WITH GRANT OPTION;

FLUSH PRIVILEGES;

exit


確定第一台資料庫服務正確啟動之後,其他資料庫節點仿照上述步驟逐一完成相關設定與啟動。




2021年5月22日 星期六

crontab @reboot 參數 - 開機自動執行

輸入  # crontab -e

加入以下一行:

@reboot sleep 60 ; /root/my-script.sh

以上設定開機後等待 1 分鐘 (60 秒) 之後 就會自動執行 /root/my-script.sh



2021年3月25日 星期四

Linux 查PORT被誰使用

lsof -i -P -n | grep LISTEN


參考 https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/


2021年3月18日 星期四

HSM 階層式儲存管理

參考維基百科的HSM資訊之後,得到大致上來說:

HSM系統被發明出來的理由是因為資料存在高速存儲的設備,其成本比慢速存儲的設備來的更昂貴,HSM得以在高成本和低成本儲存介質之間自由移動資料的存儲技術。

HSM多應用於長期存檔且存取速度較慢的領域,例如最簡單常見的異地備份,用於災難發生後的資料復原。






2018年10月16日 星期二

ESXi zip 檔案升級方法


先將 ESXi670-201806001.zip 上傳至 datastorage 裡面 /vmfs/volumes/patch

更新指令樣本:
esxcli software vib update -d "/vmfs/volumes/patch/ESXi670-201806001.zip"


搜尋此網誌