Workstation Logo
ਉਤਪਾਦ
AI ਲੈਬਜ਼OpenAI ਏਜੰਟClaude ਏਜੰਟGrok BotWorkstation CRM (WSL CRM)ਮਾਰਕੀਟਿੰਗਸਾਰੇ ਉਤਪਾਦ
AI ਹੱਲ
AI ਵਰਕਸਟੇਸ਼ਨAI SME Packagesਪ੍ਰਾਈਵੇਟ AIGPU ਕਲੱਸਟਰਐਜ AIਐਂਟਰਪ੍ਰਾਈਜ਼ AI ਲੈਬਉਦਯੋਗ ਅਨੁਸਾਰ AI
ਸੇਵਾਵਾਂ
Platform ModernisationDigital EngineeringData Foundations & AIAutonomous OperationsAI ਸਲਾਹDevOps ਆਟੋਮੇਸ਼ਨਸਾਈਬਰ ਸੁਰੱਖਿਆਸਾਫਟਵੇਅਰ ਵਿਕਾਸਏਜੰਟ ਨਿਰਮਾਣMLOps ਸੈੱਟਅੱਪ
ਸਾਡੇ ਬਾਰੇ
ਸਾਂਝੇਦਾਰਗਾਹਕ ਕਹਾਣੀਆਂ
ਲੇਖ
ਦਸਤਾਵੇਜ਼
WSL ProxyRing Promoter
ਬਲੌਗ
ਸਾਡੇ ਨਾਲ ਸੰਪਰਕ ਕਰੋLogin
Workstation

AI workstations, AI Multi Agentic Software, GPU infrastructure, and intelligent agent solutions for modern businesses.

ਯੂਕੇ ਦਫ਼ਤਰ: 77-79 Marlowes, Hemel Hempstead HP1 1LF - Directions - Take Junction 20 off M25 Outer London
Company No: 11641870
Mon - Fri: 9:00 AM - 6:00 PM GMT
+44 7515 356 146

ਬੈਲਜੀਅਮ ਦਫ਼ਤਰ: Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, Brussels
BE 0751.518.683
Mon - Fri: 9:00 AM - 6:00 PM CET
+32 492 45 67 46

ਭਾਰਤ ਦਫ਼ਤਰ: #159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

ਉਤਪਾਦ

ਸਾਰੇ ਉਤਪਾਦWSL ProxyRing PromoterAI ਲੈਬਜ਼OpenAI ਏਜੰਟClaude ਏਜੰਟGrok BotWorkstation CRM (WSL CRM)

AI ਹੱਲ

AI ਹੱਲAI ਵਰਕਸਟੇਸ਼ਨਪ੍ਰਾਈਵੇਟ AIGPU ਕਲੱਸਟਰਐਂਟਰਪ੍ਰਾਈਜ਼ AI ਲੈਬਸੇਵਾਵਾਂ

ਸਰੋਤ

ਲੇਖਦਸਤਾਵੇਜ਼ਬਲੌਗSearchਸਾਈਟ ਮੈਪ

ਕੰਪਨੀ

ਸਾਡੇ ਬਾਰੇਸਾਂਝੇਦਾਰਸਾਡੇ ਨਾਲ ਸੰਪਰਕ ਕਰੋ

© 2026 Workstation AI. ਸਾਰੇ ਹੱਕ ਰਾਖਵੇਂ ਹਨ

ਗੋਪਨੀਯਤਾ ਨੀਤੀਕੂਕੀ ਨੀਤੀਸਾਈਟ ਮੈਪ

Loading blog...

Home / Blog
DatabaseKubernetesDevOpsBackend

MySQL ਉਤਪਾਦਨ ਵਿੱਚ ਉੱਚ ਉਪਲਬਧਤਾ: InnoDB ਕਲੱਸਟਰ, ਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀ, ਅਤੇ Kubernetes ਆਪਰੇਟਰ

InnoDB ਕਲੱਸਟਰ, ਗਰੁੱਪ ਰਿਪਲੀਕੇਸ਼ਨ, Kubernetes ਲਈ MySQL ਆਪਰੇਟਰ, Percona XtraDB ਕਲੱਸਟਰ, ਮਲਟੀ-ਕਲਾਊਡ ਰਣਨੀਤੀਆਂ, ਅਤੇ ਲੋਂਗਹੋਰਨ ਸਟੋਰੇਜ ਦੇ ਨਾਲ ਬੇਅਰ ਮੈਟਲ k3s/ਰੈਂਚਰ ਤੈਨਾਤੀਆਂ ਲਈ ਇੱਕ ਉਤਪਾਦਨ ਇੰਜੀਨੀਅਰ ਦੀ ਗਾਈਡ।

Balinder Walia12 ਅਪ੍ਰੈਲ 202629 min read

ਉਤਪਾਦਨ ਵਿੱਚ MySQL ਚੱਲਣਾ ਜ਼ਿਆਦਾਤਰ ਇੰਜੀਨੀਅਰਿੰਗ ਟੀਮਾਂ ਲਈ ਜਾਣਿਆ-ਪਛਾਣਿਆ ਖੇਤਰ ਹੈ। ਇਸ ਨੂੰ ਅਸਲ ਉੱਚ ਉਪਲਬਧਤਾ ਦੇ ਨਾਲ ਚਲਾਉਣਾ — ਜਿੱਥੇ ਇੱਕ ਨੋਡ ਅਸਫਲਤਾ, ਇੱਕ ਨੈੱਟਵਰਕ ਭਾਗ, ਜਾਂ ਇੱਕ ਪੂਰਾ ਉਪਲਬਧਤਾ ਜ਼ੋਨ ਹਨੇਰਾ ਹੋਣ ਕਾਰਨ ਡਾਊਨਟਾਈਮ ਜਾਂ ਡਾਟਾ ਖਰਾਬ ਨਹੀਂ ਹੁੰਦਾ — ਜਾਣਬੁੱਝ ਕੇ ਆਰਕੀਟੈਕਚਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਹ ਗਾਈਡ ਉਸ ਆਰਕੀਟੈਕਚਰ ਦੀ ਹਰ ਪਰਤ ਵਿੱਚੋਂ ਲੰਘਦੀ ਹੈ: MySQL ਦੇ ਅੰਦਰ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਆਦਿ ਤੋਂ, Kubernetes ਆਪਰੇਟਰਾਂ ਦੁਆਰਾ ਜੋ ਜੀਵਨ ਚੱਕਰ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਵੈਚਲਿਤ ਕਰਦੇ ਹਨ, ਹਰੇਕ ਪ੍ਰਮੁੱਖ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ 'ਤੇ ਪ੍ਰਬੰਧਿਤ ਅਤੇ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ ਵਿਕਲਪਾਂ ਵਿੱਚ, ਅਤੇ ਰੈਂਚਰ ਦੁਆਰਾ ਪ੍ਰਬੰਧਿਤ ਬੇਅਰ ਮੈਟਲ k3s ਕਲੱਸਟਰਾਂ ਤੱਕ।

ਇਸ ਲੇਖ ਦੇ ਅੰਤ ਤੱਕ ਤੁਹਾਡੇ ਕੋਲ ਉਤਪਾਦਨ ਵਿੱਚ MySQL HA ਨੂੰ ਚੁਣਨ ਅਤੇ ਸੰਚਾਲਿਤ ਕਰਨ ਲਈ ਇੱਕ ਸੰਪੂਰਨ ਮਾਨਸਿਕ ਮਾਡਲ ਹੋਵੇਗਾ, ਕੰਕਰੀਟ ਸੰਰਚਨਾ ਉਦਾਹਰਨਾਂ ਦੇ ਨਾਲ ਤੁਸੀਂ ਆਪਣੇ ਖੁਦ ਦੇ ਵਾਤਾਵਰਣ ਵਿੱਚ ਅਨੁਕੂਲ ਹੋ ਸਕਦੇ ਹੋ।

MySQL InnoDB ਕਲੱਸਟਰ ਆਰਕੀਟੈਕਚਰ

InnoDB ਕਲੱਸਟਰ MySQL ਲਈ ਓਰੇਕਲ ਦਾ ਏਕੀਕ੍ਰਿਤ ਉੱਚ ਉਪਲਬਧਤਾ ਹੱਲ ਹੈ। ਇਹ ਤਿੰਨ ਭਾਗਾਂ ਨੂੰ ਜੋੜਦਾ ਹੈ: ਡੇਟਾ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਲਈ MySQL ਗਰੁੱਪ ਰੀਪਲੀਕੇਸ਼ਨ, ਕਲੱਸਟਰ ਪ੍ਰਸ਼ਾਸਨ ਲਈ MySQL ਸ਼ੈੱਲ, ਅਤੇ ਪਾਰਦਰਸ਼ੀ ਕੁਨੈਕਸ਼ਨ ਰੂਟਿੰਗ ਅਤੇ ਆਟੋਮੈਟਿਕ ਫੇਲਓਵਰ ਲਈ MySQL ਰਾਊਟਰ। ਇਕੱਠੇ ਮਿਲ ਕੇ ਉਹ ਇੱਕ ਸਵੈ-ਇਲਾਜ ਕਲੱਸਟਰ ਬਣਾਉਂਦੇ ਹਨ ਜੋ ਦਸਤੀ ਦਖਲ ਤੋਂ ਬਿਨਾਂ ਨੋਡ ਅਸਫਲਤਾਵਾਂ ਨੂੰ ਬਰਦਾਸ਼ਤ ਕਰ ਸਕਦਾ ਹੈ।

MySQL InnoDB ਕਲੱਸਟਰ — ਉੱਚ ਉਪਲਬਧਤਾ ਆਰਕੀਟੈਕਚਰਐਪਲੀਕੇਸ਼ਨ ਸਰਵਰMySQL ਰਾਊਟਰਆਟੋਮੈਟਿਕ ਫੇਲਓਵਰ & ਸਪਲਿਟਿੰਗਪੜ੍ਹੋ/ਲਿਖੋR/WR/OR/Oਪ੍ਰਾਇਮਰੀ (R/W)mysql-node-1ਪੋਰਟ 3306 / 33061ਸੈਕੰਡਰੀ (R/O)mysql-node-2ਪੋਰਟ 3306 / 33061ਸੈਕੰਡਰੀ (R/O)mysql-node-3ਪੋਰਟ 3306 / 33061ਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀ (ਪੈਕਸੋਸ-ਅਧਾਰਿਤ ਸਹਿਮਤੀ)InnoDB ਕਲੱਸਟਰਪ੍ਰਾਇਮਰੀ (R/W)ਸੈਕੰਡਰੀ (R/O)MySQL ਰਾਊਟਰਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀ

ਆਰਕੀਟੈਕਚਰ ਆਪਣੀ ਸਾਦਗੀ ਵਿੱਚ ਸ਼ਾਨਦਾਰ ਹੈ। ਐਪਲੀਕੇਸ਼ਨਾਂ MySQL ਰਾਊਟਰ ਨਾਲ ਜੁੜਦੀਆਂ ਹਨ, ਜੋ InnoDB ਕਲੱਸਟਰ ਮੈਟਾਡੇਟਾ ਸਕੀਮਾ ਦੀ ਪੁੱਛਗਿੱਛ ਕਰਕੇ ਕਲੱਸਟਰ ਟੌਪੋਲੋਜੀ ਬਾਰੇ ਜਾਗਰੂਕਤਾ ਬਣਾਈ ਰੱਖਦੀ ਹੈ। ਜਦੋਂ ਪ੍ਰਾਇਮਰੀ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ, ਗਰੁੱਪ ਰੀਪਲੀਕੇਸ਼ਨ ਬਾਕੀ ਬਚੀਆਂ ਸੈਕੰਡਰੀ ਤੋਂ ਇੱਕ ਨਵੀਂ ਪ੍ਰਾਇਮਰੀ ਚੁਣਦੀ ਹੈ, ਅਤੇ MySQL ਰਾਊਟਰ ਆਪਣੇ ਆਪ ਹੀ ਨਵੇਂ ਪ੍ਰਾਇਮਰੀ - ਖਾਸ ਤੌਰ 'ਤੇ ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ-ਅੰਦਰ ਲਿਖਤੀ ਆਵਾਜਾਈ ਨੂੰ ਰੀਡਾਇਰੈਕਟ ਕਰਦਾ ਹੈ। ਹਰੀਜੱਟਲ ਰੀਡ ਸਕੇਲਿੰਗ ਲਈ ਰੀਡ ਟਰੈਫਿਕ ਨੂੰ ਸਾਰੇ ਸੈਕੰਡਰੀ ਵਿੱਚ ਵੰਡਿਆ ਜਾ ਸਕਦਾ ਹੈ।

ਗਰੁੱਪ ਰਿਪਲੀਕੇਸ਼ਨ ਫੰਡਾਮੈਂਟਲਜ਼

MySQL ਗਰੁੱਪ ਰਿਪਲੀਕੇਸ਼ਨ InnoDB ਕਲੱਸਟਰ ਦੀ ਨੀਂਹ ਹੈ। ਇਹ ਇੱਕ ਪੈਕਸੋਸ-ਅਧਾਰਿਤ ਸਹਿਮਤੀ ਪ੍ਰੋਟੋਕੋਲ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾ ਸਕੇ ਕਿ ਪ੍ਰਾਇਮਰੀ 'ਤੇ ਕੀਤੇ ਗਏ ਹਰ ਲੈਣ-ਦੇਣ ਨੂੰ ਸਵੀਕਾਰ ਕੀਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਬਹੁਗਿਣਤੀ ਨੋਡਾਂ ਵਿੱਚ ਦੁਹਰਾਇਆ ਜਾਂਦਾ ਹੈ। ਇਹਵਰਚੁਅਲ ਸਮਕਾਲੀ ਪ੍ਰਤੀਕ੍ਰਿਤੀਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ — ਇੱਕ ਗਾਰੰਟੀ ਹੈ ਕਿ ਵਚਨਬੱਧਤਾ ਦੇ ਸਮੇਂ ਘੱਟੋ-ਘੱਟ ਬਹੁਗਿਣਤੀ ਕਲੱਸਟਰ ਮੈਂਬਰਾਂ 'ਤੇ ਪ੍ਰਤੀਬੱਧ ਡੇਟਾ ਮੌਜੂਦ ਹੈ।

ਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੋ ਮੋਡਾਂ ਵਿੱਚ ਕੰਮ ਕਰਦੀ ਹੈ:

  • ਸਿੰਗਲ-ਪ੍ਰਾਇਮਰੀ ਮੋਡ— ਇੱਕ ਨੋਡ ਰਾਈਟਸ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ (ਪ੍ਰਾਇਮਰੀ); ਬਾਕੀ ਸਾਰੇ ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ ਸੈਕੰਡਰੀ ਹਨ। ਇਹ ਸਿਫਾਰਿਸ਼ ਕੀਤਾ ਅਤੇ ਡਿਫੌਲਟ ਮੋਡ ਹੈ। ਇਹ ਲਿਖਤੀ ਵਿਵਾਦਾਂ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਚਦਾ ਹੈ ਕਿਉਂਕਿ ਸਿਰਫ਼ ਇੱਕ ਨੋਡ ਲੈਣ-ਦੇਣ ਤਿਆਰ ਕਰ ਸਕਦਾ ਹੈ।
  • ਮਲਟੀ-ਪ੍ਰਾਇਮਰੀ ਮੋਡ— ਸਾਰੇ ਨੋਡ ਇੱਕੋ ਸਮੇਂ ਲਿਖਤਾਂ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ। ਇਹ ਵਰਕਲੋਡਾਂ ਲਈ ਉੱਚ ਰਾਈਟ ਥ੍ਰੁਪੁੱਟ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦਾ ਹੈ ਜੋ ਵੱਖ-ਵੱਖ ਟੇਬਲਾਂ ਜਾਂ ਕੀ-ਸਪੇਸਾਂ ਵਿੱਚ ਸਾਫ਼-ਸਾਫ਼ ਵੰਡਦੇ ਹਨ, ਪਰ ਇਹ ਪ੍ਰਮਾਣੀਕਰਣ ਵਿਵਾਦਾਂ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਜਦੋਂ ਸਮਕਾਲੀ ਲੈਣ-ਦੇਣ ਇੱਕੋ ਕਤਾਰਾਂ ਨੂੰ ਸੰਸ਼ੋਧਿਤ ਕਰਦੇ ਹਨ। ਵਿਰੋਧੀ ਲੈਣ-ਦੇਣ ਨੂੰ ਇੱਕ ਨੋਡ 'ਤੇ ਵਾਪਸ ਲਿਆ ਜਾਂਦਾ ਹੈ। ਮਲਟੀ-ਪ੍ਰਾਇਮਰੀ ਦੀ ਵਰਤੋਂ ਸਿਰਫ਼ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਪ੍ਰਮਾਣੀਕਰਨ ਅਸਫਲਤਾਵਾਂ ਨੂੰ ਸੰਭਾਲਣ ਅਤੇ ਤਰਕ ਦੀ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਤਿਆਰ ਕੀਤੀ ਗਈ ਹੋਵੇ।

MySQL ਸ਼ੈੱਲ

ਨਾਲ InnoDB ਕਲੱਸਟਰ ਸੈਟ ਅਪ ਕਰ ਰਿਹਾ ਹੈ

MySQL ਸ਼ੈੱਲ AdminAPI ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਫੰਕਸ਼ਨਾਂ ਦਾ ਇੱਕ ਸਮੂਹ ਜੋ ਪੂਰੇ ਕਲੱਸਟਰ ਜੀਵਨ ਚੱਕਰ ਨੂੰ ਸਵੈਚਲਿਤ ਕਰਦਾ ਹੈ। ਇੱਥੇ ਇੱਕ 3-ਨੋਡ ਕਲੱਸਟਰ ਲਈ ਪੂਰਾ ਸੈੱਟਅੱਪ ਕ੍ਰਮ ਹੈ।

# Step 1: Prepare each MySQL instance (run on all 3 nodes)
# Ensure my.cnf has required settings
[mysqld]
server-id=1                          # unique per node: 1, 2, 3
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
binlog_transaction_dependency_tracking=WRITESET
transaction_write_set_extraction=XXHASH64
loose-group_replication_start_on_boot=OFF
plugin_load_add='group_replication.so'
plugin_load_add='mysql_clone.so'
report_host='mysql-node-1'           # unique per node

# Step 2: Use MySQL Shell to configure and create the cluster
mysqlsh -- dba configure-instance root@mysql-node-1:3306 --clusterAdmin=gradmin --clusterAdminPassword='SecurePass123!'
mysqlsh -- dba configure-instance root@mysql-node-2:3306 --clusterAdmin=gradmin --clusterAdminPassword='SecurePass123!'
mysqlsh -- dba configure-instance root@mysql-node-3:3306 --clusterAdmin=gradmin --clusterAdminPassword='SecurePass123!'

# Step 3: Connect to the first node and create the cluster
mysqlsh gradmin@mysql-node-1:3306
# Inside MySQL Shell:
var cluster = dba.createCluster('productionCluster', {
    memberWeight: 90,
    exitStateAction: 'ABORT_SERVER',
    consistency: 'BEFORE_ON_PRIMARY_FAILOVER',
    expelTimeout: 10
})

# Step 4: Add remaining nodes
cluster.addInstance('gradmin@mysql-node-2:3306', {recoveryMethod: 'clone'})
cluster.addInstance('gradmin@mysql-node-3:3306', {recoveryMethod: 'clone'})

# Step 5: Verify cluster status
cluster.status()

recoveryMethod: 'clone'ਵਿਕਲਪ MySQL ਕਲੋਨ ਪਲੱਗਇਨ ਦੀ ਵਰਤੋਂ ਪ੍ਰਾਇਮਰੀ ਤੋਂ ਸ਼ਾਮਲ ਹੋਣ ਵਾਲੇ ਮੈਂਬਰ ਤੱਕ ਪੂਰੀ ਡਾਟਾ ਕਾਪੀ ਕਰਨ ਲਈ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ ਬਾਈਨਰੀ ਲੌਗਸ ਤੋਂ ਵਧੀ ਹੋਈ ਰਿਕਵਰੀ ਨਾਲੋਂ ਕਿਤੇ ਤੇਜ਼ ਹੈ।

MySQL ਰਾਊਟਰ ਸੰਰਚਨਾ

MySQL ਰਾਊਟਰ ਨੂੰ ਕਲੱਸਟਰ ਦੇ ਵਿਰੁੱਧ ਬੂਟਸਟਰੈਪ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਇਸਦੀ ਸੰਰਚਨਾ ਫਾਈਲ ਤਿਆਰ ਕਰਦਾ ਹੈ।

# Bootstrap MySQL Router against the cluster
mysqlrouter --bootstrap gradmin@mysql-node-1:3306 \
  --directory /opt/mysqlrouter \
  --conf-use-sockets \
  --user=mysqlrouter \
  --name='production-router'

# Start MySQL Router
/opt/mysqlrouter/start.sh

# Default ports after bootstrap:
# 6446 — R/W (routes to primary)
# 6447 — R/O (round-robin across secondaries)
# 6448 — R/W (X Protocol)
# 6449 — R/O (X Protocol)

ਐਪਲੀਕੇਸ਼ਨਾਂ ਰਾਊਟਰ ਦੇ R/W ਪੋਰਟ ਨਾਲ ਰਾਈਟਸ ਅਤੇ ਰੀਡ ਰਿਪਲੀਕੇਸ ਲਈ R/O ਪੋਰਟ ਨਾਲ ਜੁੜਦੀਆਂ ਹਨ। ਜਦੋਂ ਪ੍ਰਾਇਮਰੀ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਰਾਊਟਰ ਟੌਪੌਲੋਜੀ ਤਬਦੀਲੀ ਦਾ ਪਤਾ ਲਗਾਉਂਦਾ ਹੈ ਅਤੇ ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਮੁੜ-ਰੂਟ ਕਰਦਾ ਹੈ।

ਮਲਟੀ-ਰੀਜਨ MySQL ਤੈਨਾਤੀ

ਭੂਗੋਲਿਆਂ ਵਿੱਚ ਤਬਾਹੀ ਦੀ ਰਿਕਵਰੀ ਅਤੇ ਘੱਟ-ਲੇਟੈਂਸੀ ਰੀਡਿੰਗ ਲਈ, MySQL ਨੂੰ ਕਈ ਖੇਤਰਾਂ ਵਿੱਚ ਤੈਨਾਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। InnoDB ClusterSet ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਵਿੱਚ ਪ੍ਰਾਇਮਰੀ ਕਲੱਸਟਰ ਅਤੇ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਕਲੱਸਟਰਾਂ ਵਿਚਕਾਰ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦਾ ਸਮਰਥਨ ਕਰਨ ਲਈ InnoDB ਕਲੱਸਟਰ ਦਾ ਵਿਸਤਾਰ ਕਰਦਾ ਹੈ।

InnoDB ਕਲੱਸਟਰਸੈੱਟਨਾਲਮਲਟੀ-ਰੀਜਨ MySQL ਤੈਨਾਤੀus-east-1 (AWS)ਪ੍ਰਾਇਮਰੀ ਕਲੱਸਟਰਪ੍ਰਾਇਮਰੀ (R/W)ਸੈਕੰਡਰੀਸੈਕੰਡਰੀMySQL ਰਾਊਟਰਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀEBS gp3 / io2 ਸਟੋਰੇਜeu-west-1 (Azure)ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਕਲੱਸਟਰਪ੍ਰਾਇਮਰੀ (ਸਟੈਂਡਬਾਈ)ਸੈਕੰਡਰੀਸੈਕੰਡਰੀMySQL ਰਾਊਟਰਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀAzure ਪ੍ਰਬੰਧਿਤ ਡਿਸਕਸap-ਦੱਖਣ-ਪੂਰਬ-1 (GCP)ਰਿਪਲੀਕਾ ਕਲੱਸਟਰਪ੍ਰਾਇਮਰੀ (ਸਟੈਂਡਬਾਈ)ਸੈਕੰਡਰੀਸੈਕੰਡਰੀMySQL ਰਾਊਟਰਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀਪਰਸਿਸਟੈਂਟ ਡਿਸਕ SSDਅਸਿੰਕਅਸਿੰਕਗਲੋਬਲ ਟ੍ਰੈਫਿਕ ਮੈਨੇਜਰ / DNS-ਅਧਾਰਿਤ ਰੂਟਿੰਗRoute53 / Azure ਟ੍ਰੈਫਿਕ ਮੈਨੇਜਰ / ਕਲਾਉਡ DNSਪ੍ਰਾਇਮਰੀ ਕਲੱਸਟਰਪ੍ਰਤੀਕ੍ਰਿਤੀ ਕਲੱਸਟਰਅਸਿੰਕ ਪ੍ਰਤੀਕ੍ਰਿਤੀ

InnoDB ਕਲੱਸਟਰਸੈੱਟ ਇੱਕ ਪ੍ਰਾਇਮਰੀ ਕਲੱਸਟਰ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ ਜੋ ਸਾਰੀਆਂ ਲਿਖਤਾਂ ਨੂੰ ਹੈਂਡਲ ਕਰਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਕਲੱਸਟਰ ਜੋ ਅਸਿੰਕ੍ਰੋਨਸ ਰੂਪ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ। ਇੱਕ ਤਬਾਹੀ ਦੇ ਦ੍ਰਿਸ਼ ਵਿੱਚ, ਇੱਕ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਕਲੱਸਟਰ ਨੂੰ MySQL ਸ਼ੈੱਲ ਦੁਆਰਾ ਪ੍ਰਾਇਮਰੀ ਵਿੱਚ ਅੱਗੇ ਵਧਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।

# Create a ClusterSet from an existing InnoDB Cluster
mysqlsh gradmin@mysql-node-1:3306
var cluster = dba.getCluster()
var cs = cluster.createClusterSet('globalSet')

# Create a replica cluster in eu-west region
cs.createReplicaCluster('gradmin@mysql-eu-node-1:3306', 'euWestCluster', {
    recoveryMethod: 'clone'
})
var euCluster = cs.getCluster('euWestCluster')
euCluster.addInstance('gradmin@mysql-eu-node-2:3306', {recoveryMethod: 'clone'})
euCluster.addInstance('gradmin@mysql-eu-node-3:3306', {recoveryMethod: 'clone'})

# Emergency failover (when primary cluster is unreachable)
cs.forcePrimaryCluster('euWestCluster')
Kubernetes 'ਤੇ

MySQL — ਓਪਰੇਟਰ ਪੈਟਰਨ

Kubernetes 'ਤੇ MySQL ਨੂੰ ਚਲਾਉਣ ਲਈ ਕਈ ਚੁਣੌਤੀਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਜੋ ਸਟੇਟਲੈੱਸ ਵਰਕਲੋਡਾਂ 'ਤੇ ਲਾਗੂ ਨਹੀਂ ਹੁੰਦੀਆਂ: ਸਥਿਰ ਨੈੱਟਵਰਕ ਪਛਾਣ, ਨਿਰੰਤਰ ਸਟੋਰੇਜ, ਆਰਡਰਡ ਸਟਾਰਟਅੱਪ ਅਤੇ ਸ਼ੱਟਡਾਊਨ, ਅਤੇ ਕਲੱਸਟਰ-ਜਾਗਰੂਕ ਸਿਹਤ ਜਾਂਚ। Kubernetes ਓਪਰੇਟਰ ਇਸ ਡੋਮੇਨ-ਵਿਸ਼ੇਸ਼ ਸੰਚਾਲਨ ਗਿਆਨ ਨੂੰ ਇੱਕ ਕੰਟਰੋਲਰ ਵਿੱਚ ਏਨਕੋਡ ਕਰਦੇ ਹਨ ਜੋ ਕਸਟਮ ਸਰੋਤਾਂ ਨੂੰ ਦੇਖਦਾ ਹੈ ਅਤੇ YAML ਵਿੱਚ ਘੋਸ਼ਿਤ ਲੋੜੀਂਦੀ ਸਥਿਤੀ ਵੱਲ MySQL ਦੀ ਅਸਲ ਸਥਿਤੀ ਦਾ ਮੇਲ ਕਰਦਾ ਹੈ।

