更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 用ProxySQL在Ubuntu 20.04上安装MariaDB Galera群集

用ProxySQL在Ubuntu 20.04上安装MariaDB Galera群集

更新时间:2022-12-24 09:28:34浏览次数:654+次

本文介绍如何使用MariaDB Galera集群和ProxySQL建立具有负载平衡的高可用数据库集群,将提供使用ProxySQL在Ubuntu 20.04系统上安装和配置MariaDB Galera群集的方法。下面的步骤将介绍如何在三台Ubuntu 20.04主机上设置Galera集群,其服务器、主机名和IP地址分别为:DB 1 node1 172.20.5.200、DB 2 node2 172.20.5.201、DB3 node3 172.20.5.202。

使用ProxySQL在Ubuntu 20.04上安装MariaDB Galera群集的具体步骤

步骤1:更新服务器

更新服务器并重新启动:

sudo apt update && sudo apt -y upgrade

sudo reboot

步骤2:设置主机名

在三台服务器中的每台服务器上配置静态主机名以实现DNS可达性:

$ sudo vim /etc/hosts

172.20.5.200  node1.computingforgeeks.com node1

172.20.5.201  node2.computingforgeeks.com node2

172.20.5.202  node3.computingforgeeks.com node3

步骤3:在所有节点上安装MariaDB

使用以下命令安装最新版本的MariaDB:

sudo apt update

sudo apt -y install mariadb-server mariadb-client

通过运行以下命令配置MariaDB以供首次使用,然后适当地运行配置:

$ sudo mysql_secure_installation

请在必要的时候按y键继续。

通过运行以下命令测试与每个数据库的连接:

$ mysql -u root -p

系统将提示您输入在上一步中设置的密码。

步骤4:配置Galera群集

下一步是在我们的三台MariaDB主机上配置galera集群。注释/etc/mysql/mariadb.conf.d/50-server.cnf文件上的绑定行,该文件将mariadb服务绑定到127.0.0.1:

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

#bind-address            = 127.0.0.1

1、步骤配置第一个节点

将以下内容添加到MariaDB配置文件中。记住将“wsrep_node_address”处的主机名修改为第一台主机的主机名或IP:

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

[galera]

wsrep_on                 = ON

wsrep_cluster_name       = "MariaDB Galera Cluster"

wsrep_provider           = /usr/lib/galera/libgalera_smm.so

wsrep_cluster_address    = "gcomm://node1,node2,node3"

binlog_format            = row

default_storage_engine   = InnoDB

innodb_autoinc_lock_mode = 2

bind-address = 0.0.0.0

wsrep_node_address="node1"

初始化galera集群并重新启动MariaDB:

sudo galera_new_cluster

sudo systemctl restart mariadb

2、配置Galera节点(节点2和节点3)

分别为node2和node3添加以下配置:

以下是Node2配置:

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

[galera]

wsrep_on                 = ON

wsrep_cluster_name       = "MariaDB Galera Cluster"

wsrep_provider           = /usr/lib/galera/libgalera_smm.so

wsrep_cluster_address    = "gcomm://node1,node2,node3"

binlog_format            = row

default_storage_engine   = InnoDB

innodb_autoinc_lock_mode = 2

bind-address = 0.0.0.0

wsrep_node_address="node2"

以下是Node3配置:

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

[galera]

wsrep_on                 = ON

wsrep_cluster_name       = "MariaDB Galera Cluster"

wsrep_provider           = /usr/lib/galera/libgalera_smm.so

wsrep_cluster_address    = "gcomm://node1,node2,node3"

binlog_format            = row

default_storage_engine   = InnoDB

innodb_autoinc_lock_mode = 2

bind-address = 0.0.0.0

wsrep_node_address="node3"

在node2和node3上重新启动MariaDB服务:

systemctl restart mariadb

步骤5:验证Galera设置

以root用户身份登录到三个节点中的任何一个,然后确认集群设置正常:

$ mysql -u root -p

检查状态:

MariaDB [(none)]> show status like 'wsrep_%';

确认我们在以下情况下的集群大小为3:

wsrep_cluster_size    3

我们可以在任何节点上创建一个测试数据库,并在其他节点上检查其可用性:

root@node1:~# mysql -u root -p

# node2 and node3

root@node2:~# mysql -u root -p

MariaDB [(none)]> show databases;

root@node3:~# mysql -u root -p

MariaDB [(none)]> show databases;

\

步骤6:安装ProxySQL服务器

对于一个工作的Galera集群,我们需要设置一个ProxySQL服务器,它将流量平均分配给三个节点。ProxySQL可以在具有应用程序的服务器上运行,也可以作为独立服务器运行。本文将介绍如何在独立的Debian/CentOS主机上进行设置,步骤如下:

1、Debian/Ubuntu

添加ProxySQL存储库:

sudo apt install -y lsb-release 

wget -O - 'https://repo.proxysql.com/ProxySQL/repo_pub_key' | sudo apt-key add - 

echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.3.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list

安装ProxySQL:

sudo apt update

sudo apt install proxysql mysql-client

2、CentOS/RedHat

添加ProxySQL repo:

sudo tee /etc/yum.repos.d/proxysql.repo<<EOF

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.3.x/centos/\$releasever

gpgcheck=1

gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key

EOF

安装ProxySQL:

sudo yum install proxysql mysql-client

步骤7:在Ubuntu 20.04上配置ProxySQL

成功安装后,在主机上启动并启用该服务:

sudo systemctl enable --now proxysql

下一步是通过管理界面配置ProxySQL。管理员界面允许您在不重新启动代理的情况下保存配置。这是通过对管理数据库的SQL查询实现的。

要连接到ProxySQL管理界面,我们需要一个mysql客户端。admin接口在端口6032上本地运行,默认用户名/密码为admin/admin:

$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '

\

出于安全原因更改默认密码:

UPDATE global_variables SET variable_value='admin:Y0urP@ssw0rd' WHERE variable_name='admin-admin_credentials';

记得替换“Y0urP@ssw0rd“,请使用您选择的强密码。

ProxySQL配置系统由三层组成:

1、内存–在命令行上进行修改时更改。

2、磁盘–用于持续的配置更改。

3、Runtime–用作ProxySQL的有效配置。

因此,这意味着上面的查询只写入了内存。为了使其持久化,我们需要将配置复制到Runtime,然后将其保存到磁盘。

为此,请运行以下查询:

LOAD ADMIN VARIABLES TO RUNTIME;

SAVE ADMIN VARIABLES TO DISK;

步骤8:在Galera集群中配置监控

ProxySQL需要与Galera集群中的MariaDB节点通信,以了解它们的健康状态。这意味着ProxySQL必须通过专用用户连接到节点。

我们将在MariaDB节点之一上创建一个用户,该用户将通过集群自动复制,因为集群已经启动并正在运行。

MariaDB [(none)]> CREATE USER 'monitor'@'%' IDENTIFIED BY 'm0n1toRp@ssw0d';

MariaDB [(none)]> flush privileges;

将密码修改为您的首选密码。

步骤9:在ProxySQL中配置监视

配置ProxySQL管理员以不断监视后端节点。

添加我们在上面步骤中配置的用户凭据。请记住修改密码的值,以适应上一步中使用的任何内容:

ProxySQL Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';

ProxySQL Admin> UPDATE global_variables SET variable_value='m0n1toRp@ssw0d' WHERE variable_name='mysql-monitor_password';

为间隔添加以下监控参数:

ProxySQL Admin> UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');

确认我们刚才在上面步骤中配置的变量:

Admin> SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';

\

将更改保存到磁盘:

Admin> LOAD MYSQL VARIABLES TO RUNTIME;

Query OK, 0 rows affected (0.00 sec)

Admin> SAVE MYSQL VARIABLES TO DISK;

Query OK, 140 rows affected (0.01 sec)

步骤10:添加后端节点

下一步是添加Galera集群中存在的三个MariaDB节点。ProxySQL使用主机组对后端节点进行分类。主机组是由正数(例如1或2)标识的一组节点。拥有主机组的目的是帮助ProxySQL使用ProxySQL查询路由将查询路由到不同的主机集。

ProxySQL具有以下逻辑主机组:

1、写入器–这些是可以接受可以写入/更改数据的查询的MySQL节点–主节点。

2、读卡器–只能接受读取查询的节点–从属节点。

我们将为上述主机组分配以下主机组ID:

Writers–1,readers–2。默认情况下,编写器也是读取器。

在主数据库中配置mysql_replication_hostgroup表,并指定读写器主机组:

SHOW CREATE TABLE main.mysql_replication_hostgroups\G

Admin> INSERT INTO main.mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) VALUES (1,2,'galera_cluster');

添加Galera群集节点:

INSERT INTO main.mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.20.5.200',3306);

INSERT INTO main.mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.20.5.201',3306);

INSERT INTO main.mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.20.5.202',3306);

将更改保存到磁盘:

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

还将MySQL服务器和复制主机组从内存数据库加载到运行时数据结构:

LOAD MYSQL SERVERS TO RUNTIME;

确认服务器可访问:

Admin> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 3;

Admin> SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 3;

\

步骤11:创建MySQL用户

最后一步是创建将通过ProxySQL实例连接到集群的MySQL用户。

1、在Galera集群上创建远程用户

在galera集群上的一个节点上创建一个MySQL用户,用户将使用该节点进行连接:

MariaDB [(none)]> create user 'testuser'@'%' identified by 'testpassword';

向用户分配必要的角色,例如访问某个数据库:

MariaDB [(none)]> grant all privileges on testdb.* to 'testuser'@'%' with grant option;

MariaDB [(none)]> flush privileges;

2、在ProxySQL Admin上创建远程用户

这是通过在主数据库的mysql_users表中添加条目来完成的:

Admin> SHOW CREATE TABLE mysql_users\G

\

表通常是空的,用户是通过修改表来添加的。您可以指定用户名、密码和默认主机组:

Admin> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('testuser','testpassword',1);

SELECT * FROM mysql_users;

保存更改:

LOAD MYSQL USERS TO RUNTIME;

SAVE MYSQL USERS TO DISK;

步骤12:测试客户端连接

ProxySQL客户端在端口6033上运行。我们可以尝试使用在galera和proxysql上创建的用户连接到代理客户端:

mysql -utestuser -h 127.0.0.1 -P6033 -ptestpassword

root@proxy:~# mysql -utestuser1 -h 127.0.0.1 -P6033 -p

我们现在可以尝试在集群上运行查询:

mysql> show databases;

mysql> select @@hostname;

\

我们可以看到,testdb是我们在galera设置中分配了权限的数据库。我们还可以确认,我们正在从galera集群的node3获得响应。

步骤13:模拟节点故障

最后,我们必须测试当节点离线时会发生什么?关闭其中一个节点上的MariaDB服务,并检查ProxySQL管理界面上的状态:

Admin> SELECT hostgroup,srv_host,status FROM stats.stats_mysql_connection_pool;

\

其中一个节点的状态为SHUNNED,这意味着主机暂时不可用。在节点上重新启动MariaDB服务后,ProxySQL管理界面上的状态将变回联机状态。这意味着您现在可以再次向节点发送读/写查询。

至此,在Ubuntu 20.04服务器上安装和配置MariaDB Galera群集全部完成。当前可以确认,我们有一个工作的Galera集群,通过ProxySQL可以保证负载平衡和高可用性。