MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

वितरित डेटाबेस उच्च उपलब्धता के लिए ClusterControl CMON HA - भाग दो (GUI एक्सेस सेटअप)

पहले भाग में, हमने एक काम कर रहे cmon HA क्लस्टर के साथ समाप्त किया:

[email protected]:~# s9s controller --list --long

S VERSION    OWNER GROUP NAME            IP PORT COMMENT

l 1.7.4.3565 system admins 10.0.0.101      10.0.0.101 9501 Acting as leader.

f 1.7.4.3565 system admins 10.0.0.102      10.0.0.102 9501 Accepting heartbeats.

f 1.7.4.3565 system admins 10.0.0.103      10.0.0.103 9501 Accepting heartbeats.

Total: 3 controller(s)

हमारे पास तीन नोड ऊपर और चल रहे हैं, एक नेता के रूप में कार्य कर रहा है और शेष अनुयायी हैं, जो पहुंच योग्य हैं (वे दिल की धड़कन प्राप्त करते हैं और उनका जवाब देते हैं)। शेष चुनौती यूआई एक्सेस को इस तरह से कॉन्फ़िगर करना है जो हमें लीडर नोड पर यूआई को हमेशा एक्सेस करने की अनुमति देगा। इस ब्लॉग पोस्ट में हम संभावित समाधानों में से एक प्रस्तुत करेंगे जो आपको इसे पूरा करने की अनुमति देगा।

HAProxy सेट अप करना

यह समस्या हमारे लिए नई नहीं है। प्रत्येक प्रतिकृति क्लस्टर, MySQL या PostgreSQL के साथ, इससे कोई फर्क नहीं पड़ता, एक एकल नोड है जहां हमें अपना लेखन भेजना चाहिए। इसे पूरा करने का एक तरीका यह होगा कि HAProxy का उपयोग किया जाए और कुछ बाहरी जाँचों को जोड़ा जाए जो नोड की स्थिति का परीक्षण करते हैं, और उसके आधार पर, उचित मान लौटाते हैं। यह मूल रूप से हम अपनी समस्या को हल करने के लिए उपयोग करने जा रहे हैं। हम HAProxy को एक अच्छी तरह से परीक्षण की गई परत 4 प्रॉक्सी के रूप में उपयोग करेंगे और हम इसे परत 7 HTTP जांच के साथ जोड़ देंगे जिसे हम अपने उपयोग के मामले के लिए ठीक से लिखेंगे। सबसे पहले चीज़ें, आइए HAProxy स्थापित करें। हम इसे ClusterControl के साथ जोड़ेंगे, लेकिन इसे एक अलग नोड पर भी स्थापित किया जा सकता है (आदर्श रूप से, नोड्स - विफलता के एकल बिंदु के रूप में HAProxy को हटाने के लिए)।

apt install haproxy

यह HAProxy को सेट करता है। एक बार यह हो जाने के बाद, हमें अपना कॉन्फ़िगरेशन प्रस्तुत करना होगा:

global

        pidfile /var/run/haproxy.pid

        daemon

        user haproxy

        group haproxy

        stats socket /var/run/haproxy.socket user haproxy group haproxy mode 600 level admin

        node haproxy_10.0.0.101

        description haproxy server



        #* Performance Tuning

        maxconn 8192

        spread-checks 3

        quiet

defaults

        #log    global

        mode    tcp

        option  dontlognull

        option tcp-smart-accept

        option tcp-smart-connect

        #option dontlog-normal

        retries 3

        option redispatch

        maxconn 8192

        timeout check   10s

        timeout queue   3500ms

        timeout connect 3500ms

        timeout client  10800s

        timeout server  10800s



userlist STATSUSERS

        group admin users admin

        user admin insecure-password admin

        user stats insecure-password admin



listen admin_page

        bind *:9600

        mode http

        stats enable

        stats refresh 60s

        stats uri /

        acl AuthOkay_ReadOnly http_auth(STATSUSERS)

        acl AuthOkay_Admin http_auth_group(STATSUSERS) admin

        stats http-request auth realm admin_page unless AuthOkay_ReadOnly

        #stats admin if AuthOkay_Admin



listen  haproxy_10.0.0.101_81

        bind *:81

        mode tcp

        tcp-check connect port 80

        timeout client  10800s

        timeout server  10800s

        balance leastconn

        option httpchk

#        option allbackups

        default-server port 9201 inter 20s downinter 30s rise 2 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100

        server 10.0.0.101 10.0.0.101:443 check

        server 10.0.0.102 10.0.0.102:443 check

        server 10.0.0.103 10.0.0.103:443 check

आप यहां कुछ चीजों को बदलना चाह सकते हैं जैसे कि नोड या बैकएंड नाम जिसमें हमारे नोड का आईपी शामिल है। आप निश्चित रूप से उन सर्वरों को बदलना चाहेंगे जिन्हें आप अपने HAProxy में शामिल करने जा रहे हैं।