Kubernetes 'ਤੇMySQL — ਓਪਰੇਟਰ ਆਰਕੀਟੈਕਚਰKubernetes ਕਲੱਸਟਰਕਸਟਮ ਸਰੋਤInnoDBCluster CRਪ੍ਰਤੀਕ੍ਰਿਤੀਆਂ: 3, ਰਾਊਟਰ: 2ਘੜੀMySQL ਆਪਰੇਟਰਕੰਟਰੋਲਰ / ਰੀਕਨਸਿਲਰਜੀਵਨ ਚੱਕਰ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ & ਫੇਲਓਵਰਬਣਾਉਂਦਾ ਹੈConfigMapਸੇਵਾਵਾਂਕਲੱਸਟਰIP / ਹੈੱਡਲੈੱਸਸਟੇਟਫੁਲਸੈੱਟ: mysqlਆਰਡਰਡ ਪੌਡ ਪ੍ਰਬੰਧਨ, ਸਥਿਰ ਪਛਾਣmysql-0 (ਪ੍ਰਾਇਮਰੀ)mysqld + ਸਾਈਡਕਾਰR/W — ਪੋਰਟ 3306mysql-1 (ਸੈਕੰਡਰੀ)mysqld + ਸਾਈਡਕਾਰR/O — ਪੋਰਟ 3306mysql-2 (ਸੈਕੰਡਰੀ)mysqld + ਸਾਈਡਕਾਰR/O — ਪੋਰਟ 3306PVC: data-mysql-0PVC: data-mysql-1PVC: data-mysql-2ਸਟੋਰੇਜ ਕਲਾਸ: gp3 / premium-ssd / Longhornਪ੍ਰੋਵੀਜ਼ਨਰ: ebs.csi / disk.csi / longhornਆਪਰੇਟਰਸਟੇਟਫੁਲਸੈੱਟKubernetes (Oracle)ਲਈ

MySQL ਆਪਰੇਟਰ Kubernetes ਲਈ

Oracle ਦਾ MySQL ਆਪਰੇਟਰ Kubernetes 'ਤੇ ਮੂਲ ਰੂਪ ਵਿੱਚ InnoDB ਕਲੱਸਟਰ ਉਦਾਹਰਨਾਂ ਨੂੰ ਤੈਨਾਤ ਅਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰਦਾ ਹੈ। ਇਹ MySQL ਸਰਵਰ ਪੌਡਸ, MySQL ਰਾਊਟਰ ਲਈ ਤੈਨਾਤੀਆਂ ਲਈ ਸਟੇਟਫੁਲਸੈੱਟ ਬਣਾਉਂਦਾ ਹੈ, ਅਤੇ ਸਵੈਚਲਿਤ ਫੇਲਓਵਰ, ਸਕੇਲਿੰਗ, ਬੈਕਅੱਪ, ਅਤੇ ਸੰਰਚਨਾ ਤਬਦੀਲੀਆਂ ਨੂੰ ਹੈਂਡਲ ਕਰਦਾ ਹੈ।

# Install the MySQL Operator via Helm
helm repo add mysql-operator https://mysql.github.io/mysql-operator/
helm repo update

helm install mysql-operator mysql-operator/mysql-operator \
  --namespace mysql-operator \
  --create-namespace \
  --set image.pullPolicy=IfNotPresent

ਇੱਕ ਵਾਰ ਓਪਰੇਟਰ ਚੱਲ ਰਿਹਾ ਹੈ, ਇੱਕ ਕਸਟਮ ਸਰੋਤ ਬਣਾ ਕੇ ਇੱਕ InnoDB ਕਲੱਸਟਰ ਨੂੰ ਤੈਨਾਤ ਕਰੋ।

apiVersion: v1
kind: Secret
metadata:
  name: mysql-root-credentials
  namespace: production
stringData:
  rootUser: root
  rootHost: '%'
  rootPassword: 'ProductionSecurePass123!'
---
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: production-mysql
  namespace: production
spec:
  secretName: mysql-root-credentials
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 2
  datadirVolumeClaimTemplate:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 100Gi
    storageClassName: gp3-encrypted
  mycnf: |
    [mysqld]
    innodb_buffer_pool_size=4G
    innodb_log_file_size=1G
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    max_connections=500
    innodb_io_capacity=2000
    innodb_io_capacity_max=4000
    innodb_read_io_threads=8
    innodb_write_io_threads=8
    performance_schema=ON
    slow_query_log=ON
    long_query_time=1
  podSpec:
    containers:
      - name: mysql
        resources:
          requests:
            cpu: "2"
            memory: 8Gi
          limits:
            cpu: "4"
            memory: 16Gi
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: component
                  operator: In
                  values: [mysqld]
            topologyKey: topology.kubernetes.io/zone

ਪੌਡ ਐਂਟੀ-ਐਫੀਨਿਟੀ ਨਿਯਮ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ MySQL ਪੌਡ ਉਪਲਬਧਤਾ ਜ਼ੋਨਾਂ ਵਿੱਚ ਫੈਲੇ ਹੋਏ ਹਨ, ਜੋ ਕਿ ਜ਼ੋਨ-ਪੱਧਰ ਦੀ ਨੁਕਸ ਸਹਿਣਸ਼ੀਲਤਾ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ।mycnfਬਲਾਕ ਤੁਹਾਨੂੰ ਉਤਪਾਦਨ-ਟਿਊਨਡ MySQL ਸੰਰਚਨਾ ਨੂੰ ਸਿੱਧੇ CR ਰਾਹੀਂ ਇੰਜੈਕਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।

MySQL (PXC)

ਲਈ

ਪਰਕੋਨਾ ਆਪਰੇਟਰ MySQL ਲਈ

ਪਰਕੋਨਾ ਓਪਰੇਟਰ Percona XtraDB ਕਲੱਸਟਰ (PXC), ਗੈਲੇਰਾ 'ਤੇ ਆਧਾਰਿਤ ਇੱਕ ਮਲਟੀ-ਪ੍ਰਾਇਮਰੀ ਸਮਕਾਲੀ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਹੱਲ ਹੈ। PXC InnoDB ਕਲੱਸਟਰ ਤੋਂ ਇਸ ਵਿੱਚ ਵੱਖਰਾ ਹੈ ਕਿ ਹਰ ਨੋਡ ਰਾਈਟਸ ਨੂੰ ਸਵੀਕਾਰ ਕਰ ਸਕਦਾ ਹੈ (ਸੱਚਾ ਮਲਟੀ-ਪ੍ਰਾਇਮਰੀ), ਅਤੇ ਪ੍ਰਤੀਕ੍ਰਿਤੀ wsrep API ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪ੍ਰਮਾਣੀਕਰਣ ਪੱਧਰ 'ਤੇ ਸਮਕਾਲੀ ਹੈ।

# Install Percona Operator
helm repo add percona https://percona.github.io/percona-helm-charts/
helm repo update

helm install pxc-operator percona/pxc-operator \
  --namespace pxc \
  --create-namespace
# Percona XtraDB Cluster Custom Resource
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBCluster
metadata:
  name: production-pxc
  namespace: pxc
spec:
  crVersion: '1.14.0'
  secretsName: pxc-secrets
  pxc:
    size: 3
    image: percona/percona-xtradb-cluster:8.0.35
    resources:
      requests:
        memory: 8Gi
        cpu: "2"
      limits:
        memory: 16Gi
        cpu: "4"
    volumeSpec:
      persistentVolumeClaim:
        storageClassName: gp3-encrypted
        accessModes: [ReadWriteOnce]
        resources:
          requests:
            storage: 200Gi
    affinity:
      antiAffinityTopologyKey: topology.kubernetes.io/zone
    configuration: |
      [mysqld]
      innodb_buffer_pool_size=4G
      innodb_flush_log_at_trx_commit=1
      wsrep_provider_options="gcache.size=2G; gcs.fc_limit=256"
      wsrep_slave_threads=8
      wsrep_certify_nonPK=1
      wsrep_trx_fragment_size=10M
      max_connections=500
  haproxy:
    enabled: true
    size: 3
    image: percona/haproxy:2.8.5
    resources:
      requests:
        memory: 1Gi
        cpu: 500m
  proxysql:
    enabled: false
  backup:
    image: percona/percona-xtradb-cluster-operator:1.14.0-pxc8.0-backup-pxb8.0.35
    storages:
      s3-backup:
        type: s3
        verifyTLS: true
        s3:
          bucket: production-mysql-backups
          region: us-east-1
          credentialsSecret: aws-s3-credentials
    schedule:
      - name: daily-full
        schedule: "0 3 * * *"
        keep: 7
        storageName: s3-backup
      - name: hourly-incremental
        schedule: "0 * * * *"
        keep: 24
        storageName: s3-backup

ਪਰਕੋਨਾ ਆਪਰੇਟਰ ਕਨੈਕਸ਼ਨ ਰੂਟਿੰਗ ਲਈ S3, ਪੁਆਇੰਟ-ਇਨ-ਟਾਈਮ ਰਿਕਵਰੀ, ਰੋਲਿੰਗ ਅੱਪਗਰੇਡ, ਅਤੇ ProxySQL ਜਾਂ HAProxy ਲਈ ਸਵੈਚਲਿਤ ਬੈਕਅੱਪ ਹੈਂਡਲ ਕਰਦਾ ਹੈ। PXC ਵਿੱਚ ਗੈਲੇਰਾ-ਅਧਾਰਿਤ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਹੀ ਸਮਕਾਲੀ ਮਲਟੀ-ਪ੍ਰਾਇਮਰੀ ਰਾਈਟਸ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ — ਹਰੇਕ ਵਚਨਬੱਧ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਸਾਰੇ ਨੋਡਾਂ 'ਤੇ ਮੌਜੂਦ ਹੋਣ ਦੀ ਗਰੰਟੀ ਹੈ।

ਕਨੈਕਸ਼ਨ ਰੂਟਿੰਗ: MySQL ਰਾਊਟਰ ਬਨਾਮ ProxySQL

MySQL ਰਾਊਟਰ ਅਤੇ ProxySQL ਦੋਵੇਂ ਡਾਟਾਬੇਸ ਪ੍ਰੌਕਸੀ ਦੇ ਤੌਰ 'ਤੇ ਕੰਮ ਕਰਦੇ ਹਨ, ਪਰ ਉਹਨਾਂ ਦੀਆਂ ਸ਼ਕਤੀਆਂ ਵੱਖਰੀਆਂ ਹਨ।

MySQL ਰਾਊਟਰInnoDB ਕਲੱਸਟਰ ਲਈ ਮਕਸਦ ਨਾਲ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਇਹ ਕਲੱਸਟਰ ਮੈਟਾਡੇਟਾ ਪੜ੍ਹਦਾ ਹੈ, ਟੌਪੋਲੋਜੀ ਤਬਦੀਲੀਆਂ ਨੂੰ ਟਰੈਕ ਕਰਦਾ ਹੈ, ਅਤੇ ਸਹੀ ਪ੍ਰਾਇਮਰੀ ਜਾਂ ਸੈਕੰਡਰੀ ਲਈ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਰੂਟ ਕਰਦਾ ਹੈ। ਇਸਦੀ ਸੰਰਚਨਾ ਨਿਊਨਤਮ ਹੈ ਅਤੇ ਇਹ MySQL ਈਕੋਸਿਸਟਮ ਨਾਲ ਸਹਿਜੇ ਹੀ ਏਕੀਕ੍ਰਿਤ ਹੈ। ਨਨੁਕਸਾਨ ਸੀਮਤ ਪੁੱਛਗਿੱਛ-ਪੱਧਰ ਦੀ ਰੂਟਿੰਗ ਹੈ — ਇਹ ਕੁਨੈਕਸ਼ਨ ਪੱਧਰ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਪੁੱਛਗਿੱਛ ਪੱਧਰ 'ਤੇ ਨਹੀਂ।

ProxySQLਇੱਕ ਆਮ-ਉਦੇਸ਼ ਵਾਲੀ MySQL ਪ੍ਰੌਕਸੀ ਹੈ ਜਿਸ ਵਿੱਚ ਉੱਨਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਹਨ: ਪੁੱਛਗਿੱਛ-ਪੱਧਰੀ ਰੀਡ/ਰਾਈਟ ਸਪਲਿਟਿੰਗ, ਪੁੱਛਗਿੱਛ ਕੈਚਿੰਗ, ਕੁਨੈਕਸ਼ਨ ਮਲਟੀਪਲੈਕਸਿੰਗ, ਪੁੱਛਗਿੱਛ ਰੀਰਾਈਟਿੰਗ, ਅਤੇ ਵਧੀਆ ਰੂਟਿੰਗ ਨਿਯਮ। ਇਹ ਉਹਨਾਂ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਉੱਤਮ ਹੈ ਜਿੱਥੇ ਤੁਹਾਨੂੰ ਪੁੱਛਗਿੱਛਾਂ ਨੂੰ ਕਿਵੇਂ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ ਇਸ 'ਤੇ ਵਧੀਆ ਨਿਯੰਤਰਣ ਦੀ ਜ਼ਰੂਰਤ ਹੁੰਦੀ ਹੈ।

# ProxySQL configuration for read/write splitting
# proxysql.cnf

mysql_servers:
(
    { hostgroup_id=10, hostname="mysql-primary", port=3306, max_connections=200, weight=1000 },
    { hostgroup_id=20, hostname="mysql-secondary-1", port=3306, max_connections=200, weight=500 },
    { hostgroup_id=20, hostname="mysql-secondary-2", port=3306, max_connections=200, weight=500 }
)

mysql_query_rules:
(
    { rule_id=1, active=1, match_digest="^SELECT .* FOR UPDATE$", destination_hostgroup=10, apply=1 },
    { rule_id=2, active=1, match_digest="^SELECT", destination_hostgroup=20, apply=1 },
    { rule_id=3, active=1, match_digest=".*", destination_hostgroup=10, apply=1 }
)

mysql_replication_hostgroups:
(
    { writer_hostgroup=10, reader_hostgroup=20, comment="InnoDB Cluster" }
)

