高度可用的Mariadb与MaxScale
#database #mariadb #maxscale #loadbalancing

如何使用Galera群集配置高度可用的Mariadb MaxScale Master-Slave?

在本教程中,我们将使用MaxScale Proxy数据库在Ubuntu 20.04 LTS(焦点)节点上部署Mariadb Galera群集。一个名为MaxScale的智能代理数据库可以将数据库请求从集群发送到单个服务器。但是,与Haproxy相比,MaxScale采用了Linux内核异步I/O的异步I/O。

我们正在构建的群集将具有读写分配,这意味着MaxScale在主机中执行所有写作并将其复制到所有节点,以便它们可以阅读。

Node-01用作主机,而节点02和03则用作本文中的奴隶。我们的MaxScale Core Machine是Node-04。

Image description

MaxScale的主要特征
a)如果任何数据库服务器失败,将自动建立连接到其他节点。

b)可以动态添加或撤回会话的连接。

c)客户请求将由MaxScale转发到许多数据库服务器。

安装群集
第一步是使用所有主机的私有IP地址和主机名设置主机文件。为了避免对流量加密的要求,并通过私人IP地址进行通信,这是必需的。这是所有四个服务器上的主机文件(/etc/hosts):

sudo su -
nano /etc/hosts
10.5.108.14 node-01 node-01
10.5.108.13 node-02 node-02
10.5.108.15 node-03 node-03
10.5.108.16 node-04 node-04

我们的Galera群集将是前三个,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.6/ubuntu focal main'

更新源列表。

apt get-update

,然后安装Mariadb

apt install mariadb-server rsync

配置和构建群集
然后必须构建群集,并且必须修改配置文件。群集将由节点-01引导,其他节点将加入它。因此,让我们从配置三个节点的配置文件开始。

nano /etc/mysql/my.cnf

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

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="linoxide-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.32.84.135"
wsrep_node_name="node-01"

当前节点的主机名和地址必须包含在最后两行中,因此上述文件来自Node-01。这两条线必须在每个节点上适当更改,而其余的行可以保持不变。

完成此操作后,我们必须启动集群。如果当前正在运行,则在三个节点中的每个节点中停止数据库服务器。

systemctl stop mysql

在第一个节点运行:

galera_new_cluster

在其他两个节点上

systemctl start mysql

我们必须再次在第一个节点上设置密码,因此我们将运行
mysql_secure_installation

运行后,您可以在任何节点上键入此命令

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

它应该为您提供类似于此

的输出

Image description

MaxScale代理安装并准备群集
群集运行后,我们可以转到Node-04并在此安装MaxScale。当前,仅MaxScale支持X86_64体系结构。让我们使用WGET下载MaxScale Deb软件包。

wget https://downloads.mariadb.com/MaxScale/2.5.0/ubuntu/dists/focal/main/binary-amd64/maxscale-2.5.0-1.ubuntu.focal.x86_64.deb

接下来我们将安装依赖项

apt install libcurl3

然后安装MaxScale

dpkg -i maxscale-2.5.0-1.ubuntu.focal.x86_64.deb

安装MaxScale后,我们必须再次访问Galera群集的MySQL提示,以创建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/maxScale,将登录登录到/var/log/syslog,启用登录到/var/log/maxscale ,启用记录记忆和通知,并禁用日志记录以记录信息和开发人员选项以调试代码。
[Galera Monitor]是接下来的作品。在那里,各种线条都需要我们的注意。服务器的名称必须在服务器=行中输入。这就是MaxScale在此配置文件中将服务器命名的方式。它不是主机名。在我们的情况下,我们将将Server1设置为Server3。用户是我们在上一节中创建的用户名,在这种情况下是MaxScale。您为MaxScale用户选择的密码是密码。在我们的三个节点中,Galera Monotor将选择一个节点作为主人,而其他人则是奴隶。将从最低的WSREP_LOCAL_INDEX从节点中选择主。如果群集配置更改,则可能会进行新的选择,并且可以选择最低索引的主节点。您可以使用选项disable_master_failback并将其设置为1,例如我们的配置文件中的1个,如果您不希望主使用这种方式进行更改。通过这种方式,即使具有较低索引的新节点加入了集群,主也不会更改。

