MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

ClusterControl CMON HA cho tính khả dụng cao của cơ sở dữ liệu phân tán - Phần thứ hai (Thiết lập quyền truy cập GUI)

Trong phần đầu tiên, chúng ta đã kết thúc với một cụm cmon HA đang hoạt động:

[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)

Chúng tôi có ba nút đang hoạt động, một nút hoạt động như một nhà lãnh đạo và còn lại là những người theo dõi, có thể truy cập được (chúng nhận nhịp tim và trả lời chúng). Thách thức còn lại là định cấu hình quyền truy cập giao diện người dùng theo cách cho phép chúng tôi luôn truy cập giao diện người dùng trên nút lãnh đạo. Trong bài đăng trên blog này, chúng tôi sẽ trình bày một trong những giải pháp khả thi sẽ cho phép bạn thực hiện được điều đó.

Thiết lập HAProxy

Vấn đề này không mới đối với chúng tôi. Với mọi cụm sao chép, MySQL hoặc PostgreSQL, điều đó không thành vấn đề, có một nút duy nhất mà chúng ta nên gửi các bản ghi của mình đến. Một cách để hoàn thành điều đó là sử dụng HAProxy và thêm một số kiểm tra bên ngoài để kiểm tra trạng thái của nút và dựa trên đó, trả về các giá trị thích hợp. Về cơ bản, đây là những gì chúng tôi sẽ sử dụng để giải quyết vấn đề của chúng tôi. Chúng tôi sẽ sử dụng HAProxy làm proxy lớp 4 đã được kiểm tra tốt và chúng tôi sẽ kết hợp nó với các kiểm tra HTTP lớp 7 mà chúng tôi sẽ viết chính xác cho trường hợp sử dụng của mình. Đầu tiên, hãy cài đặt HAProxy. Chúng tôi sẽ kết hợp nó với ClusterControl, nhưng nó cũng có thể được cài đặt trên một nút riêng biệt (lý tưởng là các nút - để loại bỏ HAProxy là điểm lỗi duy nhất).

apt install haproxy

Điều này thiết lập HAProxy. Sau khi hoàn tất, chúng tôi phải giới thiệu cấu hình của mình:

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

Bạn có thể muốn thay đổi một số thứ ở đây như tên nút hoặc tên phụ trợ, bao gồm cả IP của nút ở đây. Bạn chắc chắn sẽ muốn thay đổi các máy chủ mà bạn sẽ đưa vào HAProxy của mình.

Các bit quan trọng nhất là:

        bind *:81

HAProxy sẽ lắng nghe trên cổng 81.

        option httpchk

Chúng tôi đã bật kiểm tra lớp 7 trên các nút phụ trợ.

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

Kiểm tra lớp 7 sẽ được thực hiện trên cổng 9201.

Sau khi hoàn tất, hãy khởi động HAProxy.

Thiết lập xinetd và Kiểm tra Tập lệnh

Chúng tôi sẽ sử dụng xinetd để thực hiện kiểm tra và trả về các phản hồi chính xác cho HAProxy. Các bước được mô tả trong đoạn này phải được thực hiện trên tất cả các nút cụm cmon HA.

Trước tiên, hãy cài đặt xinetd:

[email protected]:~# apt install xinetd

Sau khi hoàn tất, chúng ta phải thêm dòng sau:

cmonhachk       9201/tcp

to / etc / services - điều này sẽ cho phép xinetd mở một dịch vụ sẽ lắng nghe trên cổng 9201. Sau đó, chúng tôi phải thêm chính tệp dịch vụ đó. Nó phải được đặt trong /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

}

Cuối cùng, chúng ta cần tập lệnh kiểm tra được gọi bởi xinetd. Như đã định nghĩa trong tệp dịch vụ, nó nằm trong /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)

Khi bạn tạo tệp, hãy đảm bảo rằng nó có thể thực thi được:

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

Ý tưởng đằng sau tập lệnh này là nó kiểm tra trạng thái của các nút bằng cách sử dụng lệnh “s9s controller --list --long” và sau đó nó kiểm tra đầu ra liên quan đến IP mà nó có thể tìm thấy trên nút cục bộ. Điều này cho phép tập lệnh xác định xem máy chủ lưu trữ mà nó được thực thi có phải là máy chủ hay không. Nếu nút là đầu dẫn, tập lệnh trả về mã “HTTP / 1.1 200 OK”, mã này HAProxy diễn giải là nút khả dụng và định tuyến lưu lượng truy cập đến nó .. Nếu không, nó trả về “HTTP / 1.1 503 Dịch vụ không khả dụng”, được coi là một nút không tốt và lưu lượng truy cập sẽ không được định tuyến ở đó. Do đó, bất kể nút nào sẽ trở thành nút dẫn đầu, HAProxy sẽ phát hiện nó và đánh dấu nó là có sẵn trong phần phụ trợ:

Bạn có thể cần khởi động lại HAProxy và xinetd để áp dụng các thay đổi cấu hình trước tất cả các bộ phận sẽ bắt đầu hoạt động bình thường.

Việc có nhiều HAProxy đảm bảo chúng ta có cách truy cập vào Giao diện người dùng ClusterControl ngay cả khi một trong các nút HAProxy bị lỗi nhưng chúng ta vẫn có hai (hoặc nhiều) tên máy chủ hoặc IP khác nhau để kết nối với Giao diện người dùng ClusterControl. Để làm cho nó thoải mái hơn, chúng tôi sẽ triển khai Keepalived trên HAProxy. Nó sẽ giám sát trạng thái của các dịch vụ HAProxy và gán IP ảo cho một trong số chúng. Nếu HAProxy đó không khả dụng, VIP sẽ được chuyển sang một HAProxy khả dụng khác. Do đó, chúng tôi sẽ có một điểm vào duy nhất (VIP hoặc tên máy chủ được liên kết với nó). Các bước chúng tôi sẽ thực hiện ở đây phải được thực hiện trên tất cả các nút nơi HAProxy đã được cài đặt.

Trước tiên, hãy cài đặt keepalived:

apt install keepalived

Sau đó, chúng ta phải cấu hình nó. Chúng tôi sẽ sử dụng tệp cấu hình sau:

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

}

Bạn nên sửa đổi tệp này trên các nút khác nhau. Địa chỉ IP phải được định cấu hình đúng cách và mức độ ưu tiên phải khác nhau trên tất cả các nút. Cũng vui lòng định cấu hình VIP có ý nghĩa trong mạng của bạn. Bạn cũng có thể muốn thay đổi giao diện - chúng tôi đã sử dụng eth1, đây là nơi IP được chỉ định trên các máy ảo do Vagrant tạo.

Khởi động keepalived với tệp cấu hình này và bạn nên bắt đầu. Miễn là VIP có trên một nút HAProxy, bạn sẽ có thể sử dụng nó để kết nối với giao diện người dùng ClusterControl thích hợp:

Điều này hoàn thành phần giới thiệu hai phần của chúng tôi về các cụm có tính khả dụng cao của ClusterControl. Như chúng tôi đã nêu ở phần đầu, tính năng này vẫn ở trạng thái beta nhưng chúng tôi mong nhận được phản hồi từ các thử nghiệm của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách NOT RLIKE hoạt động trong MariaDB

  2. Cách thức hoạt động của FORMAT () trong MariaDB

  3. Đặt Bộ ký tự và đối chiếu của bảng trong MariaDB

  4. Cách thức hoạt động của DIV trong MariaDB

  5. Cách SLEEP () hoạt động trong MariaDB