Kubernetes ਵਾਤਾਵਰਨ ਵਿੱਚ, ProxySQL ਤੁਹਾਡੇ ਐਪਲੀਕੇਸ਼ਨ ਪੌਡਾਂ ਵਿੱਚ ਇੱਕ ਸਾਈਡਕਾਰ ਕੰਟੇਨਰ ਵਜੋਂ ਜਾਂ ਇੱਕ ਸਮਰਪਿਤ ਤੈਨਾਤੀ ਵਜੋਂ ਚੱਲ ਸਕਦਾ ਹੈ। ਇਸਨੂੰ ਇੱਕ ਸਾਈਡਕਾਰ ਦੇ ਤੌਰ ਤੇ ਚਲਾਉਣਾ ਨੈਟਵਰਕ ਹੌਪਸ ਨੂੰ ਖਤਮ ਕਰਦਾ ਹੈ ਪਰ ਪੌਡ ਸਰੋਤ ਦੀ ਵਰਤੋਂ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ; ਇੱਕ ਸਮਰਪਿਤ ਤੈਨਾਤੀ ਪੈਮਾਨੇ 'ਤੇ ਪ੍ਰਬੰਧਨ ਲਈ ਆਸਾਨ ਹੈ।

ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ ਤੁਲਨਾ: ਪ੍ਰਬੰਧਿਤ ਬਨਾਮ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ

AWS: EKS

'ਤੇ RDS ਮਲਟੀ-AZ ਬਨਾਮ ਅਰੋੜਾ ਬਨਾਮ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ

Amazon RDS Multi-AZਵੱਖ-ਵੱਖ ਉਪਲਬਧਤਾ ਜ਼ੋਨਾਂ ਵਿੱਚ ਪ੍ਰਾਇਮਰੀ ਅਤੇ ਸਟੈਂਡਬਾਏ ਉਦਾਹਰਨ ਦੇ ਵਿਚਕਾਰ ਆਟੋਮੈਟਿਕ ਫੇਲਓਵਰ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਫੇਲਓਵਰ ਵਿੱਚ ਆਮ ਤੌਰ 'ਤੇ 60-120 ਸਕਿੰਟ ਲੱਗਦੇ ਹਨ। ਇਹ ਸਟੈਂਡਬਾਏ ਲਈ ਸਮਕਾਲੀ ਭੌਤਿਕ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਰੀਡ ਸਕੇਲਿੰਗ ਲਈ ਰੀਡ ਪ੍ਰਤੀਕ੍ਰਿਤੀਆਂ ਨੂੰ ਜੋੜਿਆ ਜਾ ਸਕਦਾ ਹੈ ਪਰ ਉਹ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। RDS ਬੈਕਅੱਪ, ਪੈਚਿੰਗ, ਅਤੇ ਨਿਗਰਾਨੀ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ ਪਰ MySQL ਸੰਰਚਨਾ ਅਤੇ ਸੰਸਕਰਣ ਚੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨਿਯੰਤਰਣ ਨੂੰ ਸੀਮਤ ਕਰਦਾ ਹੈ।

Amazon Aurora MySQLMySQL ਸਟੋਰੇਜ ਇੰਜਣ ਦਾ ਇੱਕ ਕਲਾਉਡ-ਨੇਟਿਵ ਰੀਰਾਈਟ ਹੈ। ਇਹ ਗਣਨਾ ਨੂੰ ਸਟੋਰੇਜ ਤੋਂ ਵੱਖ ਕਰਦਾ ਹੈ — ਸਟੋਰੇਜ਼ ਲੇਅਰ ਇੱਕ ਵੰਡਿਆ, ਨੁਕਸ-ਸਹਿਣਸ਼ੀਲ ਸਿਸਟਮ ਹੈ ਜੋ ਤਿੰਨ AZs ਵਿੱਚ ਛੇ ਤਰੀਕਿਆਂ ਨਾਲ ਡੇਟਾ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ। ਔਰੋਰਾ ਸਬ-10-ਸਕਿੰਟ ਫੇਲਓਵਰ, ਘੱਟੋ-ਘੱਟ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੇ ਪਛੜ ਦੇ ਨਾਲ 15 ਰੀਡ ਪ੍ਰਤੀਕ੍ਰਿਤੀਆਂ, ਅਤੇ 128 TiB ਤੱਕ ਆਟੋਮੈਟਿਕ ਸਟੋਰੇਜ ਸਕੇਲਿੰਗ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। Aurora Serverless v2 ਅਣਪਛਾਤੇ ਵਰਕਲੋਡ ਲਈ ਆਟੋਮੈਟਿਕ ਕੰਪਿਊਟ ਸਕੇਲਿੰਗ ਜੋੜਦਾ ਹੈ। ਟ੍ਰੇਡ-ਆਫ ਲਾਗਤ ਹੈ (ਆਰਡੀਐਸ ਨਾਲੋਂ ਔਰੋਰਾ 20-40% ਜ਼ਿਆਦਾ ਮਹਿੰਗਾ ਹੈ) ਅਤੇ ਕੁਝ ਖਾਸ MySQL ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨਾਲ ਅਨੁਕੂਲਤਾ ਘਟਾਈ ਗਈ ਹੈ।

EKS'ਤੇ

ਸਵੈ-ਪ੍ਰਬੰਧਿਤ ਤੁਹਾਨੂੰ MySQL ਸੰਸਕਰਣ, ਸੰਰਚਨਾ, ਅਤੇ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਟੋਪੋਲੋਜੀ 'ਤੇ ਪੂਰਾ ਕੰਟਰੋਲ ਦਿੰਦਾ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਤੁਹਾਨੂੰ ਪ੍ਰਬੰਧਿਤ ਸੇਵਾਵਾਂ ਵਿੱਚ ਉਪਲਬਧ ਖਾਸ MySQL ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ, ਜਦੋਂ ਤੁਹਾਨੂੰ ਮਲਟੀ-ਕਲਾਊਡ ਪੋਰਟੇਬਿਲਟੀ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਾਂ ਜਦੋਂ ਪੈਮਾਨੇ 'ਤੇ ਲਾਗਤ ਅਨੁਕੂਲਨ ਕਾਰਜਸ਼ੀਲ ਓਵਰਹੈੱਡ ਨੂੰ ਜਾਇਜ਼ ਠਹਿਰਾਉਂਦਾ ਹੈ।

# EKS StorageClass for MySQL with gp3 volumes
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gp3-encrypted
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "6000"
  throughput: "250"
  encrypted: "true"
  fsType: ext4
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
allowVolumeExpansion: true

Azure: ਲਚਕਦਾਰ ਸਰਵਰ ਬਨਾਮ AKS

'ਤੇ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ

Azure ਡਾਟਾਬੇਸ MySQL ਲਚਕਦਾਰ ਸਰਵਰਲਈ ਆਟੋਮੈਟਿਕ ਫੇਲਓਵਰ, ਸਮਾਨ-ਖੇਤਰ ਰੀਡ ਪ੍ਰਤੀਕ੍ਰਿਤੀਆਂ, ਅਤੇ 16 TiB ਸਟੋਰੇਜ ਦੇ ਨਾਲ ਜ਼ੋਨ-ਰਿਡੰਡੈਂਟ HA ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦਾ ਹੈ। ਇਹ ਸੰਰਚਨਾਯੋਗ ਰੱਖ-ਰਖਾਅ ਵਿੰਡੋਜ਼, ਉਦਾਹਰਨਾਂ ਨੂੰ ਰੋਕਣ/ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਸਮਰੱਥਾ (ਦੇਵ/ਟੈਸਟ ਲਾਗਤ ਬੱਚਤਾਂ ਲਈ ਉਪਯੋਗੀ), ਅਤੇ ਨੈੱਟਵਰਕ ਆਈਸੋਲੇਸ਼ਨ ਲਈ Azure ਪ੍ਰਾਈਵੇਟ ਲਿੰਕ ਨਾਲ ਏਕੀਕਰਣ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। ਕਾਰੋਬਾਰੀ ਨਾਜ਼ੁਕ ਪੱਧਰ ਸਥਾਨਕ SSD ਸਟੋਰੇਜ ਦੇ ਨਾਲ ਵਧੀਆ ਪ੍ਰਦਰਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।

AKS
'ਤੇ

ਸਵੈ-ਪ੍ਰਬੰਧਿਤ MySQL ਆਪਰੇਟਰ ਜਾਂ ਪਰਕੋਨਾ ਆਪਰੇਟਰ ਨਾਲ Azure ਪ੍ਰਬੰਧਿਤ ਡਿਸਕਸ (ਡੇਟਾਬੇਸ ਵਰਕਲੋਡ ਲਈ ਪ੍ਰੀਮੀਅਮ SSD v2 ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਗਈ) ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। AKS ਪੌਡ-ਪੱਧਰ VNET ਏਕੀਕਰਣ ਲਈ ਉਪਲਬਧਤਾ ਜ਼ੋਨ ਸਹਾਇਤਾ ਅਤੇ Azure CNI ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।

# AKS StorageClass for MySQL
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-ssd-zrs
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_ZRS
  cachingMode: None
  DiskIOPSReadWrite: "5000"
  DiskMBpsReadWrite: "200"
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
allowVolumeExpansion: true

Google Cloud: Cloud SQL ਬਨਾਮ GKE

'ਤੇ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ

MySQLਲਈ Google ਕਲਾਊਡ SQL ਜ਼ੋਨਾਂ ਵਿੱਚ ਆਟੋਮੈਟਿਕ ਫੇਲਓਵਰ, ਰੀਡ ਰਿਪਲੀਕਾ (ਕ੍ਰਾਸ-ਰੀਜਨ ਸਮੇਤ), ਅਤੇ ਪੁਆਇੰਟ-ਇਨ-ਟਾਈਮ ਰਿਕਵਰੀ ਦੇ ਨਾਲ ਸਵੈਚਲਿਤ ਬੈਕਅੱਪ ਦੇ ਨਾਲ ਖੇਤਰੀ ਉਦਾਹਰਨਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦਾ ਹੈ। Cloud SQL Google ਦੇ IAM, VPC, ਅਤੇ ਮਾਨੀਟਰਿੰਗ ਈਕੋਸਿਸਟਮ ਵਿੱਚ ਏਕੀਕਰਣ ਦੇ ਨਾਲ ਪ੍ਰਬੰਧਿਤ ਸੁਵਿਧਾ ਦਾ ਉੱਚ ਪੱਧਰ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਐਂਟਰਪ੍ਰਾਈਜ਼ ਪਲੱਸ ਟੀਅਰ ਬਿਹਤਰ ਰੀਡ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਨੇੜੇ-ਜ਼ੀਰੋ ਡਾਊਨਟਾਈਮ ਮੇਨਟੇਨੈਂਸ ਅਤੇ ਡਾਟਾ ਕੈਸ਼ ਜੋੜਦਾ ਹੈ।

GKE
'ਤੇ

ਸਵੈ-ਪ੍ਰਬੰਧਿਤ ਸਟੋਰੇਜ ਲਈ ਪਰਸਿਸਟੈਂਟ ਡਿਸਕ SSD ਜਾਂ ਹਾਈਪਰਡਿਸਕ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। GKE ਆਟੋਪਾਇਲਟ ਨੋਡ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ MySQL ਆਪਰੇਟਰ ਨੂੰ ਘੱਟੋ-ਘੱਟ ਸੰਚਾਲਨ ਓਵਰਹੈੱਡ ਨਾਲ ਚਲਾ ਸਕਦਾ ਹੈ।

# GKE StorageClass for MySQL
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd-regional
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
allowVolumeExpansion: true

ਬੇਅਰ ਮੈਟਲ: k3s + ਰੈਂਚਰ + ਲੋਂਗਹੋਰਨ

ਹਰ ਕੰਮ ਦਾ ਬੋਝ ਜਨਤਕ ਕਲਾਊਡ ਵਿੱਚ ਨਹੀਂ ਹੁੰਦਾ ਹੈ। ਡੇਟਾ ਸੰਪ੍ਰਭੂਤਾ, ਪਾਲਣਾ, ਲਾਗਤ ਅਨੁਕੂਲਤਾ, ਜਾਂ ਲੇਟੈਂਸੀ ਲੋੜਾਂ ਲਈ, ਰੈਂਚਰ ਪ੍ਰਬੰਧਨ ਅਤੇ ਲੋਂਗਹੋਰਨ ਸਟੋਰੇਜ ਦੇ ਨਾਲ k3s ਨੂੰ ਚਲਾਉਣ ਵਾਲੇ ਬੇਅਰ ਮੈਟਲ Kubernetes ਕਲੱਸਟਰ MySQL HA ਲਈ ਉਤਪਾਦਨ-ਗਰੇਡ ਪਲੇਟਫਾਰਮ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ।

ਬੇਅਰ ਮੈਟਲ k3s/Rancher MySQL HA ਆਰਕੀਟੈਕਚਰਰੈਂਚਰ ਮੈਨੇਜਮੈਂਟ ਸਰਵਰਕਲੱਸਟਰ ਪ੍ਰੋਵਿਜ਼ਨਿੰਗ, ਨਿਗਰਾਨੀ, RBACk3s ਕਲੱਸਟਰਕੰਟਰੋਲ ਪਲੇਨ (x3)etcd + API ਸਰਵਰ + ਸ਼ਡਿਊਲਰMetalLBL2/BGP ਲੋਡ ਬੈਲੈਂਸਰMySQL ਆਪਰੇਟਰਓਰੇਕਲ ਜਾਂ ਪਰਕੋਨਾਵਰਕਰ ਨੋਡ 1mysql-0 (ਪ੍ਰਾਇਮਰੀ)CPU: 4 | ਰੈਮ: 16GiMySQL ਰਾਊਟਰ ਪੋਡਲੋਂਗਹੋਰਨ ਵਾਲੀਅਮ: 200Giਵਰਕਰ ਨੋਡ 2mysql-1 (ਸੈਕੰਡਰੀ)CPU: 4 | ਰੈਮ: 16GiMySQL ਰਾਊਟਰ ਪੋਡਲੋਂਗਹੋਰਨ ਵਾਲੀਅਮ: 200Giਵਰਕਰ ਨੋਡ 3mysql-2 (ਸੈਕੰਡਰੀ)CPU: 4 | ਰੈਮ: 16GiMySQL ਰਾਊਟਰ ਪੋਡਲੋਂਗਹੋਰਨ ਵਾਲੀਅਮ: 200GiLonghorn ਡਿਸਟਰੀਬਿਊਟਿਡ ਸਟੋਰੇਜਪ੍ਰਤੀ ਵੌਲਯੂਮ3x ਪ੍ਰਤੀਕ੍ਰਿਤੀਆਂ | ਸਨੈਪਸ਼ਾਟ | S3/NFSਲਈ ਬੈਕਅੱਪNVMe SSD — ਨੋਡ 1NVMe SSD — ਨੋਡ 2NVMe SSD — ਨੋਡ 3