सबसे महत्वपूर्ण बिट्स हैं:

        bind *:81

HAProxy पोर्ट 81 पर सुनेगा।

        option httpchk

हमने बैकएंड नोड्स पर परत 7 जांच सक्षम की है।

        default-server port 9201 inter 20s downinter 30s rise 2 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100

लेयर 7 चेक पोर्ट 9201 पर निष्पादित किया जाएगा।

एक बार यह हो जाने के बाद, HAProxy शुरू करें।

xinetd और चेक स्क्रिप्ट सेट करना

हम xinetd का उपयोग चेक को निष्पादित करने और HAProxy को सही प्रतिक्रिया देने के लिए करने जा रहे हैं। इस पैराग्राफ में वर्णित चरणों को सभी सीमोन HA क्लस्टर नोड्स पर निष्पादित किया जाना चाहिए।

सबसे पहले, xinetd इंस्टॉल करें:

[email protected]:~# apt install xinetd

एक बार यह हो जाने के बाद, हमें निम्नलिखित पंक्ति जोड़नी होगी:

cmonhachk       9201/tcp

to /etc/services - यह xinetd को एक सेवा खोलने की अनुमति देगा जो पोर्ट 9201 पर सुनेगी। फिर हमें सेवा फ़ाइल को ही जोड़ना होगा। यह /etc/xinetd.d/cmonhachk में स्थित होना चाहिए:

# default: on

# description: cmonhachk

service cmonhachk

{

        flags           = REUSE

        socket_type     = stream

        port            = 9201

        wait            = no

        user            = root

        server          = /usr/local/sbin/cmonhachk.py

        log_on_failure  += USERID

        disable         = no

        #only_from       = 0.0.0.0/0

        only_from       = 0.0.0.0/0

        per_source      = UNLIMITED

}

आखिरकार, हमें उस चेक स्क्रिप्ट की आवश्यकता है जिसे xinetd कहते हैं। जैसा कि सेवा फ़ाइल में परिभाषित किया गया है, यह /usr/local/sbin/cmonhachk.py में स्थित है।

#!/usr/bin/python3.5



import subprocess

import re

import sys

from pathlib import Path

import os



def ret_leader():

    leader_str = """HTTP/1.1 200 OK\r\n

Content-Type: text/html\r\n

Content-Length: 48\r\n

\r\n

<html><body>This node is a leader.</body></html>\r\n

\r\n"""

    print(leader_str)



def ret_follower():

    follower_str = """

HTTP/1.1 503 Service Unavailable\r\n

Content-Type: text/html\r\n

Content-Length: 50\r\n

\r\n

<html><body>This node is a follower.</body></html>\r\n

\r\n"""

    print(follower_str)



def ret_unknown():

    unknown_str = """

HTTP/1.1 503 Service Unavailable\r\n

Content-Type: text/html\r\n

Content-Length: 59\r\n

\r\n

<html><body>This node is in an unknown state.</body></html>\r\n

\r\n"""

    print(unknown_str)



lockfile = "/tmp/cmonhachk_lockfile"



if os.path.exists(lockfile):

    print("Lock file {} exists, exiting...".format(lockfile))

    sys.exit(1)



Path(lockfile).touch()

try:

    with open("/etc/default/cmon", 'r') as f:

        lines  = f.readlines()



    pattern1 = "RPC_BIND_ADDRESSES"

    pattern2 = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

    m1 = re.compile(pattern1)

    m2 = re.compile(pattern2)



    for line in lines:

        res1 = m1.match(line)

        if res1 is not None:

            res2 = m2.findall(line)

            i = 0

            for r in res2:

                if r != "127.0.0.1" and i == 0:

                    i += 1

                    hostname = r



    command = "s9s controller --list --long | grep {}".format(hostname)

    output = subprocess.check_output(command.split())

    state = output.splitlines()[1].decode('UTF-8')[0]

    if state == "l":

        ret_leader()

    if state == "f":

        ret_follower()

    else:

        ret_unknown()

finally:

    os.remove(lockfile)

एक बार फ़ाइल बनाने के बाद, सुनिश्चित करें कि यह निष्पादन योग्य है:

chmod u+x /usr/local/sbin/cmonhachk.py

