如何使用Galera Cluster配置MariaDB MaxScale Master-Slave

时间:2020-03-05 15:24:44  来源:igfitidea点击:

在本文中,我们将通过Mariadb Corporation将Mariadb Galera Cluster与MaxScale Proxy数据库安装。
MaxScale是智能代理数据库,可以将数据库语句从群集路由到一个服务器。
但与haproxy不同,maxscale使用Linux内核的Asynchronius I/O,它应该有助于性能。

我们将要做的群集将读写写入拆分,这意味着所有写入都是通过maxScale的主机完成的,并将它们复制到所有节点,如可以读取的位置。

在本文中,我们使用节点-01作为主站和节点02/node-03作为从站。
Node-04将是我们的MaxScale核心机器。

MaxScale的主要特点

a)如果任何数据库服务器发生故障,则连接将自动创建到另一个节点b)可以从会话动态添加或者删除的连接c)MaxScale将客户端请求路由到数据库服务器的数量

安装群集

第一件事是使用所有主机的HOSNAMES和私有IPS设置主机文件。
这是必需的,所以我们可以通过私有IPS进行通信,避免加密流量的需求。
以下是所有4个服务器上的主机文件(/etc/hosts):

10.132.84.235 node-01 node-01
10.132.86.222 node-02 node-02
10.132.19.195 node-03 node-03
10.132.53.122 node-04 node-04

前三名将是Galera Cluster,第四个用于MaxScale代理。

允许在前3个服务器上为Mariadb存储库添加密钥

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

然后我们将为x86添加重建和电源小endian架构,软件包将根据拱式安装包。

add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'

更新源列表

apt update

然后安装MariaDB

apt install mariadb-server rsync

配置和构建群集

接下来,我们需要编辑配置文件并构建群集。
Node-01将是用于引导群集的节点,其他节点将连接到此。
所以允许首先在所有三个节点上编辑配置文件。

nano /etc/mysql/my.cnf

我们需要找到[Galera]部分并更改这些行:

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="theitroad-cluster"
wsrep_cluster_address="gcomm://node-01,node-02,node-03"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
## Allow server to accept connections on all interfaces.
#bind-address=0.0.0.0
#wsrep_sst_method=rsync
wsrep_node_address="10.132.84.235"
wsrep_node_name="node-01"

最后两行需要具有当前节点的地址和主机名,因此以上是来自节点-01的文件。
在每个节点上,需要相应地更改两行,而其他线路可以相同。

完成此后,我们需要启动群集。
如果数据库服务器因任何机会运行,则在所有三个节点上停止它。

systemctl stop mysql

在第一个节点运行:

galera_new_cluster

在另外两个节点上

systemctl start mysql

回到第一个节点,我们需要设置密码,所以我们会运行

mysql_secure_installation

ran ran脚本后,可以在任何节点上键入此命令

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

它应该为我们提供类似的输出

MaxScale代理安装和准备群集

当我们有群集并运行时,我们可以转到Node-04以在其上安装MaxScale。
MaxScale现在仅支持X86_64架构。
让我们使用WGet下载MaxScale Deb软件包

wget https://downloads.mariadb.com/MaxScale/2.0.1-oct27/ubuntu/dists/xenial/main/binary-amd64/maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb

接下来我们将安装依赖

apt install libcurl3

然后是istall maxscale

dpkg -i maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb

MaxScale已安装MaxScale我们需要在Galera集群上再次输入MySQL提示符,以便制作MaxScale用户并为MaxScale提供足够的权限进行操作。

mysql -u root -p

在MySQL提示符按行键入此行

CREATE USER 'maxscale'@'%' IDENTIFIED BY 'you-password-here';
Query OK, 0 rows affected (0.00 sec)
GRANT SELECT ON mysql.db TO 'maxscale'@'%';
Query OK, 0 rows affected (0.01 sec)
GRANT SELECT ON mysql.user TO 'maxscale'@'%';
Query OK, 0 rows affected (0.01 sec)
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
Query OK, 0 rows affected (0.01 sec)

配置maxscale.

让我们解释这个配置文件如何工作。
在[maxScale]下的第一部分将分别将CPU线程的数量设置为4,关闭日志记录到/var/log/syslog,打开日志记录到/var/log/maxscale,打开日志警告,记录到内存和日志通知,并转向日志信息和日志开发人员选项,以便调试代码。

下一个重要部分是[Galera Monitor]。
我们需要专注于几条线条。
说服务器=需要填充服务器名称的行。
这不是主机名,这是MaxScale如何在此配置文件中命名服务器。
在我们的情况下,我们将Server1设置为Server3.
用户是我们在上一节中创建的用户名,我们的案例中的MaxScale。
密码是我们为MaxScale用户设置密码的任何内容。
Galera Monotor将选择一个节点作为掌握和其他节点作为从属奴隶(我们的三个节点中的其他节点)。
将选择具有最低WSREP_LOCAL_INDEX的节点作为主设备。
如果群集配置更改,则可能会发生新选择,并且具有较低索引的节点将选择为主。
如果我们不希望掌握以这种方式更改,则可以使用选项Disable_master_failback并将其设置为1,如我们的配置文件中。
即使具有较低索引的新节点连接群集,这种方式也不会更改。

然后我们移动到下一个重要的部分,它是[RW分割路由器]。
其中我们再次输入三个服务器的名称以及与[Galera Monitor]部分相同的用户和密码。

最后,我们需要编辑这三个服务器,并输入MaxScale将看到它们的名称以及用于与它们通信的IP地址。
名称将是[Server1] [Server2]和[Server3],并且对于IP,我们将使用私有IP地址以避免必须加密流量。

现在,在MAXSCALE服务器上,即节点04,我们将要配置并启动MAXSCALE代理数据库。
首先让我们设置UFW以允许对所需端口的连接。

ufw allow 6603
ufw allow 4442

然后备份配置文件

mv /etc/maxscale.cnf /etc/maxscale.cnf.bk

文件备份并移动后,允许从头开始制作新文件。

nano /etc/maxscale.cnf

在那里,我们可以使用此作为骨架配置,除了摘要,我们需要更改粗体部分:

[maxscale]
threads=4
syslog=0
maxlog=1
log_to_shm=1
log_warning=1
log_notice=1
log_info=0
log_debug=0
[Galera Monitor]
type=monitor
module=galeramon
servers=server1,server2,server3
user=maxscale
passwd=you-password-here
monitor_interval=2000
disable_master_failback=1
available_when_donor=1
[qla]
type=filter
module=qlafilter
options=/tmp/QueryLog
[fetch]
type=filter
module=regexfilter
match=fetch
replace=select
[RW Split Router]
type=service
router=readwritesplit
servers=server1,server2,server3
user=maxscale
passwd=you-password-here
max_slave_connections=100%
max_slave_replication_lag=30
[CLI]
type=service
router=cli
[RW Split Listener]
type=listener
service=RW Split Router
protocol=MySQLClient
port=3306
[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
address=127.0.0.1
port=6603
[server1]
type=server
address=10.132.84.235
port=3306
protocol=MySQLBackend
[server2]
type=server
address=10.132.86.222
port=3306
protocol=MySQLBackend
[server3]
type=server
address=10.132.19.195
port=3306
protocol=MySQLBackend

保存后,我们可以启动MaxScale服务

systemctl start maxscale.service

并测试它是否正常工作

maxadmin -pmariadb list servers