k3s ਸਥਾਪਨਾ ਅਤੇ ਸੰਰਚਨਾ

k3s ਕਿਨਾਰੇ ਅਤੇ ਬੇਅਰ ਮੈਟਲ ਲਈ ਇੱਕ ਹਲਕਾ, ਪ੍ਰਮਾਣਿਤ Kubernetes ਵੰਡ ਆਦਰਸ਼ ਹੈ। ਇਹ ਸਾਰੇ ਕੰਟਰੋਲ-ਪਲੇਨ ਕੰਪੋਨੈਂਟਸ ਨੂੰ ਇੱਕ ਸਿੰਗਲ ਬਾਈਨਰੀ ਵਿੱਚ ਬੰਡਲ ਕਰਦਾ ਹੈ ਅਤੇ ਸਟੇਟ ਸਟੋਰੇਜ ਲਈ SQLite ਜਾਂ ਏਮਬੈਡੇਡ etcd ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।

# Install k3s server (first control-plane node)
curl -sfL https://get.k3s.io | sh -s - server \
  --cluster-init \
  --tls-san 10.10.0.10 \
  --disable traefik \
  --disable servicelb \
  --write-kubeconfig-mode 644

# Join additional server nodes
curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token) sh -s - server \
  --server https://10.10.0.10:6443 \
  --tls-san 10.10.0.10

# Join worker nodes
curl -sfL https://get.k3s.io | K3S_URL=https://10.10.0.10:6443 \
  K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token) sh -s -
MySQLਲਈ

ਲੋਂਗਹੋਰਨ ਸਟੋਰੇਜ

Longhorn ਇੱਕ ਕਲਾਉਡ-ਨੇਟਿਵ ਡਿਸਟਰੀਬਿਊਟਡ ਬਲਾਕ ਸਟੋਰੇਜ ਸਿਸਟਮ ਹੈ ਜੋ Kubernetes ਲਈ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਇਹ ਨੋਡਾਂ ਵਿੱਚ ਡੇਟਾ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ, ਸਨੈਪਸ਼ਾਟ ਅਤੇ ਬੈਕਅੱਪ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਅਤੇ Kubernetes CSI ਡਰਾਈਵਰ ਨਾਲ ਮੂਲ ਰੂਪ ਵਿੱਚ ਏਕੀਕ੍ਰਿਤ ਕਰਦਾ ਹੈ। MySQL ਲਈ, Longhorn ਨਿਰੰਤਰ, ਪ੍ਰਤੀਕ੍ਰਿਤ ਸਟੋਰੇਜ ਪਰਤ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ ਉਹਨਾਂ ਦੇ ਪ੍ਰਬੰਧਿਤ ਡਿਸਕ ਪੇਸ਼ਕਸ਼ਾਂ ਨਾਲ ਹੈਂਡਲ ਕਰਦੇ ਹਨ।

# Install Longhorn
helm repo add longhorn https://charts.longhorn.io
helm repo update

helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --create-namespace \
  --set defaultSettings.defaultReplicaCount=3 \
  --set defaultSettings.storageMinimalAvailablePercentage=15 \
  --set defaultSettings.guaranteedInstanceManagerCPU=12

# StorageClass for MySQL on Longhorn
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: longhorn-mysql
provisioner: driver.longhorn.io
parameters:
  numberOfReplicas: "3"
  staleReplicaTimeout: "2880"
  dataLocality: best-effort
  diskSelector: ssd
  fsType: ext4
reclaimPolicy: Retain
volumeBindingMode: Immediate
allowVolumeExpansion: true
ਲੋਡ ਬੈਲੇਂਸਿੰਗ ਲਈ

MetalLB

ਬੇਅਰ ਮੈਟਲ 'ਤੇ, ਕੋਈ ਕਲਾਉਡ ਲੋਡ ਬੈਲੇਂਸਰ ਨਹੀਂ ਹੈ। MetalLB ਲੇਅਰ 2 (ARP) ਜਾਂ BGP ਮੋਡ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਲੋਡਬੈਲੈਂਸਰ ਕਿਸਮ ਦੀਆਂ Kubernetes ਸੇਵਾਵਾਂ ਨੂੰ ਬਾਹਰੀ IP ਐਡਰੈੱਸ ਦੇ ਕੇ ਇਸ ਅੰਤਰ ਨੂੰ ਭਰਦਾ ਹੈ।

# MetalLB IP Address Pool and L2 Advertisement
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: mysql-pool
  namespace: metallb-system
spec:
  addresses:
    - 10.10.0.100-10.10.0.110
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: mysql-l2
  namespace: metallb-system
spec:
  ipAddressPools:
    - mysql-pool

ਬੈਕਅੱਪ ਅਤੇ ਰਿਕਵਰੀ ਰਣਨੀਤੀਆਂ

ਇੱਕ ਉੱਚ ਉਪਲਬਧਤਾ ਕਲੱਸਟਰ ਨੋਡ ਅਸਫਲਤਾਵਾਂ ਤੋਂ ਬਚਾਉਂਦਾ ਹੈ। ਬੈਕਅੱਪ ਡਾਟਾ ਭ੍ਰਿਸ਼ਟਾਚਾਰ, ਦੁਰਘਟਨਾ ਨਾਲ ਮਿਟਾਏ ਜਾਣ, ਐਪਲੀਕੇਸ਼ਨ ਬੱਗ, ਅਤੇ ਤਬਾਹੀ ਰਿਕਵਰੀ ਦ੍ਰਿਸ਼ਾਂ ਤੋਂ ਬਚਾਉਂਦੇ ਹਨ ਜਿੱਥੇ ਸਾਰਾ ਕਲੱਸਟਰ ਗੁਆਚ ਜਾਂਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਦੋਵਾਂ ਦੀ ਲੋੜ ਹੈ।

mysqldumpਨਾਲ

ਲਾਜ਼ੀਕਲ ਬੈਕਅੱਪ

mysqldumpSQL-ਫਾਰਮੈਟ ਬੈਕਅੱਪ ਪੈਦਾ ਕਰਦਾ ਹੈ ਜੋ ਪੋਰਟੇਬਲ ਅਤੇ ਮਨੁੱਖੀ-ਪੜ੍ਹਨਯੋਗ ਹਨ। 50 GB ਤੋਂ ਘੱਟ ਡਾਟਾਬੇਸ ਲਈ, ਇਹ ਸਭ ਤੋਂ ਸਰਲ ਵਿਕਲਪ ਹੈ। ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ, ਤਾਲਾਬੰਦੀ ਅਤੇ ਨਿਰਯਾਤ ਸਮਾਂ ਵਪਾਰਕ ਘੰਟਿਆਂ ਦੌਰਾਨ ਉਤਪਾਦਨ ਦੀ ਵਰਤੋਂ ਲਈ ਅਵਿਵਹਾਰਕ ਬਣਾਉਂਦਾ ਹੈ।

# Full logical backup with consistent snapshot
mysqldump --all-databases \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --set-gtid-purged=ON \
  --result-file=/backups/full-$(date +%Y%m%d-%H%M%S).sql

# Compressed backup piped to S3
mysqldump --all-databases --single-transaction | \
  gzip | aws s3 cp - s3://mysql-backups/full-$(date +%Y%m%d).sql.gz
Percona XtraBackup

ਨਾਲ

ਭੌਤਿਕ ਬੈਕਅੱਪ

Percona XtraBackup InnoDB ਡੇਟਾ ਦੇ ਗਰਮ, ਗੈਰ-ਬਲਾਕਿੰਗ ਭੌਤਿਕ ਬੈਕਅੱਪ ਕਰਦਾ ਹੈ। ਇਹ ਰੀਡੋ ਲੌਗ ਨੂੰ ਟਰੈਕ ਕਰਦੇ ਸਮੇਂ InnoDB ਡੇਟਾ ਫਾਈਲਾਂ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ, ਫਿਰ ਇਕਸਾਰ ਬੈਕਅੱਪ ਪੈਦਾ ਕਰਨ ਲਈ ਤਿਆਰੀ ਪੜਾਅ ਦੌਰਾਨ ਰੀਡੋ ਲੌਗ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਇਹ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ mysqldump ਨਾਲੋਂ ਨਾਟਕੀ ਤੌਰ 'ਤੇ ਤੇਜ਼ ਹੈ ਅਤੇ ਵਾਧੇ ਵਾਲੇ ਬੈਕਅਪ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ।

# Full physical backup
xtrabackup --backup \
  --target-dir=/backups/full \
  --user=backup_user \
  --password=SecureBackupPass \
  --parallel=4 \
  --compress \
  --compress-threads=4

# Incremental backup based on previous full
xtrabackup --backup \
  --target-dir=/backups/incr-$(date +%H) \
  --incremental-basedir=/backups/full \
  --user=backup_user \
  --password=SecureBackupPass

# Prepare (apply redo log) and restore
xtrabackup --prepare --target-dir=/backups/full
xtrabackup --prepare --target-dir=/backups/full \
  --incremental-dir=/backups/incr-01

# Copy back to data directory
xtrabackup --copy-back --target-dir=/backups/full --datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql

ਬਾਈਨਰੀ ਲੌਗ (ਬਿਨਲੌਗ) ਪੁਆਇੰਟ-ਇਨ-ਟਾਈਮ ਰਿਕਵਰੀ

ਬਾਈਨਰੀ ਲੌਗ ਹਰ ਡੇਟਾ-ਸੋਧਣ ਵਾਲੇ ਲੈਣ-ਦੇਣ ਨੂੰ ਰਿਕਾਰਡ ਕਰਦੇ ਹਨ। ਇੱਕ ਪੂਰੇ ਬੈਕਅਪ ਦੇ ਨਾਲ ਮਿਲਾ ਕੇ, ਉਹ ਪੁਆਇੰਟ-ਇਨ-ਟਾਈਮ ਰਿਕਵਰੀ (PITR) ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦੇ ਹਨ — ਕਿਸੇ ਖਾਸ ਪਲ ਨੂੰ ਮੁੜ ਬਹਾਲ ਕਰਨਾ, ਨਾ ਕਿ ਸਿਰਫ ਆਖਰੀ ਬੈਕਅੱਪ ਦਾ ਸਮਾਂ।

# Enable binlog retention (my.cnf)
[mysqld]
log_bin=mysql-bin
binlog_expire_logs_seconds=604800   # 7 days
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON

# Restore from backup then replay binlogs to a specific point
mysqlbinlog --start-datetime="2026-04-12 08:00:00" \
  --stop-datetime="2026-04-12 09:30:00" \
  mysql-bin.000042 mysql-bin.000043 | mysql -u root -p

# Or replay to a specific GTID position
mysqlbinlog --include-gtids="3c2d4f9e-d17e-ec59-9029-6aafa8accef8:1-5000" \
  mysql-bin.000042 | mysql -u root -p

Kubernetes ਬੈਕਅੱਪ ਕਰੋਨਜੌਬ

Kubernetes ਵਿੱਚ, ਬੈਕਅੱਪ ਨੂੰ ਐਡ-ਹਾਕ ਕਮਾਂਡਾਂ ਦੀ ਬਜਾਏ ਕ੍ਰੋਨਜੌਬਸ ਦੇ ਤੌਰ 'ਤੇ ਚਲਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਬੈਕਅੱਪ ਸਵੈਚਲਿਤ, ਨਿਗਰਾਨੀ ਕੀਤੇ ਗਏ ਹਨ, ਅਤੇ ਜੇਕਰ ਉਹ ਅਸਫਲ ਹੋ ਜਾਂਦੇ ਹਨ ਤਾਂ ਉਹਨਾਂ ਨੂੰ ਸੁਚੇਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।

apiVersion: batch/v1
kind: CronJob
metadata:
  name: mysql-backup
  namespace: production
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 7
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      activeDeadlineSeconds: 7200
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: backup
              image: percona/percona-xtrabackup:8.0.35
              command:
                - /bin/sh
                - -c
                - |
                  BACKUP_DIR=/backups/$(date +%Y%m%d-%H%M%S)
                  mkdir -p $BACKUP_DIR
                  xtrabackup --backup \
                    --host=production-mysql.production.svc \
                    --user=backup_user \
                    --password=$BACKUP_PASSWORD \
                    --target-dir=$BACKUP_DIR \
                    --parallel=4 \
                    --compress
                  xtrabackup --prepare --target-dir=$BACKUP_DIR
                  # Upload to S3
                  aws s3 sync $BACKUP_DIR s3://mysql-backups/$(date +%Y%m%d)/
                  # Cleanup local
                  rm -rf $BACKUP_DIR
              env:
                - name: BACKUP_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mysql-backup-credentials
                      key: password
              volumeMounts:
                - name: backup-scratch
                  mountPath: /backups
              resources:
                requests:
                  cpu: "1"
                  memory: 2Gi
                limits:
                  cpu: "2"
                  memory: 4Gi
          volumes:
            - name: backup-scratch
              emptyDir:
                sizeLimit: 100Gi
Percona ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ (PMM) ਦੇ ਨਾਲ

ਨਿਗਰਾਨੀ

