在本教程中,我将指导您在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引导。
mariadb2和mariadb3开始。
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服务都是同步的。
测试集群检查:
/usr/bin/clustercheck
确保结果代码是200。
第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: youcl.
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
stats auth youcl:youcl
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"
您可以通过访问端口3030上的负载平衡器IP来查看数据库服务器的用户。您可以通过访问3030端口上的HAProxy IP来访问MySQL节点上的数据库。
服务器的另一个测试:最小的算法:
C.登录到HAProxy Web-Gui
您可以访问端口9000上的HAProxy监控服务器,用户名和密码“youcl”显示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是构建高可用性数据库系统的最佳解决方案之一。