इस स्क्रिप्ट के पीछे का विचार यह है कि यह "s9s कंट्रोलर --list --long" कमांड का उपयोग करके नोड्स की स्थिति का परीक्षण करता है और फिर यह आईपी से संबंधित आउटपुट की जांच करता है जो इसे पर मिल सकता है स्थानीय नोड। यह स्क्रिप्ट को यह निर्धारित करने की अनुमति देता है कि जिस होस्ट पर इसे निष्पादित किया गया है वह एक नेता है या नहीं। यदि नोड प्रमुख है, तो स्क्रिप्ट "HTTP/1.1 200 OK" कोड लौटाती है, जिसे HAProxy नोड के उपलब्ध होने के रूप में व्याख्या करता है और इसके लिए ट्रैफ़िक को रूट करता है। अन्यथा यह "HTTP / 1.1 503 सेवा अनुपलब्ध" लौटाता है, जिसे माना जाता है एक नोड, जो स्वस्थ नहीं है और वहां यातायात को रूट नहीं किया जाएगा। नतीजतन, कोई फर्क नहीं पड़ता कि कौन सा नोड नेता बन जाएगा, HAProxy इसका पता लगाएगा और इसे बैकएंड में उपलब्ध के रूप में चिह्नित करेगा:

कॉन्फ़िगरेशन परिवर्तन लागू करने से पहले आपको HAProxy और xinetd को पुनरारंभ करना पड़ सकता है। पुर्जे सही ढंग से काम करना शुरू कर देंगे।

एक से अधिक HAProxy होने से यह सुनिश्चित होता है कि हमारे पास ClusterControl UI तक पहुँचने का एक तरीका है, भले ही HAProxy नोड्स में से एक विफल हो जाए, लेकिन हमारे पास अभी भी दो (या अधिक) अलग-अलग होस्टनाम या IP हैं जो ClusterControl UI से कनेक्ट हो सकते हैं। इसे और अधिक आरामदायक बनाने के लिए, हम Keepalived को HAProxy के शीर्ष पर तैनात करेंगे। यह HAProxy सेवाओं की स्थिति की निगरानी करेगा और उनमें से किसी एक को वर्चुअल आईपी असाइन करेगा। यदि वह HAProxy अनुपलब्ध हो जाता है, तो VIP को किसी अन्य उपलब्ध HAProxy में स्थानांतरित कर दिया जाएगा। नतीजतन, हमारे पास प्रवेश का एक ही बिंदु होगा (वीआईपी या इससे जुड़ा एक होस्टनाम)। हम यहां जो कदम उठाएंगे, उन्हें उन सभी नोड्स पर निष्पादित करना होगा जहां HAProxy स्थापित किया गया है।

सबसे पहले, आइए इसे बनाए रखें:

apt install keepalived

फिर हमें इसे कॉन्फ़िगर करना होगा। हम निम्न कॉन्फ़िग फ़ाइल का उपयोग करेंगे:

vrrp_script chk_haproxy {

   script "killall -0 haproxy"   # verify the pid existance

   interval 2                    # check every 2 seconds

   weight 2                      # add 2 points of prio if OK

}

vrrp_instance VI_HAPROXY {

   interface eth1                # interface to monitor

   state MASTER

   virtual_router_id 51          # Assign one ID for this route

   priority 102                   

   unicast_src_ip 10.0.0.101

   unicast_peer {

      10.0.0.102

10.0.0.103



   }

   virtual_ipaddress {

       10.0.0.130                        # the virtual IP

   } 

   track_script {

       chk_haproxy

   }

#    notify /usr/local/bin/notify_keepalived.sh

}

आपको इस फ़ाइल को विभिन्न नोड्स पर संशोधित करना चाहिए। आईपी ​​​​पते को ठीक से कॉन्फ़िगर किया जाना चाहिए और सभी नोड्स पर प्राथमिकता अलग-अलग होनी चाहिए। कृपया वीआईपी को भी कॉन्फ़िगर करें जो आपके नेटवर्क में समझ में आता है। आप इंटरफ़ेस को भी बदलना चाह सकते हैं - हमने eth1 का उपयोग किया है, जो कि Vagrant द्वारा बनाई गई वर्चुअल मशीनों पर IP असाइन किया गया है।

इस कॉन्फ़िगरेशन फ़ाइल के साथ रख-रखाव प्रारंभ करें और आपको जाने के लिए अच्छा होना चाहिए। जब तक VIP एक HAProxy नोड पर है, तब तक आप इसका उपयोग उचित ClusterControl UI से कनेक्ट करने के लिए कर सकते हैं:

यह ClusterControl अत्यधिक उपलब्ध क्लस्टर के लिए हमारे दो-भाग के परिचय को पूरा करता है। जैसा कि हमने शुरुआत में कहा था, यह अभी भी बीटा अवस्था में है लेकिन हम आपके परीक्षणों से प्रतिक्रिया की प्रतीक्षा कर रहे हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी JSON_SEARCH () समझाया गया

  2. मारियाडीबी स्काईएसक्यूएल में क्षमताओं और विशेषताओं को जानना

  3. मारियाडीबी में DAYOFMONTH () कैसे काम करता है

  4. मारियाडीबी लंबाई () बनाम लंबाई ():क्या अंतर है?

  5. Oracle डेटाबेस से MariaDB में माइग्रेट करना - आपको क्या पता होना चाहिए