ਪਰਕੋਨਾ ਮਾਨੀਟਰਿੰਗ ਐਂਡ ਮੈਨੇਜਮੈਂਟ (PMM) ਇੱਕ ਓਪਨ-ਸੋਰਸ ਮਾਨੀਟਰਿੰਗ ਪਲੇਟਫਾਰਮ ਹੈ ਜੋ ਡੇਟਾਬੇਸ ਨਿਰੀਖਣਯੋਗਤਾ ਲਈ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ Prometheus ਅਤੇ Grafana ਆਮ Kubernetes ਨਿਗਰਾਨੀ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ, PMM MySQL-ਵਿਸ਼ੇਸ਼ ਇਨਸਾਈਟਸ ਜੋੜਦਾ ਹੈ: ਪੁੱਛਗਿੱਛ ਵਿਸ਼ਲੇਸ਼ਣ (QAN) ਜੋ ਹੌਲੀ ਪੁੱਛਗਿੱਛਾਂ, ਰੀਪਲੀਕੇਸ਼ਨ ਲੈਗ ਡੈਸ਼ਬੋਰਡ, InnoDB ਬਫਰ ਪੂਲ ਹਿੱਟ ਅਨੁਪਾਤ, ਟੇਬਲ ਲਾਕ ਵਿਵਾਦ, ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈ।

# Deploy PMM Server on Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pmm-server
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pmm-server
  template:
    metadata:
      labels:
        app: pmm-server
    spec:
      containers:
        - name: pmm-server
          image: percona/pmm-server:2
          ports:
            - containerPort: 443
          env:
            - name: DISABLE_TELEMETRY
              value: "1"
          volumeMounts:
            - name: pmm-data
              mountPath: /srv
          resources:
            requests:
              cpu: "1"
              memory: 4Gi
            limits:
              cpu: "2"
              memory: 8Gi
      volumes:
        - name: pmm-data
          persistentVolumeClaim:
            claimName: pmm-data-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: pmm-server
  namespace: monitoring
spec:
  type: ClusterIP
  selector:
    app: pmm-server
  ports:
    - port: 443
      targetPort: 443
# Register MySQL instances with PMM Client (run on each MySQL pod or sidecar)
pmm-admin config --server-url=https://admin:password@pmm-server.monitoring:443 --server-insecure-tls
pmm-admin add mysql \
  --username=pmm_monitor \
  --password=MonitorPass123 \
  --host=127.0.0.1 \
  --port=3306 \
  --query-source=perfschema \
  --service-name=mysql-node-1

PMM ਦੇ ਪੁੱਛਗਿੱਛ ਵਿਸ਼ਲੇਸ਼ਣ ਉਤਪਾਦਨ ਵਿੱਚ ਖਾਸ ਤੌਰ 'ਤੇ ਕੀਮਤੀ ਹੈ. ਇਹ ਸਰਵਰ (ਪ੍ਰਦਰਸ਼ਨ ਸਕੀਮਾ ਜਾਂ ਹੌਲੀ ਪੁੱਛਗਿੱਛ ਲੌਗ ਦੁਆਰਾ) 'ਤੇ ਲਾਗੂ ਕੀਤੀ ਗਈ ਹਰੇਕ ਪੁੱਛਗਿੱਛ ਨੂੰ ਕੈਪਚਰ ਕਰਦਾ ਹੈ, ਉਹਨਾਂ ਨੂੰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੁਆਰਾ ਇਕੱਠਾ ਕਰਦਾ ਹੈ, ਅਤੇ ਔਸਤ ਲੇਟੈਂਸੀ, ਕਤਾਰਾਂ ਦੀ ਜਾਂਚ ਬਨਾਮ ਭੇਜੀਆਂ ਗਈਆਂ ਕਤਾਰਾਂ, ਅਤੇ ਲਾਕ ਟਾਈਮ ਵਰਗੇ ਮੈਟ੍ਰਿਕਸ ਦਿਖਾਉਂਦਾ ਹੈ। ਇਸ ਤਰ੍ਹਾਂ ਤੁਸੀਂ ਉਹਨਾਂ ਸਵਾਲਾਂ ਦੀ ਪਛਾਣ ਕਰਦੇ ਹੋ ਜੋ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਘਟਾ ਰਹੀਆਂ ਹਨ।

ਉਤਪਾਦਨ ਕੌਂਫਿਗਰੇਸ਼ਨ ਟਿਊਨਿੰਗ

ਡਿਫੌਲਟ MySQL ਸੰਰਚਨਾ ਇੱਕ ਛੋਟੇ, ਆਮ-ਉਦੇਸ਼ ਵਾਲੇ ਵਰਕਲੋਡ ਲਈ ਟਿਊਨ ਕੀਤੀ ਗਈ ਹੈ। ਸਮਰਪਿਤ ਡੇਟਾਬੇਸ ਸਰਵਰਾਂ ਦੇ ਨਾਲ ਉਤਪਾਦਨ ਦੇ ਵਾਤਾਵਰਣ ਨੂੰ ਕਾਫ਼ੀ ਵੱਖਰੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇੱਥੇ ਮਹੱਤਵਪੂਰਨ ਮਾਪਦੰਡ ਹਨ ਅਤੇ ਉਹਨਾਂ ਦਾ ਆਕਾਰ ਕਿਵੇਂ ਕਰਨਾ ਹੈ।

InnoDB ਬਫਰ ਪੂਲ

InnoDB ਬਫਰ ਪੂਲ ਹੈ ਜਿੱਥੇ MySQL ਟੇਬਲ ਅਤੇ ਇੰਡੈਕਸ ਡੇਟਾ ਨੂੰ ਮੈਮੋਰੀ ਵਿੱਚ ਕੈਸ਼ ਕਰਦਾ ਹੈ। ਇਹ ਸਭ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਸੰਰਚਨਾ ਪੈਰਾਮੀਟਰ ਹੈ। ਇੱਕ ਸਮਰਪਿਤ MySQL ਸਰਵਰ ਲਈ, ਇਸਨੂੰ ਉਪਲਬਧ RAM ਦੇ 70-80% 'ਤੇ ਸੈੱਟ ਕਰੋ।

[mysqld]
# Memory: 16Gi container limit -> allocate ~12Gi to buffer pool
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8          # 1 per GB (up to 64)
innodb_buffer_pool_chunk_size = 1536M     # pool_size / instances

ਰੀਡੋ ਲੌਗ ਕੌਂਫਿਗਰੇਸ਼ਨ

ਰੀਡੋ ਲੌਗ ਉਹਨਾਂ ਨੂੰ ਡੇਟਾ ਫਾਈਲਾਂ ਵਿੱਚ ਫਲੱਸ਼ ਕੀਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਰਾਈਟ ਨੂੰ ਸੋਖ ਲੈਂਦਾ ਹੈ। ਵੱਡੇ ਰੀਡੋ ਲੌਗ ਚੈਕਪੁਆਇੰਟ ਫਲੱਸ਼ਾਂ ਦੀ ਬਾਰੰਬਾਰਤਾ ਨੂੰ ਘਟਾਉਂਦੇ ਹਨ ਅਤੇ ਲਿਖਣ ਦੇ ਥ੍ਰੋਪੁੱਟ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦੇ ਹਨ। MySQL 8.0.30+ ਪੁਰਾਣੇinnodb_log_file_sizeਦੀ ਬਜਾਏinnodb_redo_log_capacityਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।

[mysqld]
# MySQL 8.0.30+
innodb_redo_log_capacity = 4G

# MySQL 8.0.29 and earlier
# innodb_log_file_size = 2G
# innodb_log_files_in_group = 2

ਟਿਕਾਊਤਾ ਬਨਾਮ ਪ੍ਰਦਰਸ਼ਨ ਵਪਾਰ-ਬੰਦ

innodb_flush_log_at_trx_commitਅਤੇsync_binlogਦਾ ਸੁਮੇਲ ਤੁਹਾਡੀ ਟਿਕਾਊਤਾ ਗਾਰੰਟੀ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ।

  • ਅਧਿਕਤਮ ਟਿਕਾਊਤਾ(ਉਤਪਾਦਨ ਲਈ ਸਿਫਾਰਸ਼ੀ):innodb_flush_log_at_trx_commit=1+sync_binlog=1। ਹਰ ਲੈਣ-ਦੇਣ ਨੂੰ ਸਵੀਕਾਰ ਕੀਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਡਿਸਕ 'ਤੇ ਰੀਡੋ ਲੌਗ ਅਤੇ ਬਾਈਨਰੀ ਲੌਗ 'ਤੇ ਫਲੱਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਕਰੈਸ਼ 'ਤੇ ਜ਼ੀਰੋ ਡਾਟਾ ਨੁਕਸਾਨ।
  • ਸੰਤੁਲਿਤ:innodb_flush_log_at_trx_commit=2+sync_binlog=1। ਰੀਡੋ ਲੌਗ ਨੂੰ ਪ੍ਰਤੀ ਕਮਿਟ OS ਕੈਸ਼ ਵਿੱਚ ਲਿਖਿਆ ਜਾਂਦਾ ਹੈ ਪਰ ਸਿਰਫ ਇੱਕ ਵਾਰ ਪ੍ਰਤੀ ਸਕਿੰਟ ਵਿੱਚ ਡਿਸਕ ਤੇ ਫਲੱਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। OS ਕਰੈਸ਼ ਹੋਣ 'ਤੇ 1 ਸਕਿੰਟ ਤੱਕ ਦਾ ਲੈਣ-ਦੇਣ ਖਤਮ ਹੋ ਸਕਦਾ ਹੈ (MySQL ਕਰੈਸ਼ ਅਜੇ ਵੀ ਸੁਰੱਖਿਅਤ ਹੈ)।
  • ਅਧਿਕਤਮ ਪ੍ਰਦਰਸ਼ਨ(ਉਤਪਾਦਨ ਲਈ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕੀਤਾ ਗਿਆ):innodb_flush_log_at_trx_commit=0+sync_binlog=0। ਲਿਖਤਾਂ ਨੂੰ ਸਮੇਂ-ਸਮੇਂ 'ਤੇ ਬੈਚ ਅਤੇ ਫਲੱਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਕਿਸੇ ਵੀ ਕਰੈਸ਼ 'ਤੇ ਲੈਣ-ਦੇਣ ਦੇ 1 ਸਕਿੰਟ ਤੱਕ ਗੁਆਉਣ ਦਾ ਜੋਖਮ।
[mysqld]
# Production durability settings
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_doublewrite = ON
innodb_checksum_algorithm = crc32

I/O ਸੰਰਚਨਾ

[mysqld]
# SSD-optimised I/O settings
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
innodb_open_files = 10000

ਕਨੈਕਸ਼ਨ ਅਤੇ ਥ੍ਰੈਡ ਪ੍ਰਬੰਧਨ

[mysqld]
max_connections = 500
max_connect_errors = 1000000
thread_cache_size = 64
table_open_cache = 4096
table_open_cache_instances = 16
back_log = 1500

# Thread pool (MySQL Enterprise or Percona)
thread_pool_size = 16
thread_pool_max_threads = 1000

ਅਸਥਾਈ ਟੇਬਲ ਅਤੇ ਕ੍ਰਮਬੱਧ ਬਫਰ

[mysqld]
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 2M

ਸੰਪੂਰਨ ਉਤਪਾਦਨ ਕੌਂਫਿਗਰੇਸ਼ਨ ਟੈਮਪਲੇਟ

[mysqld]
# Identity
server-id = 1
report_host = mysql-node-1

# GTID Replication
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW
log_bin = mysql-bin
binlog_expire_logs_seconds = 604800
log_slave_updates = ON
relay_log_recovery = ON

# InnoDB Engine
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_redo_log_capacity = 4G
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_doublewrite = ON
innodb_flush_method = O_DIRECT
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_file_per_table = ON
innodb_open_files = 10000
innodb_adaptive_hash_index = ON
innodb_change_buffering = all

# Connections
max_connections = 500
max_connect_errors = 1000000
thread_cache_size = 64
table_open_cache = 4096
table_open_cache_instances = 16
back_log = 1500

# Temp / Sort
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M

# Monitoring
performance_schema = ON
slow_query_log = ON
long_query_time = 1
log_queries_not_using_indexes = ON
log_throttle_queries_not_using_indexes = 60

# Security
local_infile = OFF
skip_name_resolve = ON
default_authentication_plugin = caching_sha2_password

# Group Replication (InnoDB Cluster)
plugin_load_add = 'group_replication.so'
plugin_load_add = 'mysql_clone.so'
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF
loose-group_replication_recovery_use_ssl = ON
loose-group_replication_ssl_mode = REQUIRED

ਫੇਲਓਵਰ ਟੈਸਟਿੰਗ ਅਤੇ ਕੈਓਸ ਇੰਜੀਨੀਅਰਿੰਗ

ਇੱਕ ਉੱਚ ਉਪਲਬਧਤਾ ਪ੍ਰਣਾਲੀ ਜਿਸਦੀ ਅਸਫਲਤਾ ਦੀਆਂ ਸਥਿਤੀਆਂ ਵਿੱਚ ਕਦੇ ਵੀ ਜਾਂਚ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ, ਅਸਲ ਵਿੱਚ ਉੱਚ ਉਪਲਬਧ ਨਹੀਂ ਹੈ - ਇਹ ਇੱਕ ਅਨੁਮਾਨ ਹੈ। ਫੇਲਓਵਰ ਟੈਸਟਿੰਗ ਤੁਹਾਡੇ ਨਿਯਮਤ ਸੰਚਾਲਨ ਕੈਡੈਂਸ ਦਾ ਹਿੱਸਾ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ, ਨਾ ਕਿ ਅਜਿਹੀ ਕੋਈ ਚੀਜ਼ ਜੋ ਤੁਸੀਂ ਖੋਜਦੇ ਹੋ (ਜਾਂ ਕੰਮ ਨਹੀਂ ਕਰਦੀ) ਅਸਲ ਘਟਨਾ ਦੇ ਦੌਰਾਨ।

ਨਿਯੰਤਰਿਤ ਫੇਲਓਵਰ ਟੈਸਟਿੰਗ

# Test 1: Graceful primary failover (InnoDB Cluster)
mysqlsh gradmin@mysql-node-1:3306
var cluster = dba.getCluster()
cluster.setPrimaryInstance('gradmin@mysql-node-2:3306')
# Verify: cluster.status() should show node-2 as PRIMARY

