更新时间:2022-12-24 09:28:34浏览次数:917+次
本文介绍如何使用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可以保证负载平衡和高可用性。