नेक्स्टक्लाउड एक ओपन सोर्स फाइल सिंक और शेयर एप्लिकेशन है जो मुफ्त, सुरक्षित और आसानी से सुलभ क्लाउड फाइल स्टोरेज के साथ-साथ इसके फीचर सेट का विस्तार करने वाले कई टूल प्रदान करता है। यह लोकप्रिय ड्रॉपबॉक्स, आईक्लाउड और गूगल ड्राइव के समान है लेकिन ड्रॉपबॉक्स के विपरीत, नेक्स्टक्लाउड ऑफ-प्रिमाइसेस फाइल स्टोरेज होस्टिंग की पेशकश नहीं करता है।
इस ब्लॉग पोस्ट में, हम एक उच्च-उपलब्ध सेटअप परिनियोजित करने जा रहे हैं हमारे निजी "ड्रॉपबॉक्स" बुनियादी ढांचे के लिए नेक्स्टक्लाउड, ग्लस्टरएफएस, पेरकोना एक्स्ट्राडीबी क्लस्टर (माईएसक्यूएल गैलेरा क्लस्टर) का उपयोग करते हुए, प्रॉक्सीएसक्यूएल क्लस्टरकंट्रोल के साथ डेटाबेस को प्रबंधित और मॉनिटर करने और बैलेंसर स्तरों को लोड करने के लिए स्वचालन उपकरण के रूप में।
ध्यान दें:आप MariaDB क्लस्टर का भी उपयोग कर सकते हैं, जो Percona XtraDB क्लस्टर के समान अंतर्निहित प्रतिकृति लाइब्रेरी का उपयोग करता है। लोड बैलेंसर के नजरिए से, ProxySQL MaxScale के समान व्यवहार करता है जिसमें यह SQL ट्रैफ़िक को समझ सकता है और ट्रैफ़िक को कैसे रूट किया जाता है, इस पर बारीक नियंत्रण रखता है।
Nexcloud के लिए डेटाबेस आर्किटेक्चर
इस ब्लॉग पोस्ट में, हमने कुल 6 नोड्स का उपयोग किया है।
- 2 x प्रॉक्सी सर्वर
- 3 x डेटाबेस + एप्लिकेशन सर्वर
- 1 x नियंत्रक सर्वर (ClusterControl)
निम्नलिखित आरेख हमारे अंतिम सेटअप को दर्शाता है:
Percona XtraDB क्लस्टर के लिए, एक ठोस के लिए न्यूनतम 3 नोड्स की आवश्यकता होती है मल्टी-मास्टर प्रतिकृति। नेक्स्टक्लाउड एप्लिकेशन डेटाबेस सर्वर के भीतर सह-स्थित होते हैं, इस प्रकार GlusterFS को उन होस्ट पर भी कॉन्फ़िगर करना पड़ता है।
लोड बैलेंसर टियर में अतिरेक उद्देश्यों के लिए 2 नोड होते हैं। हम डेटाबेस टियर और लोड बैलेंसर टियर को तैनात करने के लिए ClusterControl का उपयोग करेंगे। सभी सर्वर CentOS 7 पर प्रत्येक नोड पर निम्नलिखित /etc/hosts परिभाषा के साथ चल रहे हैं:
192.168.0.21 nextcloud1 db1
192.168.0.22 nextcloud2 db2
192.168.0.23 nextcloud3 db3
192.168.0.10 vip db
192.168.0.11 proxy1 lb1 proxysql1
192.168.0.12 proxy2 lb2 proxysql2
ध्यान दें कि GlusterFS और MySQL अत्यधिक गहन प्रक्रियाएं हैं। यदि आप इस सेटअप का पालन कर रहे हैं (GlusterFS और MySQL एक ही सर्वर में रहते हैं), तो सुनिश्चित करें कि आपके पास सर्वर के लिए अच्छे हार्डवेयर स्पेक्स हैं।
नेक्स्टक्लाउड डेटाबेस परिनियोजन
हम ClusterControl का उपयोग करके अपने तीन-नोड Percona XtraDB क्लस्टर के लिए डेटाबेस परिनियोजन के साथ शुरू करेंगे। ClusterControl स्थापित करें और फिर सभी नोड्स के लिए पासवर्ड रहित SSH सेटअप करें जिन्हें ClusterControl (3 PXC + 2 प्रॉक्सी) द्वारा प्रबंधित किया जा रहा है। ClusterControl नोड पर, करें:
$ whoami
root
$ ssh-copy-id 192.168.0.11
$ ssh-copy-id 192.168.0.12
$ ssh-copy-id 192.168.0.21
$ ssh-copy-id 192.168.0.22
$ ssh-copy-id 192.168.0.23
**संकेत दिए जाने पर संबंधित होस्ट के लिए रूट पासवर्ड दर्ज करें।
एक वेब ब्राउज़र खोलें और https://{ClusterControl-IP-address}/clustercontrol पर जाएं और एक सुपर यूजर बनाएं। इसके बाद डिप्लॉय -> मायएसक्यूएल गैलेरा पर जाएं। तदनुसार परिनियोजन विज़ार्ड का पालन करें। दूसरे चरण में 'MySQL सर्वर को परिभाषित करें', Percona XtraDB 5.7 चुनें और प्रत्येक डेटाबेस नोड के लिए IP पता निर्दिष्ट करें। सुनिश्चित करें कि डेटाबेस नोड विवरण दर्ज करने के बाद आपको हरे रंग की टिक मिलती है, जैसा कि नीचे दिखाया गया है:
परिनियोजन प्रारंभ करने के लिए "तैनाती" पर क्लिक करें। डेटाबेस क्लस्टर 15-20 मिनट में तैयार हो जाएगा। आप गतिविधि -> नौकरियां -> क्लस्टर बनाएं -> पूर्ण नौकरी विवरण पर परिनियोजन प्रगति का अनुसरण कर सकते हैं। एक बार परिनियोजित होने के बाद क्लस्टर को डेटाबेस क्लस्टर डैशबोर्ड के अंतर्गत सूचीबद्ध किया जाएगा।
अब हम डेटाबेस लोड बैलेंसर परिनियोजन के लिए आगे बढ़ सकते हैं।
नेक्स्टक्लाउड डेटाबेस लोड बैलेंसर परिनियोजन
नेक्स्टक्लाउड को एकल-लेखक सेटअप पर चलाने की अनुशंसा की जाती है, जहां एक समय में एक मास्टर द्वारा लेखन को संसाधित किया जाएगा, और रीड को अन्य नोड्स में वितरित किया जा सकता है। हम इस कॉन्फ़िगरेशन को प्राप्त करने के लिए ProxySQL 2.0 का उपयोग कर सकते हैं क्योंकि यह लेखन प्रश्नों को एकल मास्टर तक रूट कर सकता है।
ProxySQL परिनियोजित करने के लिए, क्लस्टर क्रियाएँ> लोड बैलेंसर जोड़ें> ProxySQL> ProxySQL परिनियोजित करें पर क्लिक करें। लाल तीरों द्वारा हाइलाइट की गई आवश्यक जानकारी दर्ज करें:
ऊपर दिए गए तीरों द्वारा हाइलाइट किए गए सभी आवश्यक विवरण भरें। सर्वर का पता lb1 सर्वर, 192.168.0.11 है। इसके अलावा, हम ProxySQL व्यवस्थापक और उपयोगकर्ताओं के पासवर्ड की निगरानी निर्दिष्ट करते हैं। फिर सभी MySQL सर्वरों को लोड बैलेंसिंग सेट में शामिल करें और फिर लागू लेनदेन अनुभाग में "नहीं" चुनें। परिनियोजन प्रारंभ करने के लिए "प्रॉक्सीएसक्यूएल परिनियोजित करें" पर क्लिक करें।
द्वितीयक लोड बैलेंसर, lb2 के लिए ऊपर दिए गए चरणों को दोहराएं (लेकिन "सर्वर पता" को lb2 के आईपी पते में बदलें)। अन्यथा, हमारे पास इस परत में कोई अतिरेक नहीं होगा।
हमारे प्रॉक्सीएसक्यूएल नोड्स अब गैलेरा क्लस्टर के लिए दो होस्ट समूहों के साथ स्थापित और कॉन्फ़िगर किए गए हैं। सिंगल-मास्टर ग्रुप (होस्टग्रुप 10) के लिए एक, जहां सभी कनेक्शन एक गैलेरा नोड (यह मल्टी-मास्टर डेडलॉक्स को रोकने के लिए उपयोगी है) और मल्टी-मास्टर ग्रुप (होस्टग्रुप 20) को सभी रीड-ओनली वर्कलोड के लिए अग्रेषित किया जाएगा। सभी बैकएंड MySQL सर्वरों के लिए संतुलित होगा।
इसके बाद, हमें अपने प्रॉक्सीएसक्यूएल नोड्स के लिए एक एकल समापन बिंदु प्रदान करने के लिए एक वर्चुअल आईपी एड्रेस को तैनात करने की आवश्यकता है ताकि आपके एप्लिकेशन को दो अलग-अलग प्रॉक्सीएसक्यूएल होस्ट को परिभाषित करने की आवश्यकता न हो। यह स्वचालित विफलता क्षमता भी प्रदान करेगा क्योंकि प्राथमिक प्रॉक्सीएसक्यूएल नोड में कुछ गलत होने की स्थिति में वर्चुअल आईपी पते को बैकअप प्रॉक्सीएसक्यूएल नोड द्वारा ले लिया जाएगा।
ClusterControl पर जाएँ -> मैनेज करें -> बैलेंसर्स लोड करें -> Keepalived -> Keepalived तैनात करें। लोड बैलेंसर प्रकार के रूप में "ProxySQL" चुनें और ड्रॉपडाउन से दो अलग ProxySQL सर्वर चुनें। फिर वर्चुअल आईपी पता और साथ ही नेटवर्क इंटरफ़ेस निर्दिष्ट करें जिसे वह सुनेगा, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
एक बार परिनियोजन पूरा हो जाने पर, आपको क्लस्टर के सारांश बार पर निम्नलिखित विवरण देखना चाहिए:
अंत में, ClusterControl पर जाकर हमारे एप्लिकेशन के लिए एक नया डेटाबेस बनाएं -> प्रबंधित करें -> स्कीमा और उपयोगकर्ता -> डेटाबेस बनाएं और "नेक्स्टक्लाउड" निर्दिष्ट करें। ClusterControl इस डेटाबेस को प्रत्येक गैलेरा नोड पर बनाएगा। हमारा लोड बैलेंसर टियर अब पूरा हो गया है।
नेक्स्टक्लाउड के लिए GlusterFS परिनियोजन
जब तक अन्यथा निर्दिष्ट न हो, निम्नलिखित चरणों को nextcloud1, nextcloud2, nextcloud3 पर निष्पादित किया जाना चाहिए।
एक कदम
GlusterFS संग्रहण के लिए इसे अलग रखने की अनुशंसा की जाती है, इसलिए हम /dev/sdb के अंतर्गत अतिरिक्त डिस्क जोड़ने और एक नया विभाजन बनाने जा रहे हैं:
$ fdisk /dev/sdb
निम्न कुंजी दबाकर fdisk विभाजन निर्माण विज़ार्ड का पालन करें:
n > p > Enter > Enter > Enter > w
दूसरा चरण
सत्यापित करें कि क्या /dev/sdb1 बनाया गया है:
$ fdisk -l /dev/sdb1
Disk /dev/sdb1: 8588 MB, 8588886016 bytes, 16775168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
चरण तीन
XFS के साथ विभाजन को प्रारूपित करें:
$ mkfs.xfs /dev/sdb1
चरण चार
विभाजन को /भंडारण/ईंट के रूप में माउंट करें:
$ mkdir /glusterfs
$ mount /dev/sdb1 /glusterfs
सत्यापित करें कि सभी नोड्स में निम्न लेआउट है:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
└─sda1 8:1 0 40G 0 part /
sdb 8:16 0 8G 0 disk
└─sdb1 8:17 0 8G 0 part /glusterfs
पांचवां चरण
ईंट अंडर /glusterfs नामक एक उपनिर्देशिका बनाएं:
$ mkdir /glusterfs/brick
छठा चरण
एप्लिकेशन अतिरेक के लिए, हम मेजबानों के बीच फ़ाइल प्रतिकृति के लिए GlusterFS का उपयोग कर सकते हैं। सबसे पहले, CentOS के लिए GlusterFS रिपॉजिटरी स्थापित करें:
$ yum install centos-release-gluster -y
$ yum install epel-release -y
सातवां चरण
GlusterFS सर्वर स्थापित करें
$ yum install glusterfs-server -y
आठवां चरण
सक्षम करें और ग्लस्टर डेमॉन प्रारंभ करें:
$ systemctl enable glusterd
$ systemctl start glusterd
नौवां चरण
नेक्स्टक्लाउड1 पर, अन्य नोड्स की जांच करें:
(nextcloud1)$ gluster peer probe 192.168.0.22
(nextcloud1)$ gluster peer probe 192.168.0.23
आप निम्न आदेश के साथ सहकर्मी की स्थिति सत्यापित कर सकते हैं:
(nextcloud1)$ gluster peer status
Number of Peers: 2
Hostname: 192.168.0.22
Uuid: f9d2928a-6b64-455a-9e0e-654a1ebbc320
State: Peer in Cluster (Connected)
Hostname: 192.168.0.23
Uuid: 100b7778-459d-4c48-9ea8-bb8fe33d9493
State: Peer in Cluster (Connected)
चरण दस
नेक्स्टक्लाउड1 पर, जांचे गए नोड्स पर एक प्रतिरूपित वॉल्यूम बनाएं:
(nextcloud1)$ gluster volume create rep-volume replica 3 192.168.0.21:/glusterfs/brick 192.168.0.22:/glusterfs/brick 192.168.0.23:/glusterfs/brick
volume create: rep-volume: success: please start the volume to access data
चरण ग्यारह
अगलेक्लाउड1 पर दोहराए गए वॉल्यूम को प्रारंभ करें:
(nextcloud1)$ gluster volume start rep-volume
volume start: rep-volume: success
सत्यापित करें कि दोहराए गए वॉल्यूम और प्रक्रियाएं ऑनलाइन हैं:
$ gluster volume status
Status of volume: rep-volume
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick 192.168.0.21:/glusterfs/brick 49152 0 Y 32570
Brick 192.168.0.22:/glusterfs/brick 49152 0 Y 27175
Brick 192.168.0.23:/glusterfs/brick 49152 0 Y 25799
Self-heal Daemon on localhost N/A N/A Y 32591
Self-heal Daemon on 192.168.0.22 N/A N/A Y 27196
Self-heal Daemon on 192.168.0.23 N/A N/A Y 25820
Task Status of Volume rep-volume
------------------------------------------------------------------------------
There are no active volume tasks
बारहवां चरण
प्रतिकृति वॉल्यूम को /var/www/html पर माउंट करें। निर्देशिका बनाएं:
$ mkdir -p /var/www/html
तेरहवां चरण
13) ऑटो-माउंट की अनुमति देने के लिए /etc/fstab में निम्न पंक्ति जोड़ें:
/dev/sdb1 /glusterfs xfs defaults,defaults 0 0
localhost:/rep-volume /var/www/html glusterfs defaults,_netdev 0 0
चौदहवां चरण
GlusterFS को /var/www/html पर माउंट करें:
$ mount -a
और इसके साथ सत्यापित करें:
$ mount | grep gluster
/dev/sdb1 on /glusterfs type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
localhost:/rep-volume on /var/www/html type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
प्रतिरूपित आयतन अब तैयार है और प्रत्येक नोड में आरोहित है। अब हम एप्लिकेशन को परिनियोजित करने के लिए आगे बढ़ सकते हैं।
नेक्स्टक्लाउड एप्लिकेशन परिनियोजन
जब तक अन्यथा निर्दिष्ट न हो, निम्नलिखित चरणों को nextcloud1, nextcloud2 और nextcloud3 पर निष्पादित किया जाना चाहिए।
नेक्स्टक्लाउड को PHP 7.2 और बाद के संस्करण की आवश्यकता है और CentOS वितरण के लिए, हमें स्थापना प्रक्रिया को सरल बनाने के लिए EPEL और Remi जैसे कई रिपॉजिटरी को सक्षम करना होगा।
एक कदम
यदि SELinux सक्षम है, तो पहले इसे अक्षम करें:
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
आप इस गाइड का पालन करके नेक्स्टक्लाउड को SELinux सक्षम करके भी चला सकते हैं।
दूसरा चरण
नेक्स्टक्लाउड आवश्यकताएं स्थापित करें और PHP 7.2 के लिए रेमी रिपॉजिटरी को सक्षम करें:
$ yum install -y epel-release yum-utils unzip curl wget bash-completion policycoreutils-python mlocate bzip2
$ yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum-config-manager --enable remi-php72
चरण तीन
नेक्स्टक्लाउड निर्भरताएं स्थापित करें, ज्यादातर अपाचे और PHP 7.2 संबंधित पैकेज:
$ yum install -y httpd php72-php php72-php-gd php72-php-intl php72-php-mbstring php72-php-mysqlnd php72-php-opcache php72-php-pecl-redis php72-php-pecl-apcu php72-php-pecl-imagick php72-php-xml php72-php-pecl-zip
चरण चार
अपाचे सक्षम करें और इसे प्रारंभ करें:
$ systemctl enable httpd.service
$ systemctl start httpd.service
पांचवां चरण
PHP 7.2 बाइनरी का उपयोग करने के लिए PHP के लिए एक प्रतीकात्मक लिंक बनाएं:
$ ln -sf /bin/php72 /bin/php
छठा चरण
नेक्स्टक्लाउड1 पर नेक्स्टक्लाउड सर्वर को यहां से डाउनलोड करें और इसे एक्सट्रेक्ट करें:
$ wget https://download.nextcloud.com/server/releases/nextcloud-17.0.0.zip
$ unzip nextcloud*
सातवां चरण
नेक्स्टक्लाउड1 पर, निर्देशिका को /var/www/html में कॉपी करें और सही स्वामित्व प्रदान करें:
$ cp -Rf nextcloud /var/www/html
$ chown -Rf apache:apache /var/www/html
**ध्यान दें कि /var/www/html में कॉपी करने की प्रक्रिया में GlusterFS वॉल्यूम प्रतिकृति के कारण कुछ समय लगने वाला है।
आठवां चरण
इंस्टालेशन विजार्ड खोलने के लिए आगे बढ़ने से पहले, हमें "ENFORCING" (डिफ़ॉल्ट मान) के अलावा pxc_strict_mode चर को अक्षम करना होगा। यह इस तथ्य के कारण है कि नेक्स्टक्लाउड डेटाबेस आयात में प्राथमिक कुंजी परिभाषित किए बिना कई तालिकाएँ होंगी जिन्हें गैलेरा क्लस्टर पर चलाने की अनुशंसा नहीं की जाती है। इसे आगे के विवरण में ट्यूनिंग अनुभाग के तहत और नीचे समझाया गया है।
ClusterControl के साथ कॉन्फ़िगरेशन बदलने के लिए, बस प्रबंधित करें -> कॉन्फ़िगरेशन -> पैरामीटर बदलें/सेट करें पर जाएं:
सूची से सभी डेटाबेस उदाहरण चुनें, और दर्ज करें:
- समूह:MYSQLD
- पैरामीटर:pxc_strict_mode
- नया मान:PERMISSIVE
ClusterControl प्रत्येक डेटाबेस नोड पर स्वचालित रूप से आवश्यक परिवर्तन करेगा। यदि रनटाइम के दौरान मान बदला जा सकता है, तो यह तुरंत प्रभावी होगा। ClusterControl दृढ़ता के लिए MySQL कॉन्फ़िगरेशन फ़ाइल के अंदर मान को भी कॉन्फ़िगर करता है। आपको निम्न परिणाम देखना चाहिए:
नौवां चरण
अब हम अपने नेक्स्टक्लाउड इंस्टॉलेशन को कॉन्फ़िगर करने के लिए तैयार हैं। ब्राउज़र खोलें और http://192.168.0.21/nextcloud/ पर nextcloud1 के HTTP सर्वर पर जाएं और आपको निम्नलिखित कॉन्फ़िगरेशन विज़ार्ड के साथ प्रस्तुत किया जाएगा:
निम्न मान के साथ "संग्रहण और डेटाबेस" अनुभाग कॉन्फ़िगर करें:पी>
- डेटा फ़ोल्डर:/var/www/html/nextcloud/data
- डेटाबेस कॉन्फ़िगर करें:MySQL/MariaDB
- उपयोगकर्ता नाम:नेक्स्टक्लाउड
- पासवर्ड:(उपयोगकर्ता नेक्स्टक्लाउड के लिए पासवर्ड)
- डेटाबेस:नेक्स्टक्लाउड
- होस्ट:192.168.0.10:6603 (प्रॉक्सीएसक्यूएल पोर्ट के साथ वर्चुअल आईपी एड्रेस)
कॉन्फ़िगरेशन प्रक्रिया शुरू करने के लिए "सेटअप समाप्त करें" पर क्लिक करें। इसके समाप्त होने तक प्रतीक्षा करें और आपको उपयोगकर्ता "व्यवस्थापक" के लिए नेक्स्टक्लाउड डैशबोर्ड पर पुनः निर्देशित किया जाएगा। स्थापना अब पूर्ण हो गई है। अगला भाग गैलेरा क्लस्टर के साथ कुशलतापूर्वक चलाने के लिए कुछ ट्यूनिंग युक्तियाँ प्रदान करता है।
नेक्स्टक्लाउड डेटाबेस ट्यूनिंग
प्राथमिक कुंजी
गैलेरा क्लस्टर राइट-सेट प्रतिकृति के लिए प्रत्येक टेबल पर प्राथमिक कुंजी रखना महत्वपूर्ण है। प्राथमिक कुंजी के बिना अपेक्षाकृत बड़ी तालिका के लिए, बड़े अपडेट या डिलीट ट्रांजैक्शन आपके क्लस्टर को बहुत लंबे समय तक पूरी तरह से ब्लॉक कर देगा। किसी भी तरह की विचित्रता और बढ़त के मामलों से बचने के लिए, बस यह सुनिश्चित करें कि सभी टेबल एक स्पष्ट प्राथमिक कुंजी के साथ InnoDB स्टोरेज इंजन का उपयोग कर रहे हैं (अद्वितीय कुंजी की गणना नहीं की जाती है)।
नेक्स्टक्लाउड की डिफ़ॉल्ट स्थापना निर्दिष्ट डेटाबेस के तहत तालिकाओं का एक समूह बनाएगी और उनमें से कुछ इस नियम का पालन नहीं करती हैं। यह जांचने के लिए कि टेबल गैलेरा के साथ संगत हैं या नहीं, हम निम्नलिखित कथन चला सकते हैं:
mysql> SELECT DISTINCT CONCAT(t.table_schema,'.',t.table_name) as tbl, t.engine, IF(ISNULL(c.constraint_name),'NOPK','') AS nopk, IF(s.index_type = 'FULLTEXT','FULLTEXT','') as ftidx, IF(s.index_type = 'SPATIAL','SPATIAL','') as gisidx FROM information_schema.tables AS t LEFT JOIN information_schema.key_column_usage AS c ON (t.table_schema = c.constraint_schema AND t.table_name = c.table_name AND c.constraint_name = 'PRIMARY') LEFT JOIN information_schema.statistics AS s ON (t.table_schema = s.table_schema AND t.table_name = s.table_name AND s.index_type IN ('FULLTEXT','SPATIAL')) WHERE t.table_schema NOT IN ('information_schema','performance_schema','mysql') AND t.table_type = 'BASE TABLE' AND (t.engine <> 'InnoDB' OR c.constraint_name IS NULL OR s.index_type IN ('FULLTEXT','SPATIAL')) ORDER BY t.table_schema,t.table_name;
+---------------------------------------+--------+------+-------+--------+
| tbl | engine | nopk | ftidx | gisidx |
+---------------------------------------+--------+------+-------+--------+
| nextcloud.oc_collres_accesscache | InnoDB | NOPK | | |
| nextcloud.oc_collres_resources | InnoDB | NOPK | | |
| nextcloud.oc_comments_read_markers | InnoDB | NOPK | | |
| nextcloud.oc_federated_reshares | InnoDB | NOPK | | |
| nextcloud.oc_filecache_extended | InnoDB | NOPK | | |
| nextcloud.oc_notifications_pushtokens | InnoDB | NOPK | | |
| nextcloud.oc_systemtag_object_mapping | InnoDB | NOPK | | |
+---------------------------------------+--------+------+-------+--------+
उपरोक्त आउटपुट से पता चलता है कि 7 टेबल हैं जिनमें प्राथमिक कुंजी परिभाषित नहीं है। उपरोक्त को ठीक करने के लिए, बस ऑटो-इन्क्रीमेंट कॉलम के साथ एक प्राथमिक कुंजी जोड़ें। डेटाबेस सर्वरों में से किसी एक पर निम्न कमांड चलाएँ, उदाहरण के लिए nexcloud1:
(nextcloud1)$ mysql -uroot -p
mysql> ALTER TABLE nextcloud.oc_collres_accesscache ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_collres_resources ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_comments_read_markers ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_federated_reshares ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_filecache_extended ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_notifications_pushtokens ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
mysql> ALTER TABLE nextcloud.oc_systemtag_object_mapping ADD COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
उपरोक्त संशोधनों को लागू करने के बाद, हम pxc_strict_mode को अनुशंसित मान "ENFORCING" पर पुन:कॉन्फ़िगर कर सकते हैं। चरण #8 को "एप्लिकेशन परिनियोजन" अनुभाग के अंतर्गत संबंधित मान के साथ दोहराएं।
रीड-कमिटेड आइसोलेशन लेवल
नेक्स्टक्लाउड की सलाह के अनुसार अनुशंसित लेनदेन अलगाव स्तर रीड-कमिटेड का उपयोग करना है, जबकि गैलेरा क्लस्टर सख्त रिपीटेबल-रीड आइसोलेशन स्तर के लिए डिफ़ॉल्ट है। READ-COMMITTED का उपयोग उच्च लोड परिदृश्यों के तहत डेटा हानि से बच सकता है (उदाहरण के लिए कई क्लाइंट/उपयोगकर्ताओं के साथ सिंक क्लाइंट का उपयोग करके और कई समानांतर संचालन)।
लेन-देन के स्तर को संशोधित करने के लिए, ClusterControl पर जाएं -> प्रबंधित करें -> कॉन्फ़िगरेशन -> पैरामीटर बदलें/सेट करें और निम्नलिखित निर्दिष्ट करें:
"आगे बढ़ें" पर क्लिक करें और ClusterControl कॉन्फ़िगरेशन परिवर्तन तुरंत लागू कर देगा। कोई डेटाबेस पुनरारंभ करने की आवश्यकता नहीं है।
मल्टी-इंस्टेंस नेक्स्टक्लाउड
चूंकि हमने URL को एक्सेस करते समय नेक्स्टक्लाउड1 पर इंस्टालेशन किया था, इसलिए यह आईपी एड्रेस नेक्स्टक्लाउड के अंदर 'ट्रस्टेड_डोमेन्स' वेरिएबल में स्वतः जुड़ जाता है। जब आपने अन्य सर्वरों तक पहुँचने का प्रयास किया, उदाहरण के लिए द्वितीयक सर्वर, http://192.168.0.22/nextcloud, तो आपको एक त्रुटि दिखाई देगी कि यह होस्ट अधिकृत नहीं है और इसे Trusted_domain चर में जोड़ा जाना चाहिए।
इसलिए, नीचे दिए गए उदाहरण के रूप में /var/www/html/nextcloud/config/config.php के अंदर "trusted_domain" सरणी के अंतर्गत सभी होस्ट IP पता जोड़ें:
'trusted_domains' =>
array (
0 => '192.168.0.21',
1 => '192.168.0.22',
2 => '192.168.0.23'
),
उपरोक्त कॉन्फ़िगरेशन उपयोगकर्ताओं को निम्नलिखित URL के माध्यम से सभी तीन एप्लिकेशन सर्वर तक पहुंचने की अनुमति देता है:
- http://192.168.0.21/nextcloud (nextcloud1)
- http://192.168.0.22/nextcloud (nextcloud2)
- http://192.168.0.23/nextcloud (nextcloud3)
नोट:आप HAProxy या nginx जैसे बाजार में उपलब्ध HTTP रिवर्स प्रॉक्सी का उपयोग करके एप्लिकेशन टियर के लिए उच्च उपलब्धता प्राप्त करने के लिए इन तीन नेक्स्टक्लाउड उदाहरणों के शीर्ष पर एक लोड बैलेंसर टियर जोड़ सकते हैं। यह इस ब्लॉग पोस्ट के दायरे से बाहर है।
फ़ाइल लॉक करने के लिए Redis का उपयोग करना
नेक्स्टक्लाउड का ट्रांजेक्शनल फाइल लॉकिंग मैकेनिज्म सामान्य ऑपरेशन के दौरान फाइल करप्शन से बचने के लिए फाइलों को लॉक कर देता है। ट्रांजेक्शनल फाइल लॉकिंग (यह डिफ़ॉल्ट रूप से सक्षम है) का ध्यान रखने के लिए रेडिस को स्थापित करने की सिफारिश की गई है जो इस भारी काम को संभालने से डेटाबेस क्लस्टर को बंद कर देगा।
Redis स्थापित करने के लिए, बस:
$ yum install -y redis
$ systemctl enable redis.service
$ systemctl start redis.service
निम्न पंक्तियों को /var/www/html/nextcloud/config/config.php के अंदर जोड़ें:
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '192.168.0.21',
'port' => 6379,
'timeout' => 0.0,
),
अधिक विवरण के लिए, इस दस्तावेज़ीकरण को देखें, लेन-देन संबंधी फ़ाइल लॉकिंग।
निष्कर्ष
नेक्स्टक्लाउड को आपकी निजी फ़ाइल साझाकरण मांगों को पूरा करने के लिए एक स्केलेबल और अत्यधिक उपलब्ध फ़ाइल-होस्टिंग सेवा के रूप में कॉन्फ़िगर किया जा सकता है। इस ब्लॉग में, हमने दिखाया कि आप नेक्स्टक्लाउड, फाइल सिस्टम और डेटाबेस लेयर्स में रिडंडेंसी कैसे ला सकते हैं।