# Test 2: Simulate primary crash
# On the primary node:
kill -9 $(pidof mysqld)
# Monitor: watch the cluster elect a new primary
# Verify: applications reconnect via MySQL Router within seconds

# Test 3: Network partition simulation
# On the primary node, block Group Replication port:
iptables -A INPUT -p tcp --dport 33061 -j DROP
iptables -A OUTPUT -p tcp --dport 33061 -j DROP
# The isolated node should be expelled; cluster continues with remaining members
# Cleanup:
iptables -D INPUT -p tcp --dport 33061 -j DROP
iptables -D OUTPUT -p tcp --dport 33061 -j DROP

# Test 4: Kubernetes pod deletion
kubectl delete pod mysql-0 -n production --grace-period=0 --force
# The StatefulSet controller recreates the pod
# The operator rejoins it to the cluster

Litmus ਜਾਂ Chaos Mesh

ਨਾਲ ਕੈਓਸ ਇੰਜੀਨੀਅਰਿੰਗ

ਸਟ੍ਰਕਚਰਡ ਅਰਾਜਕਤਾ ਇੰਜੀਨੀਅਰਿੰਗ ਟੂਲ ਅਸਫਲਤਾਵਾਂ ਨੂੰ ਯੋਜਨਾਬੱਧ ਤਰੀਕੇ ਨਾਲ ਇੰਜੈਕਟ ਕਰਦੇ ਹਨ ਅਤੇ ਧਮਾਕੇ ਦੇ ਘੇਰੇ ਨੂੰ ਮਾਪਦੇ ਹਨ। ਕੈਓਸ ਮੇਸ਼, ਇੱਕ CNCF ਪ੍ਰੋਜੈਕਟ, Kubernetes ਨਾਲ ਮੂਲ ਰੂਪ ਵਿੱਚ ਏਕੀਕ੍ਰਿਤ ਹੈ।

# Chaos Mesh: Kill a MySQL pod randomly
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
  name: mysql-pod-kill
  namespace: production
spec:
  action: pod-kill
  mode: one
  selector:
    namespaces:
      - production
    labelSelectors:
      app.kubernetes.io/component: mysqld
  scheduler:
    cron: "0 */4 * * *"
---
# Chaos Mesh: Network delay between MySQL pods
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
  name: mysql-network-delay
  namespace: production
spec:
  action: delay
  mode: one
  selector:
    namespaces:
      - production
    labelSelectors:
      app.kubernetes.io/component: mysqld
  delay:
    latency: "200ms"
    jitter: "50ms"
  duration: "5m"
  scheduler:
    cron: "30 */6 * * *"
---
# Chaos Mesh: Disk I/O stress
apiVersion: chaos-mesh.org/v1alpha1
kind: IOChaos
metadata:
  name: mysql-io-latency
  namespace: production
spec:
  action: latency
  mode: one
  selector:
    namespaces:
      - production
    labelSelectors:
      app.kubernetes.io/component: mysqld
  volumePath: /var/lib/mysql
  path: '*'
  delay: '100ms'
  percent: 50
  duration: '5m'

ਫੇਲਓਵਰ ਟੈਸਟਾਂ ਦੌਰਾਨ ਕੀ ਮਾਪਣਾ ਹੈ

  • ਰਿਕਵਰੀ ਟਾਈਮ ਉਦੇਸ਼ (RTO)— ਅਸਫਲਤਾ ਦਾ ਪਤਾ ਲਗਾਉਣ ਤੋਂ ਸੇਵਾ ਬਹਾਲੀ ਤੱਕ ਕਿੰਨਾ ਸਮਾਂ? InnoDB ਕਲੱਸਟਰ ਆਮ ਤੌਰ 'ਤੇ 5-30 ਸਕਿੰਟ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ। Percona XtraDB ਕਲੱਸਟਰ ਤੇਜ਼ ਹੋ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਕੋਈ ਚੋਣ ਨਹੀਂ ਹੈ (ਸਾਰੇ ਨੋਡ ਲਿਖਣਯੋਗ ਹਨ)।
  • ਰਿਕਵਰੀ ਪੁਆਇੰਟ ਆਬਜੈਕਟਿਵ (RPO)— ਫੇਲਓਵਰ ਦੇ ਦੌਰਾਨ ਕਿੰਨਾ ਡਾਟਾ ਖਤਮ ਹੁੰਦਾ ਹੈ? ਸਮਕਾਲੀ ਪ੍ਰਤੀਕ੍ਰਿਤੀ (ਸਿੰਗਲ-ਪ੍ਰਾਇਮਰੀ ਮੋਡ ਵਿੱਚ ਸਮੂਹ ਪ੍ਰਤੀਕ੍ਰਿਤੀ, PXC) ਦੇ ਨਾਲ, ਪ੍ਰਤੀਬੱਧ ਟ੍ਰਾਂਜੈਕਸ਼ਨਾਂ ਲਈ ਆਰਪੀਓ ਜ਼ੀਰੋ ਹੈ। ਅਸਿੰਕ੍ਰੋਨਸ ਰੀਪਲੀਕੇਸ਼ਨ (ਕਲੱਸਟਰਸੈਟ ਕਰਾਸ-ਰੀਜਨ) ਦੇ ਨਾਲ, RPO ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੇ ਪਛੜ ਦੇ ਬਰਾਬਰ ਹੈ।
  • ਐਪਲੀਕੇਸ਼ਨ ਐਰਰ ਰੇਟ— ਫੇਲਓਵਰ ਵਿੰਡੋ ਦੇ ਦੌਰਾਨ ਕਿੰਨੀਆਂ ਐਪਲੀਕੇਸ਼ਨ ਬੇਨਤੀਆਂ ਅਸਫਲ ਹੁੰਦੀਆਂ ਹਨ? ਇਹ ਸਿਰਫ਼ ਡਾਟਾਬੇਸ ਫੇਲਓਵਰ ਦੀ ਹੀ ਨਹੀਂ ਪਰ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਕਨੈਕਸ਼ਨ ਦੀ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਤਰਕ ਅਤੇ MySQL ਰਾਊਟਰ ਦੀ ਰੀ-ਰੂਟਿੰਗ ਸਪੀਡ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ।
  • ਕਨੈਕਸ਼ਨ ਡਰੇਨ ਟਾਈਮ— ਪੁਰਾਣੇ ਪ੍ਰਾਇਮਰੀ ਦੇ ਮੌਜੂਦਾ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਨਵੇਂ ਪ੍ਰਾਇਮਰੀ ਨਾਲ ਨਿਕਾਸ ਅਤੇ ਮੁੜ ਕਨੈਕਟ ਹੋਣ ਵਿੱਚ ਕਿੰਨਾ ਸਮਾਂ ਲੱਗਦਾ ਹੈ?

ਰਨਬੁੱਕ: ਪ੍ਰਾਇਮਰੀ ਨੋਡ ਅਸਫਲਤਾ ਚੈੱਕਲਿਸਟ

  1. ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਕਲੱਸਟਰ ਨੇ ਇੱਕ ਨਵਾਂ ਪ੍ਰਾਇਮਰੀ ਚੁਣਿਆ ਹੈ:cluster.status()
  2. ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ MySQL ਰਾਊਟਰ ਨਵੇਂ ਪ੍ਰਾਇਮਰੀ ਲਈ ਰੂਟਿੰਗ ਕਰ ਰਿਹਾ ਹੈ: ਰਾਊਟਰ ਲੌਗ ਅਤੇ ਕਨੈਕਸ਼ਨ ਗਿਣਤੀ ਦੀ ਜਾਂਚ ਕਰੋ
  3. ਬਾਕੀ ਬਚੀਆਂ ਸੈਕੰਡਰੀ 'ਤੇ
  4. ਮਾਨੀਟਰ ਰੀਪਲੀਕੇਸ਼ਨ ਲੈਗ:SELECT * FROM performance_schema.replication_group_member_stats
  5. ਜੇਕਰ ਅਸਫਲ ਨੋਡ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਤਾਂ ਇਸ ਵਿੱਚ ਮੁੜ ਸ਼ਾਮਲ ਹੋਵੋ:cluster.rejoinInstance('gradmin@failed-node:3306')
  6. ਜੇਕਰ ਅਸਫਲ ਨੋਡ ਮੁੜ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਹਟਾਓ ਅਤੇ ਇੱਕ ਨਵਾਂ ਜੋੜੋ:cluster.removeInstance('gradmin@failed-node:3306', {force: true})
  7. ਕਲੱਸਟਰ ਹੈਲਥ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ: ਸਾਰੇ ਮੈਂਬਰ ਔਨਲਾਈਨ, ਕੋਈ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਗਲਤੀਆਂ ਨਹੀਂ, ਬੈਕਅੱਪ ਸਮਾਂ-ਸਾਰਣੀ ਬਰਕਰਾਰ
  8. ਆਪਣੀ ਸਮਰੱਥਾ ਯੋਜਨਾ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ: 2 ਨੋਡਾਂ ਨਾਲ ਚੱਲਣ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਜ਼ੀਰੋ ਨੁਕਸ ਸਹਿਣਸ਼ੀਲਤਾ ਹੈ ਜਦੋਂ ਤੱਕ ਤੀਜੀ ਨੂੰ ਬਹਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ

ਸੁਰੱਖਿਆ ਸਖਤੀ

ਉਤਪਾਦਨ MySQL ਤੈਨਾਤੀਆਂ ਨੂੰ ਬੁਨਿਆਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਤੋਂ ਪਰੇ ਕਈ ਸੁਰੱਖਿਆ ਚਿੰਤਾਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।

ਟ੍ਰਾਂਜ਼ਿਟ ਵਿੱਚ

ਇਨਕ੍ਰਿਪਸ਼ਨ ਅਤੇ ਬਾਕੀ

ਵਿੱਚ
[mysqld]
# TLS for client connections
ssl_ca = /etc/mysql/certs/ca.pem
ssl_cert = /etc/mysql/certs/server-cert.pem
ssl_key = /etc/mysql/certs/server-key.pem
require_secure_transport = ON
tls_version = TLSv1.3

# Encryption at rest (InnoDB tablespace encryption)
early-plugin-load = keyring_file.so
keyring_file_data = /var/lib/mysql-keyring/keyring
innodb_undo_log_encrypt = ON
innodb_redo_log_encrypt = ON
default_table_encryption = ON

Kubernetes ਰਾਜ਼ ਅਤੇ ਸੀਲਬੰਦ ਰਾਜ਼

# Never store database credentials in plain YAML
# Use Sealed Secrets or an external secret manager
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  name: mysql-root-credentials
  namespace: production
spec:
  encryptedData:
    rootUser: AgBy3i4OJSWK+PiTy...
    rootPassword: AgCtr7pJ2XQWK+Pi...
  template:
    metadata:
      name: mysql-root-credentials
      namespace: production
    type: Opaque

ਆਡਿਟ ਲੌਗਿੰਗ

[mysqld]
# MySQL Enterprise Audit (or Percona Audit Log plugin)
plugin-load-add = audit_log.so
audit_log_format = JSON
audit_log_policy = LOGINS
audit_log_rotate_on_size = 100M
audit_log_rotations = 10

ਫੈਸਲਾ ਮੈਟ੍ਰਿਕਸ: ਤੁਹਾਡਾ MySQL HA ਆਰਕੀਟੈਕਚਰ

ਚੁਣਨਾ

ਸਹੀ ਆਰਕੀਟੈਕਚਰ ਤੁਹਾਡੀਆਂ ਖਾਸ ਲੋੜਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। ਇੱਥੇ ਇੱਕ ਫੈਸਲੇ ਦਾ ਫਰੇਮਵਰਕ ਹੈ.

  • ਸਿੰਗਲ ਕਲਾਊਡ, ਪ੍ਰਬੰਧਿਤ ਤਰਜੀਹ, MySQL-ਅਨੁਕੂਲ— Aurora (AWS), ਫਲੈਕਸੀਬਲ ਸਰਵਰ ਬਿਜ਼ਨਸ ਕ੍ਰਿਟੀਕਲ (Azure), ਜਾਂ ਕਲਾਊਡ SQL ਐਂਟਰਪ੍ਰਾਈਜ਼ ਪਲੱਸ (GCP) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਸਭ ਤੋਂ ਘੱਟ ਕਾਰਜਸ਼ੀਲ ਓਵਰਹੈੱਡ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ।
  • ਸਿੰਗਲ ਕਲਾਉਡ, ਸਵੈ-ਪ੍ਰਬੰਧਿਤ, ਪੂਰੇ MySQL ਨਿਯੰਤਰਣ ਦੀ ਲੋੜ ਹੈ— ਕਲਾਉਡ-ਨੇਟਿਵ ਸਟੋਰੇਜ ਕਲਾਸਾਂ ਦੇ ਨਾਲ EKS/AKS/GKE 'ਤੇ MySQL ਓਪਰੇਟਰ ਜਾਂ ਪਰਕੋਨਾ ਓਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਮਲਟੀ-ਕਲਾਊਡ ਜਾਂ ਹਾਈਬ੍ਰਿਡ ਕਲਾਊਡ— PXC ਦੇ ਨਾਲ ਪਰਕੋਨਾ ਓਪਰੇਟਰ ਜਾਂ InnoDB ਕਲੱਸਟਰ ਦੇ ਨਾਲ MySQL ਓਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ। Kubernetes ਐਬਸਟਰੈਕਸ਼ਨ ਲੇਅਰ ਤੁਹਾਡੀ MySQL ਤੈਨਾਤੀ ਨੂੰ ਬੱਦਲਾਂ ਵਿੱਚ ਪੋਰਟੇਬਲ ਬਣਾਉਂਦੀ ਹੈ।
  • ਬੇਅਰ ਮੈਟਲ ਜਾਂ ਕਿਨਾਰਾ— ਰੈਂਚਰ, ਲੋਂਗਹੋਰਨ ਸਟੋਰੇਜ, ਮੈਟਲਐਲਬੀ, ਅਤੇ ਜਾਂ ਤਾਂ MySQL ਓਪਰੇਟਰ ਜਾਂ ਪਰਕੋਨਾ ਓਪਰੇਟਰ ਨਾਲ k3s ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਅਧਿਕਤਮ ਰਾਈਟ ਥ੍ਰੋਪੁੱਟ, ਬਹੁ-ਪ੍ਰਾਇਮਰੀ ਲੋੜੀਂਦਾ— ਪਰਕੋਨਾ ਓਪਰੇਟਰ ਦੇ ਨਾਲ ਪਰਕੋਨਾ ਐਕਸਟਰਾਡੀਬੀ ਕਲੱਸਟਰ (ਗੈਲੇਰਾ) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਸਾਰੇ ਨੋਡ ਸਮਕਾਲੀ ਪ੍ਰਮਾਣੀਕਰਣ ਦੇ ਨਾਲ ਲਿਖਤਾਂ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ।
  • ਤਬਾਹੀ ਰਿਕਵਰੀ ਦੇ ਨਾਲ ਗਲੋਬਲ ਵੰਡ— ਖੇਤਰਾਂ ਦੇ ਵਿਚਕਾਰ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੇ ਨਾਲ InnoDB ਕਲੱਸਟਰਸੈੱਟ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਸਥਾਨਕ ਲਿਖਤਾਂ ਦੇ ਲੇਟੈਂਸੀ ਲਾਭਾਂ ਲਈ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੇ ਆਰਪੀਓ ਟ੍ਰੇਡ-ਆਫ ਨੂੰ ਸਵੀਕਾਰ ਕਰੋ।
