MySQL Galera Cluster部署如何实现负载均衡和高可用

目录

[1、 环境准备](#1、 环境准备)

1.1、配置主机解析:

2、配置

[2.1、配置 galera1 主机的my.cnf的文件](#2.1、配置 galera1 主机的my.cnf的文件)

[2.2、在给galera1 主机的my.cnf的文件增加节点](#2.2、在给galera1 主机的my.cnf的文件增加节点)

2.3、写入数据验证同步

2.7、配置nginx反向代理

1、 环境准备

关闭防火墙和selinux,进行时间同步

systemctl disable --now firewalld

setenforce 0

1.1、配置主机解析:

四台主机依次配置

复制代码
[root@galera1 ~]# cat <<e >/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.150.17 galera1
192.168.150.18 galera2
192.168.150.19 galera3
192.168.150.20 galera4
e

四台虚拟机都导入创建该服务的yum源

复制代码
[root@galera1 ~]# cat  <<e >> /etc/yum.repos.d/mysql-wsrep.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-8.0/redhat/8/x86_64/
enabled=1
gpgcheck=0
e

四台虚拟机需要禁用本地mysql模块

复制代码
[root@galera1 ~]# dnf module disable -y mysql

四台虚拟机都下载mysql-wsrep-8.0和galera

复制代码
[root@galera1 ~]# yum install -y mysql-wsrep-8.0 galera
  • mysql-wsrep-8.0:

    • mysql-wsrep-8.0 是 MySQL 8.0 版本的一个变体,集成了 WSREP(Write Set Replication)协议。这是一个用于数据库集群的复制协议,允许 MySQL 数据库节点之间的同步复制。

    • 这个版本的 MySQL 是通过 WSREP 协议来实现数据的一致性和高可用性。WSREP 协议确保了所有节点的数据库状态保持一致,支持事务的自动同步和冲突解决。

    • 通常,这种版本的 MySQL 是在集群配置中使用的,旨在提高系统的容错能力和可扩展性。

  • Galera:

    • Galera 是一个用于 MySQL 数据库的同步复制插件,它实现了 WSREP 协议。Galera 提供了一个多主节点的数据库集群方案,允许所有节点同时进行读写操作,并且确保数据在所有节点之间保持一致。

    • 它主要用于提高数据库的可用性、容错性和扩展性。Galera 使得所有节点都能够同时处理读写请求,这比传统的主从复制模式更具灵活性。

    • Galera 可以与 MySQL 以及 MariaDB 配合使用,它的主要特点包括全同步复制、自动节点加入、冲突检测和解决等。

2、配置

四台虚拟器都启动服务,并修改密码

复制代码
# 获取数据库初始化密码的步骤
[root@galera1 ~]# cat /var/log/mysqld.log |grep password
2025-10-22T11:23:35.283719Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: R0efj;qNC9A#
2025-10-22T11:23:41.233878Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'caching_sha2_password'
2025-10-22T11:23:41.233892Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'sha256_password'
2025-10-22T11:23:41.233902Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'mysql_native_password'

#修改密码
[root@galera1 ~]# mysqladmin -uroot -p password 'Q1w2e3@123!!!!!'
Enter password: 
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

四台服务都配置一个远程用户并授权,采用脚本方式执行

复制代码
#!/bin/bash

# MySQL 连接参数

MYSQL_USER="root"
MYSQL_PASS='Q1w2e3@123!!!!!'  # 替换为实际的 root 密码
MYSQL_HOST="localhost"           # 或者使用 IP 地址

# 创建远程用户和授予权限的 SQL 命令

SQL_COMMANDS="
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'Q1w2e3@123!!!!!';
GRANT ALL PRIVILEGES ON *.* TO 'syncuser'@'%';
FLUSH PRIVILEGES;
"

# 执行 SQL 命令

mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -h "$MYSQL_HOST" -e "$SQL_COMMANDS"

四台虚拟机服务都先停止

复制代码
[root@galera1 ~]# systemctl stop mysqld
2.1、配置 galera1 主机的my.cnf的文件
复制代码
server-id=1  # 服务器 ID,用于唯一标识 MySQL 服务器
binlog_format=row  # 二进制日志格式,行级别
innodb_file_per_table=1  # 为每个 InnoDB 表使用一个独立的表空间文件
innodb_autoinc_lock_mode=2  # 自增锁模式,2表示更高效的锁模式

wsrep_on=ON  # 启用 Galera 集群
wsrep_provider=/usr/lib64/galera/libgalera_smm.so  # Galera 提供者库的路径
wsrep_cluster_name='galera'  # Galera 集群的名称
wsrep_cluster_address='gcomm://'  # Galera 集群的地址,通常为 `gcomm://` 表示集群初始节点
wsrep_node_name='galera1'  # 当前节点的名称
wsrep_node_address='192.168.150.17'  # 当前节点的 IP 地址
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!'  # SST(状态快照传输)认证信息
wsrep_sst_method=rsync  # SST 方法,使用 rsync 进行状态快照传输

依次配置galera2、galera3、galera4并启动mysql

2.2、在给galera1 主机的my.cnf的文件增加节点
复制代码
server-id=1  # 服务器 ID,用于唯一标识 MySQL 服务器
binlog_format=row  # 二进制日志格式,行级别
innodb_file_per_table=1  # 为每个 InnoDB 表使用一个独立的表空间文件
innodb_autoinc_lock_mode=2  # 自增锁模式,2表示更高效的锁模式

wsrep_on=ON  # 启用 Galera 集群
wsrep_provider=/usr/lib64/galera/libgalera_smm.so  # Galera 提供者库的路径
wsrep_cluster_name='galera'  # Galera 集群的名称
wsrep_cluster_address='gcomm://galera2,galera3,galera4'  # Galera 集群的地址,通常为 `gcomm://` 表示集群初始节点
wsrep_node_name='galera1'  # 当前节点的名称
wsrep_node_address='192.168.150.17'  # 当前节点的 IP 地址
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!'  # SST(状态快照传输)认证信息
wsrep_sst_method=rsync  # SST 方法,使用 rsync 进行状态快照传输
2.3、写入数据验证同步

在 galera1主机写入数据,创建一个库

复制代码
mysql> create database jx;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

在其他主机上查看

复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

可以看到在 galera1主机创建的库,同步写入到了其他节点的mysql中。

2.4、在galera1中创建数据库用户并进行赋权

2.5、在web服务上搭建两个discuz站点,并将它们的数据库指向mysql galera 集群的其中一个站点

##2.4,2.5具体步骤查看博客https://blog.csdn.net/zzh_wj/article/details/153696288?spm=1001.2014.3001.5502

2.6、进入galera站点的数据库,可以看到同步的数据表

复制代码
mysql> use discuzdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------------------+
| Tables_in_discuzdb                 |
+------------------------------------+
| pre_common_admincp_cmenu           |
| pre_common_admincp_group           |
| pre_common_admincp_member          |
| pre_common_admincp_menu_platform   |
| pre_common_admincp_perm            |
| pre_common_admincp_session         |
| pre_common_admingroup              |
| pre_common_adminnote               |
2.7、配置nginx反向代理

配置ip_hash算法,指向两台discuz站点的web服务器

复制代码
    include /etc/nginx/conf.d/*.conf;
    upstream discuz {
        ip_hash;
        server 192.168.150.1:80;
        server 192.168.150.4:80;
        }
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
#        root         /usr/share/nginx/html;
        location / {
        proxy_pass      http://discuz;
        proxy_set_header Host $host;
        }

2.8、浏览器上访问nginx代理站点进行测试

相关推荐
last_zhiyin4 小时前
Oracle sql tuning guide 翻译 Part 6-4 --- Hint使用准则和Hint使用报告
数据库·sql·oracle·sql tunning
chenchihwen4 小时前
AI代码开发宝库系列:FAISS向量数据库
数据库·人工智能·python·faiss·1024程序员节
小光学长5 小时前
基于Vue的课程达成度分析系统t84pzgwk(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
摇滚侠5 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
周杰伦fans6 小时前
Navicat - 连接 mysql 、 sqlserver 数据库 步骤与问题解决
数据库·mysql·sqlserver
csdn_aspnet6 小时前
如何在 Ubuntu 24.04/22.04/20.04 上安装 MySQL 8.0
linux·mysql·ubuntu
码以致用6 小时前
StarRocks笔记
数据库·starrocks·olap·1024程序员节
auspicious航7 小时前
PostgreSQL数据库关于pg_rewind的认识
数据库·postgresql·oracle
最好结果7 小时前
MyBatis 精确查询逗号分隔字符串
mysql·mybatis·1024程序员节