गैलेरा क्लस्टर 4.0 को पहली बार मारियाडीबी 10.4 के हिस्से के रूप में जारी किया गया था और इस संस्करण के रिलीज में कई महत्वपूर्ण सुधार हैं। इस रिलीज़ में सबसे प्रभावशाली विशेषता स्ट्रीमिंग प्रतिकृति है जिसे निम्नलिखित समस्याओं को संभालने के लिए डिज़ाइन किया गया है।
- लंबे लेन-देन में समस्याएं
- बड़े लेन-देन में समस्याएं
- टेबल में हॉट-स्पॉट की समस्या
पिछले ब्लॉग में, हमने दो-भाग श्रृंखला ब्लॉग (भाग 1 और भाग 2) में नई स्ट्रीमिंग प्रतिकृति सुविधा के बारे में गहराई से जाना। गैलेरा 4.0 में इस नई सुविधा का एक हिस्सा नई सिस्टम टेबल हैं जो गैलेरा क्लस्टर नोड्स को क्वेरी करने और जांचने के लिए बहुत उपयोगी हैं और साथ ही स्ट्रीमिंग प्रतिकृति में संसाधित किए गए लॉग भी हैं।
पिछले ब्लॉगों में भी, हमने आपको AWS पर MySQL गैलेरा क्लस्टर को परिनियोजित करने का आसान तरीका और Amazon AWS EC2 पर MySQL गैलेरा क्लस्टर 4.0 को परिनियोजित करने का तरीका भी दिखाया था।
Percona ने अपने Percona XtraDB क्लस्टर (PXC) 8.0 के लिए GA जारी नहीं किया है, फिर भी कुछ विशेषताएं अभी भी विकास के अधीन हैं, जैसे MySQL wsrep फ़ंक्शन WSREP_SYNC_WAIT_UPTO_GTID जो अभी तक मौजूद नहीं है (कम से कम पीएक्ससी 8.0.15-5-27dev.4.2 संस्करण पर)। फिर भी, जब पीएक्ससी 8.0 जारी किया जाएगा, तो यह बेहतरीन सुविधाओं से भरा होगा जैसे...
- बेहतर लचीला क्लस्टर
- क्लाउड फ्रेंडली क्लस्टर
- बेहतर पैकेजिंग
- एन्क्रिप्शन समर्थन
- परमाणु DDL
जब तक हम पीएक्ससी 8.0 जीए के रिलीज होने की प्रतीक्षा कर रहे हैं, हम इस ब्लॉग में कवर करेंगे कि आप मारियाडीबी का उपयोग करके गैलेरा क्लस्टर 4.0 के लिए अमेज़ॅन एडब्ल्यूएस पर एक हॉट स्टैंडबाय नोड कैसे बना सकते हैं।
हॉट स्टैंडबाय क्या है?
एक हॉट स्टैंडबाय कंप्यूटिंग में एक सामान्य शब्द है, विशेष रूप से अत्यधिक वितरित सिस्टम पर। यह अतिरेक के लिए एक विधि है जिसमें एक प्रणाली एक समान प्राथमिक प्रणाली के साथ एक साथ चलती है। जब प्राथमिक नोड पर विफलता होती है, तो हॉट स्टैंडबाय तुरंत प्राथमिक सिस्टम को बदल देता है। डेटा वास्तविक समय में दोनों प्रणालियों के लिए प्रतिबिंबित होता है।
डेटाबेस सिस्टम के लिए, एक हॉट स्टैंडबाय सर्वर आमतौर पर प्राथमिक मास्टर के बाद दूसरा नोड होता है जो शक्तिशाली संसाधनों (मास्टर के समान) पर चल रहा होता है। यह द्वितीयक नोड ठीक से कार्य करने के लिए प्राथमिक मास्टर की तरह स्थिर होना चाहिए।
यदि मास्टर नोड या पूरा क्लस्टर नीचे चला जाता है तो यह डेटा रिकवरी नोड के रूप में भी कार्य करता है। हॉट स्टैंडबाय नोड क्लाइंट की मांग को लगातार पूरा करते हुए विफल नोड या क्लस्टर को बदल देगा।
गैलेरा क्लस्टर में, क्लस्टर के सभी सर्वर एक स्टैंडबाय नोड के रूप में काम कर सकते हैं। हालांकि, अगर क्षेत्र या पूरा क्लस्टर नीचे चला जाता है, तो आप इससे कैसे निपट पाएंगे? अपने क्लस्टर के विशिष्ट क्षेत्र या नेटवर्क के बाहर एक स्टैंडबाय नोड बनाना यहां एक विकल्प है।
निम्न अनुभाग में, हम आपको दिखाएंगे कि MariaDB का उपयोग करके AWS EC2 पर एक स्टैंडबाय नोड कैसे बनाया जाता है।
अमेज़ॅन एडब्ल्यूएस पर एक हॉट स्टैंडबाय तैनात करना
पहले, हमने आपको दिखाया है कि आप AWS पर गैलेरा क्लस्टर कैसे बना सकते हैं। यदि आप गैलेरा 4.0 में नए हैं तो आप अमेज़ॅन एडब्ल्यूएस ईसी 2 पर MySQL गैलेरा क्लस्टर 4.0 को तैनात करना पढ़ना चाहेंगे।
अपने हॉट स्टैंडबाय नोड को तैनात करना गैलेरा क्लस्टर के दूसरे सेट पर हो सकता है जो सिंक्रोनस प्रतिकृति का उपयोग करता है (रिले नोड का उपयोग करके MySQL गैलेरा क्लस्टर के साथ इस ब्लॉग जीरो डाउनटाइम नेटवर्क माइग्रेशन की जांच करें) या एसिंक्रोनस MySQL/MariaDB नोड को तैनात करके . इस ब्लॉग में, हम गैलेरा नोड्स में से एक से एसिंक्रोनस रूप से प्रतिकृति करने वाले हॉट स्टैंडबाय नोड को सेटअप और तैनात करेंगे।
गैलेरा क्लस्टर सेटअप
इस नमूना सेटअप में, हमने मारियाडीबी 10.4.8 संस्करण का उपयोग करके 3-नोड क्लस्टर तैनात किया है। यह क्लस्टर यूएस ईस्ट (ओहियो) क्षेत्र के अंतर्गत तैनात किया जा रहा है और टोपोलॉजी नीचे दिखाया गया है:
हम अपने एसिंक्रोनस स्लेव के लिए मास्टर के रूप में 172.31.26.175 सर्वर का उपयोग करेंगे जो स्टैंडबाय नोड के रूप में काम करेगा।
हॉट स्टैंडबाय नोड के लिए अपना EC2 इंस्टेंस सेट करना
एडब्ल्यूएस कंसोल में, कंप्यूट सेक्शन के तहत मिले ईसी2 पर जाएं और नीचे की तरह ईसी2 इंस्टेंस बनाने के लिए लॉन्च इंस्टेंस पर क्लिक करें।
हम इस उदाहरण को यूएस वेस्ट (ओरेगन) क्षेत्र के अंतर्गत बनाएंगे। अपने ओएस प्रकार के लिए, आप चुन सकते हैं कि आपको कौन सा सर्वर पसंद है (मुझे उबंटू 18.04 पसंद है) और अपने पसंदीदा लक्ष्य प्रकार के आधार पर इंस्टेंस का प्रकार चुनें। इस उदाहरण के लिए मैं t2.micro का उपयोग करूंगा क्योंकि इसके लिए किसी परिष्कृत सेटअप की आवश्यकता नहीं है और यह केवल इस नमूना परिनियोजन के लिए है।
जैसा कि हमने पहले उल्लेख किया है कि यह सबसे अच्छा है कि आपका हॉट स्टैंडबाय नोड एक अलग क्षेत्र पर स्थित हो और न कि एक ही क्षेत्र के भीतर हो। इसलिए यदि क्षेत्रीय डेटा केंद्र नीचे चला जाता है या नेटवर्क आउटेज का शिकार होता है, तो चीजें खराब होने पर आपका हॉट स्टैंडबाय आपका फेलओवर लक्ष्य हो सकता है।
आगे बढ़ने से पहले, AWS में, विभिन्न क्षेत्रों का अपना वर्चुअल प्राइवेट क्लाउड (VPC) और अपना नेटवर्क होगा। गैलेरा क्लस्टर नोड्स के साथ संवाद करने के लिए, हमें पहले एक वीपीसी पीयरिंग को परिभाषित करना होगा ताकि नोड्स अमेज़ॅन इंफ्रास्ट्रक्चर के भीतर संचार कर सकें और नेटवर्क से बाहर जाने की आवश्यकता न हो जो केवल ओवरहेड और सुरक्षा चिंताओं को जोड़ता है।
सबसे पहले, अपने वीपीसी पर जाएं जहां से आपका हॉट स्टैंडबाय नोड रहेगा, फिर पीयरिंग कनेक्शन्स पर जाएं। फिर आपको अपने स्टैंडबाय नोड के वीपीसी और गैलेरा क्लस्टर वीपीसी को निर्दिष्ट करने की आवश्यकता है। नीचे दिए गए उदाहरण में, मेरे पास us-west-2, us-east-2 को इंटरकनेक्ट कर रहा है।
एक बार बन जाने के बाद, आपको अपने पीयरिंग कनेक्शंस के अंतर्गत एक प्रविष्टि दिखाई देगी। हालाँकि, आपको गैलेरा क्लस्टर VPC से अनुरोध स्वीकार करने की आवश्यकता है, जो इस उदाहरण में us-east-2 पर है। नीचे देखें,
एक बार स्वीकार कर लेने के बाद, CIDR को रूटिंग टेबल में जोड़ना न भूलें। यह बाहरी ब्लॉग VPC Peering देखें कि VPC Peering के बाद इसे कैसे किया जाए।
अब, वापस चलते हैं और EC2 नोड बनाना जारी रखते हैं। सुनिश्चित करें कि आपके सुरक्षा समूह के पास सही नियम या आवश्यक पोर्ट हैं जिन्हें खोलने की आवश्यकता है। इसके बारे में अधिक जानकारी के लिए फ़ायरवॉल सेटिंग्स मैनुअल की जाँच करें। इस सेटअप के लिए, मैंने अभी-अभी सभी ट्रैफ़िक को स्वीकार करने के लिए सेट किया है क्योंकि यह केवल एक परीक्षण है। नीचे देखें,
सुनिश्चित करें कि अपना उदाहरण बनाते समय, आपने सही VPC सेट किया है और आपने आपके उचित सबनेट को परिभाषित किया है। अगर आपको इसके बारे में कुछ मदद चाहिए तो आप इस ब्लॉग को देख सकते हैं।
MariaDB Async स्लेव सेट करना
एक कदम
सबसे पहले हमें रिपॉजिटरी को सेटअप करना होगा, रेपो कीज को जोड़ना होगा और रिपोजिटरी कैश में पैकेज लिस्ट को अपडेट करना होगा,
$ vi /etc/apt/sources.list.d/mariadb.list
$ apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ apt update
दूसरा चरण
MariaDB पैकेज और इसके आवश्यक बायनेरिज़ स्थापित करें
$ apt-get install mariadb-backup mariadb-client mariadb-client-10.4 libmariadb3 libdbd-mysql-perl mariadb-client-core-10.4 mariadb-common mariadb-server-10.4 mariadb-server-core-10.4 mysql-common
तीसरा चरण
अब, हमारे गैलेरा क्लस्टर में किसी एक नोड से फ़ाइलों को नेटवर्क में स्थानांतरित करने के लिए xbstream का उपयोग करके बैकअप लेते हैं।
## अपने हॉट स्टैंडबाय नोड में नए स्थापित MySQL के डेटादिर को मिटा दें।
$ systemctl stop mariadb
$ rm -rf /var/lib/mysql/*
## फिर हॉट स्टैंडबाय नोड पर, इसे टर्मिनल पर चलाएं,
$ socat -u tcp-listen:9999,reuseaddr stdout 2>/tmp/netcat.log | mbstream -x -C /var/lib/mysql
## फिर लक्ष्य मास्टर पर, यानी आपके गैलेरा क्लस्टर में नोड्स में से एक (जो इस उदाहरण में नोड 172.31.28.175 है), इसे टर्मिनल पर चलाएं,
$ mariabackup --backup --target-dir=/tmp --stream=xbstream | socat - TCP4:172.32.31.2:9999
जहां 172.32.31.2 होस्ट स्टैंडबाय नोड का आईपी है।
चरण चार
अपनी MySQL कॉन्फ़िगरेशन फ़ाइल तैयार करें। चूंकि यह उबंटू में है, मैं फ़ाइल को /etc/mysql/my.cnf में संपादित कर रहा हूं और निम्न नमूने my.cnf को हमारे क्लस्टरकंट्रोल टेम्पलेट से लिया गया है,
[MYSQLD]
user=mysql
basedir=/usr/
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid_file=/var/lib/mysql/mysql.pid
port=3306
log_error=/var/log/mysql/mysqld.log
log_warnings=2
# log_output = FILE
#Slow logging
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=2
slow_query_log=OFF
log_queries_not_using_indexes=OFF
### INNODB OPTIONS
innodb_buffer_pool_size=245M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
innodb_data_file_path = ibdata1:100M:autoextend
## You may want to tune the below depending on number of cores and disk sub
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_doublewrite=1
innodb_log_file_size=64M
innodb_log_buffer_size=16M
innodb_buffer_pool_instances=1
innodb_log_files_in_group=2
innodb_thread_concurrency=0
# innodb_file_format = barracuda
innodb_flush_method = O_DIRECT
innodb_rollback_on_timeout=ON
# innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode=2
## avoid statistics update when doing e.g show tables
innodb_stats_on_metadata=0
default_storage_engine=innodb
# CHARACTER SET
# collation_server = utf8_unicode_ci
# init_connect = 'SET NAMES utf8'
# character_set_server = utf8
# REPLICATION SPECIFIC
server_id=1002
binlog_format=ROW
log_bin=binlog
log_slave_updates=1
relay_log=relay-bin
expire_logs_days=7
read_only=ON
report_host=172.31.29.72
gtid_ignore_duplicates=ON
gtid_strict_mode=ON
# OTHER THINGS, BUFFERS ETC
key_buffer_size = 24M
tmp_table_size = 64M
max_heap_table_size = 64M
max_allowed_packet = 512M
# sort_buffer_size = 256K
# read_buffer_size = 256K
# read_rnd_buffer_size = 512K
# myisam_sort_buffer_size = 8M
skip_name_resolve
memlock=0
sysdate_is_now=1
max_connections=500
thread_cache_size=512
query_cache_type = 0
query_cache_size = 0
table_open_cache=1024
lower_case_table_names=0
# 5.6 backwards compatibility (FIXME)
# explicit_defaults_for_timestamp = 1
performance_schema = OFF
performance-schema-max-mutex-classes = 0
performance-schema-max-mutex-instances = 0
[MYSQL]
socket=/var/lib/mysql/mysql.sock
# default_character_set = utf8
[client]
socket=/var/lib/mysql/mysql.sock
# default_character_set = utf8
[mysqldump]
socket=/var/lib/mysql/mysql.sock
max_allowed_packet = 512M
# default_character_set = utf8
[xtrabackup]
[MYSQLD_SAFE]
# log_error = /var/log/mysqld.log
basedir=/usr/
# datadir = /var/lib/mysql
बेशक, आप इसे अपने सेटअप और आवश्यकताओं के अनुसार बदल सकते हैं।
पांचवां चरण
चरण #3 से बैकअप तैयार करें यानी नीचे दिए गए आदेश को चलाकर बैकअप तैयार करें जो अब हॉट स्टैंडबाय नोड में है,
$ mariabackup --prepare --target-dir=/var/lib/mysql
छठा चरण
डेटादिर के स्वामित्व को हॉट स्टैंडबाय नोड में सेट करें,
$ chown -R mysql.mysql /var/lib/mysql
सातवां चरण
अब, मारियाडीबी इंस्टेंस शुरू करें
$ systemctl start mariadb
आठवां चरण
आखिरकार, हमें एसिंक्रोनस प्रतिकृति सेटअप करने की आवश्यकता है,
## मास्टर नोड, यानी गैलेरा क्लस्टर में नोड पर प्रतिकृति उपयोगकर्ता बनाएं
MariaDB [(none)]> CREATE USER 'cmon_replication'@'172.32.31.2' IDENTIFIED BY 'PahqTuS1uRIWYKIN';
Query OK, 0 rows affected (0.866 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'cmon_replication'@'172.32.31.2';
Query OK, 0 rows affected (0.127 sec)
## xtrabackup_binlog_info से GTID स्लेव स्थिति इस प्रकार प्राप्त करें,
$ cat /var/lib/mysql/xtrabackup_binlog_info
binlog.000002 71131632 1000-1000-120454
## फिर स्लेव प्रतिकृति को निम्नानुसार सेटअप करें,
MariaDB [(none)]> SET GLOBAL gtid_slave_pos='1000-1000-120454';
Query OK, 0 rows affected (0.053 sec)
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.31.28.175', MASTER_USER='cmon_replication', master_password='PahqTuS1uRIWYKIN', MASTER_USE_GTID = slave_pos;
## अब, गुलाम की स्थिति जांचें,
MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.31.28.175
Master_User: cmon_replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 256
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1000
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 1000-1000-120454
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.000 sec)
ClusterControl में अपना हॉट स्टैंडबाय नोड जोड़ना
यदि आप ClusterControl का उपयोग कर रहे हैं, तो अपने डेटाबेस सर्वर के स्वास्थ्य की निगरानी करना आसान है। इसे एक गुलाम के रूप में जोड़ने के लिए, आपके पास गैलेरा नोड क्लस्टर का चयन करें, फिर चयन बटन पर जाएं जैसा कि नीचे दिखाया गया है प्रतिकृति दास जोड़ें:
प्रतिकृति स्लेव जोड़ें पर क्लिक करें और नीचे की तरह मौजूदा स्लेव को जोड़ना चुनें,पी>
हमारी टोपोलॉजी आशाजनक दिखती है।
जैसा कि आप देख सकते हैं, हमारा नोड 172.32.31.2 हमारे हॉट स्टैंडबाय के रूप में कार्य कर रहा है नोड में एक अलग CIDR है जो 172.32% us-west-2 (ओरेगन) के रूप में उपसर्ग करता है जबकि अन्य नोड 172.31% us-east-2 (ओहियो) पर स्थित हैं। वे पूरी तरह से अलग-अलग क्षेत्रों में हैं, इसलिए यदि आपके गैलेरा नोड्स पर नेटवर्क विफलता होती है, तो आप अपने हॉट स्टैंडबाय नोड को विफल कर सकते हैं।
निष्कर्ष
अमेज़ॅन एडब्ल्यूएस पर हॉट स्टैंडबाय बनाना आसान और सीधा है। आपको केवल अपनी क्षमता आवश्यकताओं और अपनी नेटवर्किंग टोपोलॉजी, सुरक्षा और प्रोटोकॉल को निर्धारित करने की आवश्यकता है, जिन्हें सेटअप करने की आवश्यकता है।
VPC Peering का उपयोग सार्वजनिक इंटरनेट पर जाए बिना विभिन्न क्षेत्रों के बीच अंतर-संचार को गति देने में मदद करता है, इसलिए कनेक्शन Amazon नेटवर्क के बुनियादी ढांचे के भीतर रहता है।
बेशक, एक दास के साथ अतुल्यकालिक प्रतिकृति का उपयोग करना पर्याप्त नहीं है, लेकिन यह ब्लॉग इस आधार के रूप में कार्य करता है कि आप इसे कैसे शुरू कर सकते हैं। अब आप आसानी से एक और क्लस्टर बना सकते हैं जहां एसिंक्रोनस स्लेव प्रतिकृति कर रहा है और आपके डिजास्टर रिकवरी नोड्स के रूप में काम करने वाले गैलेरा क्लस्टर्स की एक और श्रृंखला बना सकता है, या आप गैलेरा में gmcast.segment वैरिएबल का उपयोग सिंक्रोनस रूप से दोहराने के लिए भी कर सकते हैं जैसे हमारे पास इस ब्लॉग पर है।