ਉਤਪਾਦਨ MySQL HAਲਈ

ਸੰਚਾਲਨ ਜਾਂਚ ਸੂਚੀ

ਆਪਣੀ MySQL HA ਤੈਨਾਤੀ ਉਤਪਾਦਨ-ਤਿਆਰ ਘੋਸ਼ਿਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਇਸ ਚੈੱਕਲਿਸਟ 'ਤੇ ਹਰ ਆਈਟਮ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ।

  1. ਕਲੱਸਟਰ ਹੈਲਥ— ਸਾਰੇ ਮੈਂਬਰ ਔਨਲਾਈਨ ਸਥਿਤੀ ਦੀ ਰਿਪੋਰਟ ਕਰਦੇ ਹਨ। ਗਰੁੱਪ ਰਿਪਲੀਕੇਸ਼ਨ ਕੋਈ ਗਲਤੀ ਨਹੀਂ ਦਿਖਾਉਂਦਾ।
  2. ਸਵੈਚਲਿਤ ਬੈਕਅੱਪ— ਕਰੋਨਜੌਬ ਜਾਂ ਓਪਰੇਟਰ-ਪ੍ਰਬੰਧਿਤ ਬੈਕਅੱਪ ਸਮਾਂ-ਸਾਰਣੀ 'ਤੇ ਚੱਲ ਰਹੇ ਹਨ। ਸਮੇਂ-ਸਮੇਂ 'ਤੇ ਰੀਸਟੋਰ ਟੈਸਟਾਂ ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਬੈਕਅੱਪ।
  3. ਨਿਗਰਾਨੀ— PMM ਜਾਂ Prometheus/Grafana MySQL ਮੈਟ੍ਰਿਕਸ ਇਕੱਤਰ ਕਰਨਾ। ਰੀਪਲੀਕੇਸ਼ਨ ਲੈਗ, ਕਨੈਕਸ਼ਨ ਸੰਤ੍ਰਿਪਤਾ, ਬਫਰ ਪੂਲ ਹਿੱਟ ਅਨੁਪਾਤ 99% ਤੋਂ ਹੇਠਾਂ, ਅਤੇ ਡਿਸਕ ਸਪੇਸ ਲਈ ਸੰਰਚਿਤ ਚੇਤਾਵਨੀਆਂ।
  4. ਫੇਲਓਵਰ ਟੈਸਟ ਕੀਤਾ ਗਿਆ— ਪ੍ਰਾਇਮਰੀ ਫੇਲਓਵਰ ਪਿਛਲੇ 30 ਦਿਨਾਂ ਦੇ ਅੰਦਰ ਟੈਸਟ ਕੀਤਾ ਗਿਆ। RTO ਅਤੇ RPO ਮਾਪਿਆ ਗਿਆ ਅਤੇ SLA ਟੀਚਿਆਂ ਦੇ ਅੰਦਰ।
  5. ਕਨੈਕਸ਼ਨ ਰੂਟਿੰਗ— MySQL ਰਾਊਟਰ ਜਾਂ ProxySQL ਸਿਹਤ-ਜਾਂਚ ਅਤੇ ਲੋਡ-ਸੰਤੁਲਿਤ। ਐਪਲੀਕੇਸ਼ਨ ਕਨੈਕਸ਼ਨ ਦੀਆਂ ਸਤਰਾਂ ਰਾਊਟਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀਆਂ ਹਨ, ਨਾ ਕਿ ਵਿਅਕਤੀਗਤ MySQL ਉਦਾਹਰਨਾਂ।
  6. ਸੁਰੱਖਿਆ— TLS ਸਾਰੇ ਕਨੈਕਸ਼ਨਾਂ ਲਈ ਲੋੜੀਂਦਾ ਹੈ। ਆਰਾਮ 'ਤੇ ਏਨਕ੍ਰਿਪਸ਼ਨ ਸਮਰਥਿਤ ਹੈ। ਇੱਕ ਗੁਪਤ ਮੈਨੇਜਰ ਵਿੱਚ ਸਟੋਰ ਕੀਤੇ ਪ੍ਰਮਾਣ ਪੱਤਰ। ਆਡਿਟ ਲਾਗਿੰਗ ਸਰਗਰਮ ਹੈ। ਹਰੇਕ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਸਭ ਤੋਂ ਘੱਟ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਵਾਲੇ ਡੇਟਾਬੇਸ ਉਪਭੋਗਤਾ।
  7. ਸਰੋਤ ਸੀਮਾਵਾਂ— Kubernetes ਸਰੋਤ ਬੇਨਤੀਆਂ ਅਤੇ ਸੀਮਾਵਾਂ ਉਚਿਤ ਤੌਰ 'ਤੇ ਸੈੱਟ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ। PodDisruptionBudgets ਜਗ੍ਹਾ ਵਿੱਚ ਹਨ। MySQL ਪੌਡਾਂ ਨੂੰ ਜ਼ੋਨਾਂ ਵਿੱਚ ਫੈਲਾਉਣ ਵਾਲਾ ਪੌਡ ਐਂਟੀ-ਐਫੀਨਿਟੀ।
  8. ਸਮਰੱਥਾ ਯੋਜਨਾ— 70% ਅਤੇ 85% 'ਤੇ ਅਲਰਟ ਦੇ ਨਾਲ ਸਟੋਰੇਜ ਉਪਯੋਗਤਾ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਗਈ। ਵਾਲੀਅਮ ਵਿਸਥਾਰ ਦੀ ਜਾਂਚ ਕੀਤੀ ਗਈ। ਵਰਟੀਕਲ ਅਤੇ ਹਰੀਜੱਟਲ ਸਕੇਲਿੰਗ ਪ੍ਰਕਿਰਿਆਵਾਂ ਦਾ ਦਸਤਾਵੇਜ਼ੀਕਰਨ ਕੀਤਾ ਗਿਆ ਹੈ।
  9. ਰਨਬੁੱਕਾਂ— ਪ੍ਰਾਇਮਰੀ ਫੇਲਓਵਰ, ਨੋਡ ਬਦਲਣ, ਬੈਕਅੱਪ ਰੀਸਟੋਰ, ਵਰਜ਼ਨ ਅੱਪਗਰੇਡ, ਅਤੇ ਐਮਰਜੈਂਸੀ ਰੀਡ-ਓਨਲੀ ਮੋਡ ਲਈ ਦਸਤਾਵੇਜ਼ੀ ਪ੍ਰਕਿਰਿਆਵਾਂ।
  10. ਅਰਾਜਕਤਾ ਟੈਸਟਿੰਗ— ਲਚਕੀਲੇਪਣ ਦੀਆਂ ਧਾਰਨਾਵਾਂ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਨਿਯਮਤ ਅਰਾਜਕਤਾ ਪ੍ਰਯੋਗ ਨਿਯਤ ਕੀਤੇ ਗਏ ਹਨ।

ਸਿੱਟਾ

MySQL ਉਤਪਾਦਨ ਵਿੱਚ ਉੱਚ ਉਪਲਬਧਤਾ ਇੱਕ ਸਿੰਗਲ ਟੈਕਨਾਲੋਜੀ ਵਿਕਲਪ ਨਹੀਂ ਹੈ - ਇਹ ਇੰਟਰਲਾਕਿੰਗ ਫੈਸਲਿਆਂ ਦੀ ਇੱਕ ਪ੍ਰਣਾਲੀ ਹੈ ਜੋ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਪਰਤ, ਆਰਕੈਸਟ੍ਰੇਸ਼ਨ ਪਲੇਟਫਾਰਮ, ਸਟੋਰੇਜ ਸਬ-ਸਿਸਟਮ, ਨਿਗਰਾਨੀ ਸਟੈਕ, ਅਤੇ ਉਹਨਾਂ ਦੇ ਆਲੇ ਦੁਆਲੇ ਸੰਚਾਲਨ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਫੈਲਾਉਂਦੀ ਹੈ। ਗਰੁੱਪ ਰਿਪਲੀਕੇਸ਼ਨ ਵਾਲਾ InnoDB ਕਲੱਸਟਰ ਫਾਊਂਡੇਸ਼ਨਲ HA ਮੁੱਢਲਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। Oracle ਅਤੇ Percona ਦੇ Kubernetes ਆਪਰੇਟਰ ਜੀਵਨ ਚੱਕਰ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਵੈਚਲਿਤ ਕਰਦੇ ਹਨ ਜੋ ਨਹੀਂ ਤਾਂ ਮਹੱਤਵਪੂਰਨ ਇੰਜੀਨੀਅਰਿੰਗ ਸਮੇਂ ਦੀ ਖਪਤ ਕਰਨਗੇ। ਸਹੂਲਤ ਲਈ ਕਲਾਉਡ ਪ੍ਰਬੰਧਿਤ ਸੇਵਾਵਾਂ ਵਪਾਰ ਨਿਯੰਤਰਣ। k3s, Rancher, ਅਤੇ Longhorn ਦੇ ਨਾਲ ਬੇਅਰ ਮੈਟਲ ਤੈਨਾਤੀਆਂ ਸਾਬਤ ਕਰਦੀਆਂ ਹਨ ਕਿ ਤੁਹਾਨੂੰ ਉਤਪਾਦਨ-ਗ੍ਰੇਡ MySQL HA ਨੂੰ ਚਲਾਉਣ ਲਈ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।

ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਸਮਝ ਇਹ ਹੈ ਕਿ ਉੱਚ ਉਪਲਬਧਤਾ ਪੂਰੇ ਸਿਸਟਮ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ, ਨਾ ਕਿ ਸਿਰਫ਼ ਡੇਟਾਬੇਸ। ਇਸ ਵਿੱਚ ਇਹ ਸ਼ਾਮਲ ਹੈ ਕਿ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਕਨੈਕਸ਼ਨ ਅਸਫਲਤਾਵਾਂ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦੀ ਹੈ, ਤੁਹਾਡੀ ਪ੍ਰੌਕਸੀ ਲੇਅਰ ਅਸਫਲ ਨੋਡਾਂ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਕਿਵੇਂ ਖੋਜਦੀ ਹੈ ਅਤੇ ਕਿਵੇਂ ਰੂਟ ਕਰਦੀ ਹੈ, ਉਪਭੋਗਤਾਵਾਂ ਦੇ ਧਿਆਨ ਵਿੱਚ ਆਉਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ ਕਿਵੇਂ ਚੇਤਾਵਨੀ ਦਿੰਦੀ ਹੈ, ਤੁਹਾਡੀ ਬੈਕਅਪ ਰਣਨੀਤੀ ਉਹਨਾਂ ਸਥਿਤੀਆਂ ਤੋਂ ਰਿਕਵਰੀ ਨੂੰ ਕਿਵੇਂ ਸਮਰੱਥ ਬਣਾਉਂਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਨੂੰ HA ਇਕੱਲੇ ਨਹੀਂ ਸੰਭਾਲ ਸਕਦਾ, ਅਤੇ ਤੁਹਾਡੀ ਟੀਮ ਫੇਲਓਵਰ ਪ੍ਰਕਿਰਿਆਵਾਂ ਦਾ ਅਭਿਆਸ ਕਿਵੇਂ ਕਰਦੀ ਹੈ ਤਾਂ ਜੋ ਉਹ ਇੱਕ ਅਸਲ ਘਟਨਾ ਦੇ ਤਣਾਅ ਵਿੱਚ ਸਾਫ਼-ਸੁਥਰੇ ਢੰਗ ਨਾਲ ਲਾਗੂ ਕਰੇ।

ਇਸ ਨੂੰ ਜਾਣਬੁੱਝ ਕੇ ਬਣਾਓ, ਨਿਯਮਿਤ ਤੌਰ 'ਤੇ ਇਸ ਦੀ ਜਾਂਚ ਕਰੋ, ਅਤੇ ਆਪਣੀਆਂ ਰਨਬੁੱਕਾਂ ਨੂੰ ਜੀਵਿਤ ਦਸਤਾਵੇਜ਼ਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਵਰਤੋ ਜੋ ਹਰ ਘਟਨਾ ਅਤੇ ਹਰ ਹਫੜਾ-ਦਫੜੀ ਦੇ ਪ੍ਰਯੋਗ ਨਾਲ ਵਿਕਸਤ ਹੁੰਦੇ ਹਨ। ਇਸ ਤਰ੍ਹਾਂ MySQL ਉਤਪਾਦਨ ਵਿੱਚ ਇੱਕ ਭਰੋਸੇਮੰਦ, ਉੱਚ ਉਪਲਬਧ ਡਾਟਾ ਪਲੇਟਫਾਰਮ ਵਜੋਂ ਆਪਣੀ ਥਾਂ ਕਮਾਉਂਦਾ ਹੈ।