MySQL试验部署
一、结构框架

二、MySQL Galera部署
1、 环境准备
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
|---|---|---|---|---|
| galera1 | 192.168.52.133 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
| galera2 | 192.168.52.178 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
| galera3 | 192.168.52.179 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
| galera4 | 192.168.52.180 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
1.1、关闭防火墙和selinux,进行时间同步
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
systemctl disable --now firewalld.service
setenforce 0
1.2、主机解析(给每台主机进行解析,galera1-4)
cat <<e >/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.52.133 galera1
192.168.52.178 galera2
192.168.52.179 galera3
192.168.52.180 galera4
e
1.3、给每台虚拟机都导入创建该服务的yum源
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

1.4、每台主机禁用myql模块
dnf module disable -y mysql

1.5、每台虚拟机都下载mysql-wsrep-8.0和galera
yum install -y mysql-wsrep-8.0 galera

2、配置Galera1-4
1.1、四台虚拟器都启动服务,并改个密码
systemctl start mysqld
1.2、获取数据库初始化密码
password=$(cat /var/log/mysqld.log | awk '/[^_]password/{print $NF}' | tr -d ' ')
echo $password

1.3、改密码
mysqladmin -uroot -p password 'Q1w2e3@123!!!!!'

1.4、给每个服务都配置一个远程用户并授权,采用脚本方式执行
vim sql.sh
#!/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"

给sql.sh一个权限并运行

1.5、四台虚拟机服务都先停止
systemctl stop mysqld
3、配置 galera1 主机的my.cnf的文件
进入配置文件
vim /etc/my.cnf
添加配置文件
server-id=1 # 服务器 ID,用于唯一标识 MySQL 服务器
binlog_format=row # 二进制日志格式,行级别;statement:基于sql语句的复制;row:基于行的复制;mixed:混合复制
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.166.139' # 当前节点的 IP 地址
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!' # SST(状态快照传输)认证信息
wsrep_sst_method=rsync # SST 方法,使用 rsync 进行状态快照传输

启动galera1主机的mysql
systemctl start mysqld
查看端口是否开启
ss -tnlp

4、配置 galera2 主机的my.cnf的文件
server-id=2
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera3'
wsrep_node_name='galera2'
wsrep_node_address='192.168.166.140'
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!'
wsrep_sst_method=rsync
5、配置 galera3 主机的my.cnf的文件
server-id=3
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera2,galera4'
wsrep_node_name='galera3'
wsrep_node_address='192.168.166.141'
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!'
wsrep_sst_method=rsync
6、配置 galera4 主机的my.cnf的文件
server-id=4
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera2,galera3,galera1'
wsrep_node_name='galera4'
wsrep_node_address='192.168.166.142'
wsrep_sst_auth=syncuser:'Q1w2e3@123!!!!!'
wsrep_sst_method=rsync
7、在给galera1 主机的my.cnf的文件增加节点
[root@galera1 ~]# vim /etc/my.cnf #增加上节点,即修改这行内容如下,或见下图所示:wsrep_cluster_address='gcomm://galera2,galera3,galera4' # Galera 集群的地址,通常为 `gcomm://` 表示集群初始节点

重启galera1
systemctl restart mysqld
8、写入数据验证同步
登录g1数据库
mysql -uroot -p
创建数据库jx
create database jx;
查看g1数据库
show databases;

查看g2数据库同步

三、web集群部署
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
|---|---|---|---|---|
| web1 | 192.168.52.185 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
| web2 | 192.168.52.186 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
1、两台web安装yum文件
yum install -y nginx php php-mysqlnd php-fpm
yum install -y lrzsz
并解压DiscuzX-MitFrame

把upload文件转移到HTML中

给upload赋予apache权限

2、启动nginx php-fpm
systemctl start nginx php-fpm
3、配置Galrea与web互通(在galera1中)
mysql> create user discuz@'%' identified by 'Q1w2e3@123!!!!!';
mysql> grant all on discuzdb.* to discuz@'%';

4、打开web1 http://192.168.52.185/upload


5、安装完在glera1数据库中使用discuzdb
mysql> show databases;
mysql> use discuzdb

6、压缩upload,并发送给web2
tar zcvf upload.tgz upload/
scp upload.tgz 192.168.52.186:/root

7、web2中把upload移动到HTML目录下
tar xf /root/upload.tgz -C ./

四、Nginx proxy部署
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
|---|---|---|---|---|
| nginx proxy | 192.168.52.187 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
1、安装yum文件
yum install -y nginx php php-mysqlnd php-fpm
yum install -y lrzsz
2、进入配置文件
cd /etc/nginx/
vim nginx.conf

3、修改配置文件(添加Web1,2端口)
upstream webs {server 192.168.52.185:80;server 192.168.52.186:80;}
location / {proxy_pass http://webs;proxy_set_header Host $host; # 传递主机名(关键,影响路径解析)proxy_set_header X-Real-Ip $remote addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme; #传递协议(http/https)}

4、开启nginx
systemctl start nginx
五、NFS 网络存储
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
|---|---|---|---|---|
| NFS | 192.168.52.188 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核2G |
1、安装yum
yum install -y nfs-utils
yum install -y lrzsz
2、启动nfs并查看
systemctl start nfs-server.service
nfsstat

3、创建目录,创建vim
mkdir /home/webdata
vim /etc/exports

4、添加vim
/home/webdata 192.168.52.0/24(rw,sync,no_root_squash)
5、开启并查看

6、在Web1,2挂载nfs
mount 192.168.52.188:/home/webdata /usr/share/nginx/html/
7、在/home/webdata/目录下安装DiscuzX-MitFrame

8、把upload移出来
mv DiscuzX-MitFrame/upload/ ./
9、查看Web1,2中的ID
id apache
10、统一NFS的ID
groupadd -g 48 apache
useradd -u 48 -g 48 -s /sbin/nologin -d /usr/share/httpd apache
11、给upload授权限
chown -R apache upload/
