如何在CentOS 7上将HAProxy设置为MariaDB的负载均衡器

在本教程中,我将指导您在CentOS 7上安装MariaDB Galera群集,该群集在前面具有HAProxy负载平衡器。到...

在本教程中,我将指导您在CentOS 7上安装了一个MariaDB Galera集群,它在前面有一个HAProxy负载均衡器。 总设置由4台服务器组成。 我将为数据库节点使用3个CentOS 7服务器,2个节点将被激活,1个作为备份节点。 第四台服务器将用于HAProxy负载均衡器。 对于平衡算法,我们使用leastconn(但是可以使用其他算法)。

MariaDB是由MySQL数据库服务器的原始开发人员制造的最流行的关系数据库服务器之一。 MariaDB是支持XtraDB存储引擎,InnoDB存储引擎和名为aria的新存储引擎的MySQL分支。

MariaDB Galera Cluster是MariaDB的同步多主机集群,仅在基于GNU / Linux的操作系统上可用。 Galera Cluster仅支持XtraDB和InnoDB存储引擎。 它使用Galera库进行复制,具有自动成员控制,自动节点加入以及用于读取和写入群集节点。

前提条件

  • 4 CentOS 7服务器 - 64位:

mariadb1
192.168.1.132

mariadb2
192.168.1.133

mariadb3
192.168.1.134

HAProxy
192.168.1.135

  • 所有四个服务器的根权限。

第1步 - 安装和配置MariaDB Galera群集

在此步骤中,我们将在3个CentOS服务器上安装和配置MariaDB Galera Cluster。 我们将安装MariaDB-Galera服务器,然后启用防火墙并为数据库和其他服务打开一些端口。 然后我们将在每个MariaDB服务器上安装clustercheck脚本,因此我们可以从HAProxy检查服务器状态。

A.配置主机名并准备基本系统

使用您的ssh帐户登录到所有数据库服务器:

ssh mariadb1@192.168.1.132
ssh mariadb2@192.168.1.133
ssh mariadb3@192.168.1.134

使用sudo命令切换到root用户:

sudo su

编辑每个MariaDB服务器上的hosts文件,并添加其他节点的所有服务器IP地址和主机名:

vi /etc/hosts

看到我的/ etc / hosts配置如下:

192.168.1.132   mariadb1
192.168.1.133   mariadb2
192.168.1.134   mariadb3

保存文件并退出。

接下来,在每个服务器上禁用SELinux,因为它会导致MariaDB Galera的问题。 使用此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 Server和Client,以及本教程所需的其他一些软件包:

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

等待安装过程完成。

C.配置Firewalld

我们将打开名为Firewalld的CentOS 7的默认防火墙。 我们将打开它并打开我们将要安装的服务使用的TCP端口。

3306 =用于MySQL / MariaDB客户端连接。
4567 = Galera群集复制流量。
873 = Rsync端口。
4444 =所有其他国家快照转移(SST)。
9200 = xinetd - clustercheck。

使用此systemctl命令打开firewalld:

systemctl start firewalld

现在用firewall-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

并重新加载firewalld:

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引导。

引导Galera群集

mariadb2和mariadb3开始。

节点2上的MySQL。

节点3上的MySQL

MariaDB已经在所有节点上启动,现在在所有服务器上配置MariaDB的root密码,命令如下:

/usr/bin/mysql_secure_installation

E.配置Clustercheck

Clustercheck是一个有用的bash脚本,用于创建能够监视MariaDB服务器的代理(例如:HAProxy)。

转到/ 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

要执行clustercheck,您必须在MySQL中创建一个新用户。 登录到MariaDB shell并创建名为“clustercheckuser”和密码“clustercheckpassword!”的新用户。

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

在MariaDB中添加clustercheck用户

在这个阶段,所有的MariaDB服务都是同步的。

测试集群检查:

/usr/bin/clustercheck

确保结果代码是200。

MySQL集群检查

第2步 - 安装和配置HAProxy

登录到HAProxy服务器:

ssh haproxy1@192.168.1.135

成为root用户,并将MariaDB服务器IP和主机名添加到“/ etc / hosts”文件中:

sudo su
vi /etc/hosts

HOSroxy在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: howtoing.
        mode http
        stats enable
        stats uri /stats
        stats realm HAProxy\ Statistics
        stats auth howtoing:howtoing
        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

复制测试

登录到MariaDB服务器,访问MySQL shell并从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服务器集群和数据库。

在进行此测试之前,请通过创建一个新的用户root(主机“%”)来启用对MariaDB服务器的远程访问。

登录到MariaDB shell并创建一个新用户“root”,密码为“aqwe123”:

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' 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"

测试MySQL集群

您可以通过访问端口3030上的负载平衡器IP来查看数据库服务器的用户。您可以通过访问3030端口上的HAProxy IP来访问MySQL节点上的数据库。

服务器的另一个测试:最小的算法:

在HAProxy中测试最小连接算法。

C.登录到HAProxy Web-Gui

您可以访问端口9000上的HAProxy监控服务器,用户名和密码“howtoing”显示HAProxy Web UI:

http://192.168.1.135:9000/stats

HAProxy GUI

HAProxy已经成功安装,您可以看到MariaDB服务器被监控。

结论

MariaDB Galera Cluster是一个同步多主机集群,为MySQL数据库提供负载平衡。 这是为您的站点构建强大的数据库系统的良好解决方案。 MariaDB Galera Cluster支持 xtradb和innodb存储引擎,它提供自动复制并允许自动加入新节点。 我们可以在数据库集群前面使用HAProxy作为负载均衡器。 负载平衡器有助于将传入的请求分发到所有数据库。 我们使用bash脚本clustercheck从HAProxy执行数据库监视。 MariaDB Galera Cluster和HAProxy是构建高可用性数据库系统的最佳解决方案之一。