MySQL部署
MySQL Galera 集群部署实践
一、结构框架
整体架构包含多个部分,用户通过 Nginx Proxy(R6)访问 Web 集群(R4、R5 等),Web 集群与 MySQL Galera 集群(R1、R2、R3 等)以及 MFS 网络存储(R7)交互,各组件通过网络设备连接,形成一个完整的服务架构,保障服务的高可用性与可扩展性。
二、MySQL Galera 部署
(一)环境准备
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
|---|---|---|---|---|
| galera1 | 192.168.25.134 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2 核 2G |
| galera2 | 192.168.25.138 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2 核 2G |
| galera3 | 192.168.25.129 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2 核 2G |
| galera4 | 192.168.25.170 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2 核 2G |
1. 关闭防火墙和 selinux,进行时间同步
执行以下命令:
cpp
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
systemctl disable --now firewalld.service
setenforce 0
2. 主机解析(给每台主机进行解析,galera1 - 4)
通过以下命令配置:
cpp
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
3. 给每台虚拟机都导入创建该服务的 yum 源
配置命令如下:
cpp
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
4. 每台主机禁用 mysql 模块
运行:
cpp
dnf module disable -y mysql
5. 每台虚拟机都下载 mysql - wsrep - 8.0 和 galera
执行安装命令:
cpp
yum install -y mysql-wsrep-8.0 galera
(二)配置 Galera1 - 4
1. 四台虚拟机都启动服务,并改个密码
启动服务:
cpp
systemctl start mysqld
2. 获取数据库初始化密码
使用命令:
cpp
password=$(cat /var/log/mysqld.log | awk '/\[^\]password/{print $NF}' | tr -d ' ')
echo $password
3. 改密码
执行:
cpp
mysqladmin -uroot -p password 'Q1w2e3@123!!!!!'
四、Nginx Proxy 部署(1 节点)
1. 节点配置清单
| 主机名 | IP 地址 | 系统版本 | 软件版本 | 硬件配置 |
|---|---|---|---|---|
| nginx proxy | 192.168.52.187 | Rocky Linux 9.4 | nginx、php、php-mysqlnd | 2 核 2G |
2. 核心操作
- 安装 Nginx:
bash
yum install -y nginx php php-mysqlnd php-fpm lrzsz - 配置负载均衡:编辑
/etc/nginx/nginx.conf,添加 Web 节点集群与代理规则:bash
在vim /etc/nginx/nginx.confhttp块中添加以下内容:ini
# 1. 定义Web节点集群(upstream块) upstream webs {server 192.168.52.185:80; # web1server 192.168.52.186:80; # web2 }# 2. 修改默认location块,代理到webs集群 location / {proxy_pass http://webs; # 转发请求到Web集群proxy_set_header Host $host; # 传递原始主机名(避免路径解析错误)proxy_set_header X-Real-Ip $remote_addr; # 传递客户端真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递IP链proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https) } - 启动 Nginx:
bash
systemctl start nginx - 验证:浏览器访问
http://192.168.52.187,应能正常打开 Discuz 页面,且请求会自动分发到 web1 或 web2。
6. Web1、Web2 节点挂载 NFS 共享目录
功能目标
将 NFS 服务器(IP:192.168.52.188)的/home/webdata目录,挂载到 Web 节点(Web1:192.168.52.185、Web2:192.168.52.186)的 Nginx 根目录/usr/share/nginx/html/,实现 Web 节点文件统一存储。
操作命令(Web1、Web2 节点均执行)
bash
# 挂载NFS共享目录到Web节点的Nginx根目录
mount 192.168.52.188:/home/webdata /usr/share/nginx/html/
关键说明
- 前提条件:需先在 NFS 服务器完成
/home/webdata目录创建及/etc/exports配置(允许192.168.52.0/24网段访问),并启动nfs-server服务。 - 临时挂载:上述命令为临时挂载,重启 Web 节点后挂载会失效;若需永久挂载,需编辑
/etc/fstab文件,添加如下内容:bash
# 编辑fstab文件 vim /etc/fstab # 添加一行(格式:NFS服务器目录 本地挂载点 文件系统 挂载参数 0 0) 192.168.52.188:/home/webdata /usr/share/nginx/html/ nfs defaults 0 0 # 生效配置(无需重启) mount -a
7. 在 NFS 服务器安装 DiscuzX-MitFrame
功能目标
在 NFS 共享目录/home/webdata中部署 Discuz 论坛应用,确保 Web1、Web2 挂载后可直接访问统一的应用文件,避免节点间文件不一致。
操作命令(仅在 NFS 服务器192.168.52.188执行)
bash
# 1. 进入NFS共享目录
cd /home/webdata# 2. 上传DiscuzX-MitFrame压缩包(通过lrzsz工具,本地选择文件上传)
rz# 3. 解压压缩包(假设压缩包名为DiscuzX-MitFrame.zip,需根据实际文件名调整)
unzip DiscuzX-MitFrame.zip
关键说明
- 工具依赖:需先在 NFS 服务器安装
unzip(解压工具)和lrzsz(文件传输工具),命令:yum install -y unzip lrzsz。 - 目录结构:解压后会生成
DiscuzX-MitFrame目录,后续需将其中的upload(Discuz 核心应用目录)移动到/home/webdata根目录。
8. 移动 Discuz 的 upload 目录到 NFS 共享根目录
功能目标
简化 Web 节点访问路径(直接通过http://Web节点IP/upload访问应用),并确保应用文件在 NFS 共享目录的根层级,便于权限管理。
操作命令(仅在 NFS 服务器192.168.52.188执行)
bash
# 进入NFS共享目录
cd /home/webdata# 移动upload目录到当前目录(即/home/webdata/下)
mv DiscuzX-MitFrame/upload/ ./
关键说明
- 路径验证:执行后通过
ls命令查看,/home/webdata目录下应存在upload文件夹,此时可删除无用的DiscuzX-MitFrame空目录:rm -rf DiscuzX-MitFrame。
9. 查看 Web1、Web2 节点的 apache 用户 ID
功能目标
获取 Web 节点(Web1、Web2)中apache用户的 UID(用户 ID)和 GID(组 ID),后续在 NFS 服务器统一配置相同 ID,避免因权限不匹配导致 Web 节点无法读写 NFS 文件。
操作命令(Web1、Web2 节点均执行)
bash
# 查看apache用户的ID信息(包含UID、GID及所属组)
id apache
输出示例与解读
plaintext
uid=48(apache) gid=48(apache) groups=48(apache)
- 关键信息:上述输出中,
uid=48(用户 ID)、gid=48(组 ID)为默认值,若 Web 节点输出不同(如uid=500),需以实际输出的 UID/GID 为准,后续在 NFS 服务器同步配置。
10. 在 NFS 服务器统一 apache 用户 ID(与 Web 节点一致)
功能目标
确保 NFS 服务器的apache用户 UID/GID 与 Web1、Web2 完全相同,解决 “Web 节点有权限但无法读写 NFS 文件” 的权限映射问题(NFS 权限基于 UID/GID 而非用户名)。
操作命令(仅在 NFS 服务器192.168.52.188执行,以 UID=48、GID=48 为例)
bash
# 1. 创建apache组,指定GID=48(需与Web节点的apache组GID一致)
groupadd -g 48 apache# 2. 创建apache用户,指定UID=48、GID=48,禁止登录(仅用于文件权限),家目录为/usr/share/httpd
useradd -u 48 -g 48 -s /sbin/nologin -d /usr/share/httpd apache
关键说明
- 冲突处理:若 NFS 服务器已存在
apache用户 / 组,需先删除旧用户 / 组(谨慎操作,确保无其他应用依赖):bash
# 删除旧apache用户(需先删除用户所属进程,避免占用) userdel apache # 删除旧apache组 groupdel apache - 参数解释:
-s /sbin/nologin:禁止 apache 用户登录系统(仅作为权限载体);-d /usr/share/httpd:指定用户家目录(与 Web 节点 apache 用户家目录一致,避免异常)。
11. 给 NFS 中的 upload 目录授权 apache 用户
功能目标
赋予apache用户(Web 节点运行 Nginx/PHP 的用户)对upload目录的读写权限,确保 Web 节点可正常安装、运行 Discuz 应用(如写入配置文件、上传附件)。
操作命令(仅在 NFS 服务器192.168.52.188执行)
bash
# 进入NFS共享目录
cd /home/webdata# 递归授权:将upload目录及所有子文件的所有者改为apache用户
chown -R apache upload/