然后,我们继续使用[RW拆分路由器]部分,这是下一个关键部分。这里使用[Galera Monitor]部分中的相同的用户名和密码再次输入三个服务器的名称。

最后,我们必须更新这三个服务器,并为他们提供MaxScale会识别的名称,并将其用于与它们联系的IP地址。为了避免必须加密流量,我们将使用私有IP地址[server1],[server2]和[server3]。

现在,在Node-04的MaxScale Server上,我们将配置并启动MaxScale代理数据库。首先,让我们设置UFW以允许在所需端口上进行连接。

ufw allow 4006
ufw allow 4007

然后备份配置文件

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

文件备份并移动后,让我们从头开始制作新文件。
nano /etc/maxscale.cnf

您可以将以下用作在此处进行配置的模板,尽管显然您需要以粗体编辑位:

[maxscale]
admin_host=0.0.0.0
admin_port=8989
admin_secure_gui=false
log_info=true
# The number of worker threads that are handling the events coming from the kernel.
threads=auto

#admin_ssl_key=/var/lib/maxscale/certs/server.key
#admin_ssl_cert=/var/lib/maxscale/certs/server.crt
#admin_ssl_ca_cert=/var/lib/maxscale/certs/ca.crt

# Enable or disable the substitution of environment variables in the MaxScale configuration file
substitute_variables=true
# Enable or disable the logging of messages whose syslog priority is notice
log_notice=on
syslog=0
maxlog=1

#List of servers in the Cluster
[stg-galeramaster101]
type=server
address=10.5.108.14
port=3306
protocol=MariaDBBackend
priority=1

[stg-galeramaster102]
type=server
address=10.5.108.13
port=3306
protocol=MariaDBBackend
priority=2

[stg-galeramaster103]
type=server
address=10.5.108.15
port=3306
protocol=MariaDBBackend
priority=3


# Monitoring for the Galera server nodes
[Galera-Monitor]
type=monitor
module=galeramon
servers=stg-galeramaster101,stg-galeramaster102,stg-galeramaster103
user=<username>
password=<password>
monitor_interval=200
use_priority=true
available_when_donor=true

# This will ensure that the current master remains the master as long as it's up and dunning
disable_master_failback=true
backend_connect_timeout=3s
backend_write_timeout=3s
backend_read_timeout=3s


# Galera Read/Write Splitter service
[Galera-RW-Service]
type=service
router=readwritesplit
servers=stg-galeramaster101,stg-galeramaster102,stg-galeramaster103
user=<username>
password=<password>
master_reconnection=true
transaction_replay=true
transaction_replay_retry_on_deadlock=true
master_failure_mode=error_on_write
# ADAPTIVE_ROUTING, based on server average response times. See below.
slave_selection_criteria=ADAPTIVE_ROUTING

# Galera cluster listener
[Galera-Listener]
type=listener
service=Galera-RW-Service
protocol=MariaDBClient
port=4006
address=0.0.0.0

[Replication-Service]
type=service
router=readconnroute
router_options=master
servers=stg-galeramaster101,stg-galeramaster102,stg-galeramaster103
user=<username>
password=<password>

[Replication-Listener]
type=listener
service=Replication-Service
protocol=MariaDBClient
port=4007
address=0.0.0.0

保存此后,您可以启动MaxScale服务。

systemctl start maxscale.service

并测试它是否有效

maxctrl -pmariadb list servers

结论
我们的Galera群集的负载平衡器已成功安装了三个Ubuntu 20.04 LTS(焦点)节点和MaxScale的第四个节点。 MaxScale是一个合适的选择。最小的配置是今天创建的,但是扩展也是一个选择。我衷心希望这篇文章能帮助您熟悉MaxScale设置。

享受您的一天:)