웹사이트 검색

CentOS 7에서 MariaDB용 로드 밸런서로 HAProxy를 설정하는 방법


이 페이지에서

  1. 1단계 - MariaDB Galera 클러스터 설치 및 구성
    1. A. 호스트 이름 구성 및 기본 시스템 준비\n
    2. B. MariaDB Galera 서버 설치
    3. 다. 방화벽 구성\n
    4. D. MariaDB Galera 클러스터 구성
    5. E. Clustercheck 구성

    1. A. 복제 테스트
    2. B. HAProxy를 통해 MariaDB 서버에 액세스\n
    3. 다. HAProxy 웹 GUI에 로그인

    이 튜토리얼에서는 앞에 HAProxy 로드 밸런서가 있는 CentOS 7에 MariaDB Galera 클러스터를 설치하는 과정을 안내합니다. 전체 설정은 4개의 서버로 구성됩니다. 데이터베이스 노드에 3개의 CentOS 7 서버를 사용하고 2개의 노드가 활성화되고 1개가 백업 노드로 작동합니다. 네 번째 서버는 HAProxy 로드 밸런서에 사용됩니다. 균형 알고리즘의 경우 leastconn을 사용합니다(하지만 다른 알고리즘을 사용할 수 있음).

    MariaDB는 MySQL 데이터베이스 서버의 원래 개발자가 만든 가장 인기 있는 관계형 데이터베이스 서버 중 하나입니다. MariaDB는 XtraDB 스토리지 엔진, InnoDB 스토리지 엔진 및 aria라는 새로운 스토리지 엔진을 지원하는 MySQL의 포크입니다.

    MariaDB Galera Cluster는 GNU/Linux 기반 운영 체제에서만 사용할 수 있는 MariaDB용 동기식 다중 마스터 클러스터입니다. Galera Cluster는 XtraDB 및 InnoDB 스토리지 엔진만 지원합니다. 자동 구성원 제어, 자동 노드 가입 및 클러스터 노드 읽기 및 쓰기를 위해 Galera 라이브러리를 사용하여 복제합니다.

    전제 조건

    • 4개의 CentOS 7 서버 - 64비트:

    mariadb1
    192.168.1.132

    mariadb2
    192.168.1.133

    mariadb3
    192.192.

    HAProxy
    192.168.1.135

    • 4개 서버 모두에 대한 루트 권한.\n

    1단계 - MariaDB Galera 클러스터 설치 및 구성

    이 단계에서는 3개의 CentOS 서버에 MariaDB Galera Cluster를 설치하고 구성합니다. MariaDB-Galera 서버를 설치한 다음 방화벽을 활성화하고 데이터베이스 및 기타 서비스에 대한 일부 포트를 엽니다. 그런 다음 각 MariaDB 서버에 clustercheck 스크립트를 설치하여 HAProxy에서 서버 상태를 확인할 수 있습니다.

    A. 호스트 이름 구성 및 기본 시스템 준비

    ssh 계정으로 모든 데이터베이스 서버에 로그인합니다.

    ssh 

    sudo 명령을 사용하여 루트 사용자로 전환합니다.

    sudo su

    각 MariaDB 서버에서 호스트 파일을 편집하고 다른 노드의 모든 서버 IP 주소와 호스트 이름을 추가합니다.

    vi /etc/hosts

    아래 내 /etc/hosts 구성을 참조하십시오.

    192.168.1.132   mariadb1
    192.168.1.133   mariadb2
    192.168.1.134   mariadb3

    파일을 저장하고 종료합니다.

    그런 다음 MariaDB Galera에 문제가 발생하므로 각 서버에서 SELinux를 비활성화합니다. 다음 sed 명령으로 SELinux를 비활성화합니다.

    sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux

    sed(스트림 편집기): /etc/sysconfig/selinux 파일에서 \SELINUX=permissive\를 \SELINUX=disabled\로 바꿉니다.

    B. MariaDB Galera 서버 설치

    이 단계에서는 MariaDB 리포지토리에서 사용할 수 있는 MariaDB Galera 10.0을 설치합니다.

    vi 명령을 사용하여 yum.repos.d 디렉토리에 새 .repo 파일을 생성합니다.

    vi /etc/yum.repos.d/mariadb.repo

    아래에 MariaDB Galera 리포지토리 세부 정보를 붙여넣고 저장합니다.

    # MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
    # http://mariadb.org/mariadb/repositories/
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.0/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1

    이제 MariaDB Galera 서버 및 클라이언트와 이 튜토리얼에 필요한 기타 패키지를 설치합니다.

    yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget

    설치 프로세스가 완료될 때까지 기다립니다.

    C. 방화벽 구성

    Firewalld라는 CentOS 7의 기본 방화벽을 켭니다. 전원을 켜고 설치할 서비스에서 사용하는 TCP 포트를 엽니다.

    3306 = MySQL/MariaDB 클라이언트 연결에 사용됨.
    4567 = Galera 클러스터 복제 트래픽.
    873 = Rsync 포트.< br> 4444=다른 모든 상태 스냅샷 전송(SST)용.
    9200=xinetd - clustercheck.

    이 systemctl 명령으로 방화벽을 켭니다.

    systemctl start firewalld

    이제 방화벽 cmd를 사용하여 포트를 엽니다.

    firewall-cmd --permanent --add-port=3306/tcp
    firewall-cmd --permanent --add-port=4567/tcp
    firewall-cmd --permanent --add-port=873/tcp
    firewall-cmd --permanent --add-port=4444/tcp
    firewall-cmd --permanent --add-port=9200/tcp

    방화벽을 다시 로드합니다.

    firewall-cmd --reload

    D. MariaDB Galera 클러스터 구성

    /etc/my.cnf.d/ 디렉토리로 이동하고 vi를 사용하여 server.conf 파일을 편집합니다.

    cd /etc/my.cnf.d/
    vi server.conf

    주석을 제거하고 일부 구성 라인을 추가하면 아래 세부 정보를 볼 수 있습니다.

    wsrep_provider=/usr/lib64/galera/libgalera_smm.so   # Path to wsrep provider library
    wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134"   # Group Node, add all MardiaDB Server IP
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0

    # Add some configuration below
    # Cluster Name
    wsrep_cluster_name="mariadb_cluster"

    # Add Server IP - on mariadb2 = 192.168.1.133 - on mariadb3 = 192.168.1.134
    wsrep_node_address="192.168.1.132"

    # Replication Provider with rsync
    wsrep_sst_method=rsync

    파일을 저장하고 종료합니다.

    서버 mariadb1에서 아래 명령을 사용하여 클러스터를 부트스트랩할 수 있습니다.

    /etc/rc.d/init.d/mysql bootstrap

    결과:

    Bootstrapping the cluster.. Starting MySQL.. SUCCESS!

    mariadb2 및 mariadb3 서버에서 MariaDB를 정상적으로 시작합니다.

    /etc/init.d/mysql start

    mariadb1 부트스트래핑.

    mariadb2 및 mariadb3이 시작됩니다.

    MariaDB가 모든 노드에서 시작되었습니다. 이제 아래 명령을 사용하여 모든 서버에서 MariaDB의 루트 비밀번호를 구성하십시오.

    /usr/bin/mysql_secure_installation

    E. Clustercheck 구성

    Clustercheck는 MariaDB 서버를 모니터링할 수 있는 프록시(예: HAProxy)를 만드는 데 유용한 bash 스크립트입니다.

    /tmp 디렉토리로 이동하여 wget을 사용하여 스크립트를 다운로드합니다.

    cd /tmp
    wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

    이제 권한을 변경하여 스크립트를 실행 가능하게 만들고 /usr/bin/ 디렉토리로 이동합니다.

    chmod +x clustercheck
    mv clustercheck /usr/bin/

    다음으로 "/etc/xinet.d/" 디렉터리에서 vi 명령을 사용하여 clusterchek용 xinetd 스크립트를 만듭니다.

    vi /etc/xinetd.d/mysqlchk

    아래 구성을 붙여넣습니다.

    # default: on
    # description: mysqlchk
    service mysqlchk
    {
            disable = no
            flags = REUSE
            socket_type = stream
            port = 9200             # This port used by xinetd for clustercheck
            wait = no
            user = nobody
            server = /usr/bin/clustercheck
            log_on_failure += USERID
            only_from = 0.0.0.0/0
            per_source = UNLIMITED
    }

    저장 및 종료.

    서비스 목록에 clustercheck를 추가합니다.

    vi /etc/services

    10101 행으로 이동하여 포트 9200을 사용하는 서비스를 주석 처리하고 mysqlchk/clustercheck에 대한 새 행을 추가하십시오.

    mysqlchk        9200/tcp                # mysqlchk

    #wap-wsp         9200/tcp                # WAP connectionless session service
    #wap-wsp         9200/udp                # WAP connectionless session service

    파일을 저장하고 종료합니다.

    그런 다음 xinetd 서비스를 시작합니다.

    systemctl start xinetd

    클러스터 확인을 수행하려면 MySQL에서 새 사용자를 생성해야 합니다. MariaDB 셸에 로그인하고 이름이 "clustercheckuser"이고 암호가 "clustercheckpassword!"인 새 사용자를 만듭니다.

    mysql -u root -p
    GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' ;
    exit;

    이 단계에서 모든 MariaDB 서비스가 동기화됩니다.

    clustercheck 테스트:

    /usr/bin/clustercheck

    결과 코드가 200인지 확인합니다.

    2단계 - HAProxy 설치 및 구성

    HAProxy 서버에 로그인합니다.

    ssh 

    루트 사용자가 되어 MariaDB 서버 IP 및 호스트 이름을 "/etc/hosts" 파일에 추가합니다.

    sudo su
    vi /etc/hosts

    HAProxy는 CentOS 기본 리포지토리에서 사용할 수 있습니다. 이 yum 명령을 실행하여 설치하십시오.

    yum -y install haproxy

    그런 다음 rsyslog 구성 파일을 수정하여 HAProxy에 대한 로그를 구성합니다.

    vi /etc/rsyslog.conf

    udp 포트의 주석 처리를 제거합니다.

    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 51

    파일을 저장하고 편집기를 종료합니다.

    rsyslog.d 디렉터리에 HAProxy 구성을 추가합니다.

    vi /etc/rsyslog.d/haproxy.conf

    아래에 구성 붙여넣기:

    local2.=info     /var/log/haproxy-access.log
    local2.notice    /var/log/haproxy-info.log

    파일을 저장하고 rsyslog를 다시 시작합니다.

    systemctl restart rsyslog

    다음으로 새 HAProxy 구성 파일을 만듭니다.

    /etc/haproxy 디렉토리로 이동하여 dafult haproxy 구성 파일을 백업합니다.

    cd /etc/haproxy/
    mv haproxy.cfg haproxy.cfg.orig

    새 haproxy 구성 파일을 만듭니다.

    vi /etc/haproxy/haproxy.cfg

    그리고 아래에 HAProxy 구성을 붙여넣습니다.

    global
            log 127.0.0.1   local2
            maxconn 1024
            user haproxy
            group haproxy
            daemon
            stats socket /var/run/haproxy.sock mode 600 level admin         # Make sock file for haproxy

    defaults
            log     global
            mode    http
            option  tcplog
            option  dontlognull
            retries 3
            option  redispatch
            maxconn 1024
            timeout connect 5000ms
            timeout client 50000ms
            timeout server 50000ms

    listen mariadb_cluster 0.0.0.0:3030
    ## MariaDB balance leastconn - the cluster listening on port 3030.
            mode tcp
            balance leastconn
            option httpchk
            server mariadb1 192.168.1.132:3306 check port 9200
            server mariadb2 192.168.1.133:3306 check port 9200
            server mariadb3 192.168.1.134:3306 check port 9200 backup       # Make mariadb3 as backup - automatic replication data

    listen stats 0.0.0.0:9000
    ## HAProxy stats web gui running on port 9000 - username and password: howtoforge.
            mode http
            stats enable
            stats uri /stats
            stats realm HAProxy\ Statistics
            stats auth howtoforge:howtoforge
            stats admin if TRUE

    포트 3030은 로드 밸런싱된 MariaDB 포트이며 로드 밸런서 IP 및 해당 포트를 사용하여 모든 MariaDB 서버의 데이터베이스에 액세스할 수 있습니다.

    포트 9000은 web-gui용 포트이며 브라우저에서 HAProxy를 모니터링할 수 있습니다.

    이제 firewalld를 시작하고 포트 9000 및 3030을 연 다음 다시 로드합니다.

    systemctl start firewalld
    firewall-cmd --permanent --add-port=9000/tcp
    firewall-cmd --permanent --add-port=3030/tcp
    firewall-cmd --reload

    systemctl 명령으로 HAProxy를 시작합니다.

    systemctl start haproxy

    3단계 - HAProxy 및 MariaDB 테스트

    A. 복제 테스트

    MariaDB 서버에 로그인하고 MySQL 셸에 액세스하여 mariadb1, mariadb2, 마지막으로 mariadb3에서 새 데이터베이스를 만듭니다.

    mysql -u root -p
    create database this_mariadb1;  # Run this on mariadb1 server
    create database this_mariadb2;  # Run this on mariadb2 server
    create database this_mariadb3;  # Run this on mariadb3 server

    데이터베이스를 확인합니다.

    B. HAProxy를 통해 MariaDB 서버에 액세스

    이제 포트 3030에서 HAProxy IP를 통해 MariaDB 서버 클러스터 및 데이터베이스에 액세스합니다.

    이 테스트를 수행하기 전에 호스트 "%"로 새 사용자 루트를 생성하여 MariaDB 서버에 대한 원격 액세스를 활성화합니다.

    MariaDB 셸에 로그인하고 비밀번호가 "aqwe123"인 새 사용자 "root"를 만듭니다.

    mysql -u root -p
    GRANT ALL PRIVILEGES ON *.* TO '%' IDENTIFIED BY "aqwe123";

    다음으로 HAProxy 서버를 통해 mysql.user 데이터베이스 테이블에 액세스합니다.

    mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"

    포트 3030에서 로드 밸런서 IP에 액세스하여 데이터베이스 서버의 사용자를 볼 수 있습니다. 포트 3030에서 HAProxy IP에 액세스하여 MySQL 노드의 데이터베이스에 액세스할 수 있습니다.

    서버의 또 다른 테스트: leastconn 알고리즘:

    C. HAProxy Web-Gui에 로그인

    사용자 이름과 비밀번호 "howtoforge"를 사용하여 포트 9000에서 HAProxy 모니터링 서버에 액세스하여 HAProxy 웹 UI를 표시할 수 있습니다.

    http://192.168.1.135:9000/stats

    HAProxy가 성공적으로 설치되었으며 MariaDB 서버가 모니터링되는 것을 볼 수 있습니다.

    결론

    MariaDB Galera Cluster는 MySQL 데이터베이스에 로드 밸런싱을 제공하는 동기식 다중 마스터 클러스터입니다. 이것은 귀하의 사이트를 위한 강력한 데이터베이스 시스템을 구축하는 좋은 솔루션입니다. MariaDB Galera Cluster는 xtradb 및 innodb 스토리지 엔진을 지원하며 자동 복제를 제공하고 새 노드의 자동 조인을 허용합니다. 데이터베이스 클러스터 앞에서 HAProxy를 로드 밸런서로 사용할 수 있습니다. 로드 밸런서는 들어오는 요청을 모든 데이터베이스에 분산시키는 데 도움이 됩니다. bash 스크립트 clustercheck를 사용하여 HAProxy에서 데이터베이스 모니터링을 수행합니다. MariaDB Galera Cluster 및 HAProxy는 고가용성 데이터베이스 시스템을 구축하는 최고의 솔루션 중 하나입니다.