使用haproxy设置ubuntu 18.04上的Mariadb Galera集群

时间:2020-02-23 14:39:02  来源:igfitidea点击:

如何在Ubuntu 18.04上设置Mariadb Galera集群,并作为负载平衡器。

Mariadb Galera集群的顶级功能是:它提供了主动活动的多主拓扑,可以读取和写入任何群集Nodeit的自动节点JoiningAutom会员控制,失败的节点从ClusterShas真正的并行复制中删除,在行leveldirect客户端连接上

从这些功能中,我们可以获得通常在数据库复制中通常看到的事务或者奇怪的从站滞后的损失,因为所有服务器都具有最新数据。
通过在Ubuntu 18.04服务器上使用MariaDB Galera Cluster,我们还可以获得来自连接客户端的小延迟的读取和写入的可扩展性。

为了基于服务器上的圆形磁铁或者最少的连接进行公平负载平衡,我们将利用HAProxy,它是一种生产级开源负载平衡器。

Ubuntu 18.04上的Setup Mariadb Galera集群

设置MariaDB Galera Cluster时,建议具有奇数服务器。
最小是三个服务器。
我的实验室环境将基于下图:

我更喜欢使用主机名,而不是我所有配置中的硬编码IP地址。
为此编写,让我们使用正确的短主机名和所有服务器的IP地址填充/etc/hosts。

# cat /etc/hosts
10.131.69.129   galera-haproxy-01
10.131.74.92    galera-db-01
10.131.35.167   galera-db-02
10.131.65.13    galera-db-03

我们必须注意到我的服务器不在同一子网上。
建议确保网络侧没有单点故障。
我们可以测试一切都使用ping工作。

第1步:在Galera节点上安装MariaDB数据库服务器

我们将首先在所有Galera群集节点上安装MariaDB:Galera-DB-01Galera-DB-02Galera-DB-03

在Ubuntu 18.04和Centos 7上使用我们的上一个教程安装MariaDB 10.x在Ubuntu 18.04上安装MariaDB。
完成所有节点上的MariaDB数据库服务器完成后,请继续下一步。

第2步:配置第一Galera Cluster节点

设置Galera群集时,我们需要从一个节点开始,该节点将假设主设备的角色。
编辑第一个节点主要配置以配置默认字符集。

$sudo vim /etc/mysql/mariadb.cnf

取消关注这些行:

character-set-server = utf8
character_set_server = utf8

然后添加Galera特定的配置:

# vim /etc/mysql/mariadb.conf.d/galera.cnf

在Galera-DB-01 Galera配置文件上添加以下内容:

[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.131.74.92,10.131.35.167,10.131.65.13"
wsrep_cluster_name="mariadb-galera-cluster"
wsrep_sst_method=rsync
# Cluster node configuration
wsrep_node_address="10.131.74.92"
wsrep_node_name="galera-db-01"

Rember用Galera群节点IP地址替换10.131.74.92,10.131.35.167,10.131.65.13.

第3步:配置其他Galera群集节点

我们现在需要将配置添加到Galera Cluster节点2和节点3.

对于Galera-DB-02:

Hyman@theitroad:~# cat /etc/mysql/mariadb.conf.d/galera.cnf
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.131.74.92,10.131.35.167,10.131.65.13"
wsrep_cluster_name="mariadb-galera-cluster"
wsrep_sst_method=rsync
# Cluster node configuration
wsrep_node_address="10.131.35.167"
wsrep_node_name="galera-db-02"

对于Galera-DB-03:

Hyman@theitroad:~# cat /etc/mysql/mariadb.conf.d/galera.cnf
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.131.74.92,10.131.35.167,10.131.65.13"
wsrep_cluster_name="mariadb-galera-cluster"
wsrep_sst_method=rsync
# Cluster node configuration
wsrep_node_address="10.131.65.13"
wsrep_node_name="galera-db-03"

我们必须指出,每个节点上的更改是群集节点配置

第4步:在Ubuntu 18.04上启动Galera Cluster

在所有三个节点上停止MariaDB:

# systemctl stop mariadb

现在在节点1 - Galera-node-01上启动新Galera集群:

# galera_new_cluster

检查Galera状态是否正在运行:

# mysql -u root -p -e "show status like 'wsrep_%'"
Enter password: 
+------------------------------+--------------------------------------+
| Variable_name                | Value                                |
+------------------------------+--------------------------------------+
| wsrep_apply_oooe             | 0.000000                             |
| wsrep_apply_oool             | 0.000000                             |
| wsrep_apply_window           | 0.000000                             |
| wsrep_causal_reads           | 0                                    |
| wsrep_cert_deps_distance     | 0.000000                             |
| wsrep_cert_index_size        | 0                                    |
| wsrep_cert_interval          | 0.000000                             |
| wsrep_cluster_conf_id        | 1                                    |
| wsrep_cluster_size           | 1                                    |
| wsrep_cluster_state_uuid     | 9f957c6d-76b4-11e8-a71a-17cc0eca13f1 |
| wsrep_cluster_status         | Primary                              |
| wsrep_commit_oooe            | 0.000000                             |
| wsrep_commit_oool            | 0.000000                             |
| wsrep_commit_window          | 0.000000                             |
| wsrep_connected              | ON                                   |
| wsrep_desync_count           | 0                                    |
| wsrep_evs_delayed            |                                      |
| wsrep_evs_evict_list         |                                      |
| wsrep_evs_repl_latency       | 0/0/0/0/0                            |
| wsrep_evs_state              | OPERATIONAL                          |
| wsrep_flow_control_paused    | 0.000000                             |
| wsrep_flow_control_paused_ns | 0                                    |
| wsrep_flow_control_recv      | 0                                    |
| wsrep_flow_control_sent      | 0                                    |
| wsrep_gcomm_uuid             | 9f945140-76b4-11e8-84c6-a66f9e2978f6 |
| wsrep_incoming_addresses     | 10.131.74.92:3306                    |
| wsrep_last_committed         | 0                                    |
| wsrep_local_bf_aborts        | 0                                    |
| wsrep_local_cached_downto    | 18446744073709551615                 |
| wsrep_local_cert_failures    | 0                                    |
| wsrep_local_commits          | 0                                    |
| wsrep_local_index            | 0                                    |
| wsrep_local_recv_queue       | 0                                    |
| wsrep_local_recv_queue_avg   | 0.000000                             |
| wsrep_local_recv_queue_max   | 1                                    |
| wsrep_local_recv_queue_min   | 0                                    |
| wsrep_local_replays          | 0                                    |
| wsrep_local_send_queue       | 0                                    |
| wsrep_local_send_queue_avg   | 0.000000                             |
| wsrep_local_send_queue_max   | 1                                    |
| wsrep_local_send_queue_min   | 0                                    |
| wsrep_local_state            | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| wsrep_local_state_uuid       | 9f957c6d-76b4-11e8-a71a-17cc0eca13f1 |
| wsrep_protocol_version       | 8                                    |
| wsrep_provider_name          | Galera                               |
| wsrep_provider_vendor        | Codership Oy <Hyman@theitroad>    |
| wsrep_provider_version       | 25.3.23(r3789)                       |
| wsrep_ready                  | ON                                   |
| wsrep_received               | 2                                    |
| wsrep_received_bytes         | 148                                  |
| wsrep_repl_data_bytes        | 0                                    |
| wsrep_repl_keys              | 0                                    |
| wsrep_repl_keys_bytes        | 0                                    |
| wsrep_repl_other_bytes       | 0                                    |
| wsrep_replicated             | 0                                    |
| wsrep_replicated_bytes       | 0                                    |
| wsrep_thread_count           | 2                                    |
+------------------------------+--------------------------------------+

初始群集大小应为1

Hyman@theitroad:~# mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Enter password: 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

在Galera-node-02上,启动MariaDB服务:

# systemctl start mariadb

再次检查群集大小,它应该已更改为2

# mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Enter password: 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

在Galera-DB-03上开始MariaDB:

# systemctl start mariadb

再次检查群集大小,应该是3

# mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Enter password: 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

如果完全设置了所有内容,则可以开始测试。

第5步:测试Galera Cluster操作

要测试Galera群集,我们将在一台服务器上创建一个测试数据库,并确认它已在其他节点上复制。
以root用户身份登录Galera群集的任何成员:

Hyman@theitroad:~# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.3.7-MariaDB-1:10.3.7+maria~bionic-log mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database galera_test;
Query OK, 1 row affected (0.004 sec)

登录到另一个节点并检查数据库是否存在。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| galera_test        |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.000 sec)

第6步:安装和配置haproxy

对于HAProxy的安装和配置作为Mariadb Galera集群的负载均衡器,请参阅我们的教程:Galera Cluster高可用性与Ubuntu 18.04/CentOS 7上的Haproxy。