CentOS 7에서 MariaDB용 로드 밸런서로 HAProxy를 설정하는 방법
이 페이지에서
- 1단계 - MariaDB Galera 클러스터 설치 및 구성
- A. 호스트 이름 구성 및 기본 시스템 준비\n
- B. MariaDB Galera 서버 설치
- 다. 방화벽 구성\n
- D. MariaDB Galera 클러스터 구성
- E. Clustercheck 구성
- A. 복제 테스트
- B. HAProxy를 통해 MariaDB 서버에 액세스\n
- 다. 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/hostsHAProxy는 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 --reloadsystemctl 명령으로 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는 고가용성 데이터베이스 시스템을 구축하는 최고의 솔루션 중 하나입니다.