如何在 CentOS 7 上将 HAProxy 设置为 MariaDB 的负载均衡器
在此页
- 第 1 步 - 安装和配置 MariaDB Galera 集群
- A.配置主机名并准备基本系统
- B.安装 MariaDB Galera 服务器
- C.配置防火墙
- D.配置 MariaDB Galera 集群
- E。配置集群检查
- A.复制测试
- B.通过 HAProxy 访问 MariaDB Server
- C.登录到 HAProxy Web-Gui
在本教程中,我将指导您在 CentOS 7 上安装 MariaDB Galera 集群,该集群前面有一个 HAProxy 负载均衡器。整个设置包括 4 台服务器。我将为数据库节点使用 3 个 CentOS 7 服务器,2 个节点将处于活动状态,1 个充当备份节点。第四个服务器将用于 HAProxy 负载均衡器。对于平衡算法,我们使用 leastconn(但你可以使用其他算法)。
MariaDB 是最流行的关系数据库服务器之一,由 MySQL 数据库服务器的原始开发人员制作。 MariaDB 是 MySQL 的一个分支,它支持 XtraDB 存储引擎、InnoDB 存储引擎和一个名为 aria 的新存储引擎。
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
4 192.16
HAProxy
192.168.1.135- 所有四台服务器的根权限。
第 1 步 - 安装和配置 MariaDB Galera 集群
在这一步中,我们将在 3 台 CentOS 服务器上安装和配置 MariaDB Galera 集群。我们将安装 MariaDB-Galera 服务器,然后启用防火墙并为数据库和其他服务打开一些端口。然后我们将在每个 MariaDB 服务器上安装 clustercheck 脚本,这样我们就可以从 HAProxy 检查服务器状态。
A. 配置主机名并准备基础系统
使用您的 ssh 帐户登录到所有数据库服务器:
ssh
使用 sudo 命令切换到 root 用户:
sudo su
编辑每个 MariaDB 服务器上的主机文件,并添加所有服务器 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
我们将开启 CentOS 7 的默认防火墙 Firewalld。我们将打开它并打开我们将安装的服务使用的 TCP 端口。
3306=用于 MySQL/MariaDB 客户端连接。
4567=Galera 集群复制流量。
873=Rsync 端口。< br> 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 引导程序。
mariadb2 和 mariadb3 启动。
MariaDB 已在所有节点上启动,现在使用以下命令在所有服务器上配置 MariaDB 的 root 密码:
/usr/bin/mysql_secure_installation
E.配置Clustercheck
Clustercheck 是一个有用的 bash 脚本,可以使代理(例如:HAProxy)能够监控 MariaDB 服务器。
转到 /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 服务都是同步的。
测试集群检查:
/usr/bin/clustercheck
确保结果代码为 200。
第 2 步 - 安装和配置 HAProxy
登录到 HAProxy 服务器:
ssh
成为 root 用户并将 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 TRUE3030端口是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 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 Server
现在我们通过端口 3030 上的 HAProxy IP 访问 MariaDB 服务器集群和数据库。
在进行此测试之前,通过创建一个主机为 \%\ 的新用户 root 来启用对 MariaDB 服务器的远程访问。
登录到 MariaDB shell 并创建一个新用户 \root\,密码为 \aqwe123\:
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 web 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 是构建高可用性数据库系统的最佳解决方案之一。