篮之新喜 发表于 2025-3-11 03:51:00

MySQL 主主复制与 Redis 环境安装部署

MySQL 主主复制与 Redis 环境安装部署

本指南将具体介绍怎样在服务器上部署一个MySQL 主主(Master-Master)复制环境以及Redis缓存服务。通过本指南,您将能够搭建一个高可用、高性能的数据库与缓存系统,适用于中大型应用场景。
目录


[*]前提条件
[*]MySQL 主主复制环境配置

[*]2.1 安装 MySQL
[*]2.2 配置 MySQL 主主复制
[*]2.3 启动复制并验证

[*]Redis 环境安装与配置

[*]3.1 安装 Redis
[*]3.2 配置 Redis
[*]3.3 启动 Redis 服务

[*]高可用与负载均衡设计

[*]4.1 MySQL 负载均衡计谋
[*]4.2 Redis 高可用方案(Redis Sentinel)

[*]安全性配置
[*]监控与备份计谋
[*]常见标题与解决方案
[*]总结
1. 前提条件

在开始之前,请确保满足以下前提条件:


[*]服务器准备:准备至少两台物理服务器或虚拟机,操作系统建议使用 CentOS 7/8 或 Ubuntu 20.04+。
[*]网络配置:确保服务器之间网络通畅,能够通过内网 IP 相互访问。
[*]权限:需要具备服务器的 root 权限或具备 sudo 权限的用户。
[*]时间同步:确保所有服务器的时间同步,建议使用 NTP 服务。
2. MySQL 主主复制环境配置

MySQL 主主复制允许两个或多个 MySQL 实例相互复制数据,实现数据的高可用性和负载均衡。以下步骤将指导您在两台服务器上配置 MySQL 主主复制。
2.1 安装 MySQL

本文以 MySQL 8.0 为例,以下步骤适用于 CentOS 7 系统。
2.1.1 添加 MySQL 堆栈

在每台服务器上实行以下下令添加 MySQL 官方堆栈:
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm -y
2.1.2 安装 MySQL

sudo yum install mysql-server -y
2.1.3 启动 MySQL 服务

sudo systemctl start mysqld
sudo systemctl enable mysqld
2.1.4 获取初始 root 暗码

初始安装完成后,MySQL 会生成一个临时 root 暗码,实行以下下令检察:
sudo grep 'temporary password' /var/log/mysqld.log
2.1.5 设置 root 暗码

使用临时暗码登录 MySQL 并设置新暗码:
mysql_secure_installation
按照提示完成安全配置,包括设置新暗码、删除匿名用户、克制长途 root 登录等。
2.2 配置 MySQL 主主复制

假设有两台服务器:


[*]Server A

[*]IP: 192.168.1.1
[*]主机名: mysql-master1

[*]Server B

[*]IP: 192.168.1.2
[*]主机名: mysql-master2

2.2.1 配置 Server A

编辑 MySQL 配置文件 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf,根据实际文件位置调整。

server-id=1
log_bin=mysql-bin
binlog_format=ROW
relay_log=relay-bin
auto_increment_increment=2
auto_increment_offset=1
replicate-same-server-id=0
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_transaction_dependency_history_size=100
2.2.2 配置 Server B

编辑 MySQL 配置文件,配置与 Server A 不同的 server-id 和 auto_increment_offset。

server-id=2
log_bin=mysql-bin
binlog_format=ROW
relay_log=relay-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-same-server-id=0
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_transaction_dependency_history_size=100
2.2.3 重启 MySQL 服务

在两台服务器上实行以下下令重启 MySQL 服务,使配置生效:
sudo systemctl restart mysqld
2.2.4 创建复制用户

在 Server A 和 Server B 上分别创建复制用户。
在 Server A 实行:
CREATE USER 'replicator'@'%' IDENTIFIED WITH mysql_native_password BY 'password123';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
在 Server B 实行:
CREATE USER 'replicator'@'%' IDENTIFIED WITH mysql_native_password BY 'password123';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
   注意:请将 'password123' 替换为更强的暗码,并确保网络防火墙允许两台服务器之间的3306端口通讯。
2.2.5 获取 Master 状态

在 Server A 和 Server B 上分别实行以下下令获取 MASTER 状态信息。
在 Server A 实行:
SHOW MASTER STATUS;

输出示例:
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154      |            |                  | e6d...             |
+------------------+----------+--------------+------------------+-------------------+
在 Server B 实行:
SHOW MASTER STATUS;

输出示例:
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 156      |            |                  | a1b...             |
+------------------+----------+--------------+------------------+-------------------+
记录下各自的 File 和 Position 或 Executed_Gtid_Set,用于配置 CHANGE MASTER TO。
2.2.6 配置复制

在 Server A 配置复制到 Server B:
CHANGE MASTER TO
MASTER_HOST='192.168.1.2',
MASTER_USER='replicator',
MASTER_PASSWORD='password123',
MASTER_AUTO_POSITION=1;

START SLAVE;
在 Server B 配置复制到 Server A:
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='replicator',
MASTER_PASSWORD='password123',
MASTER_AUTO_POSITION=1;

START SLAVE;
   注意:MASTER_AUTO_POSITION=1 表现使用 GTID 复制模式。
2.2.7 验证复制状态

在两台服务器上分别实行以下下令检察复制状态:
SHOW SLAVE STATUS\G
确保以下字段显示为 Yes 或正常状态:


[*]Slave_IO_Running: Yes
[*]Slave_SQL_Running: Yes
[*]Last_IO_Error: (null)
[*]Last_SQL_Error: (null)
2.3 启动复制并验证

为了验证主主复制是否正常工作,可以在任一服务器上创建测试数据库和表,并插入数据,查抄数据是否同步到另一台服务器。
-- 在 Server A 上执行
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

-- 在 Server B 上验证数据
USE test_db;
SELECT * FROM users;
应输出插入的 Alice 数据,反之亦然。
   注意事项:


[*]制止在主主复制环境下直接操作自增主键,以防止主键冲突。
[*]可以通过配置 auto_increment_increment 和 auto_increment_offset 来制止主键冲突。
3. Redis 环境安装与配置

Redis 是一个高性能的键值存储系统,常用于缓存、消息队列等场景。以下步骤将指导您在服务器上安装和配置 Redis。
3.1 安装 Redis

本文以 Redis 6.2 为例,以下步骤适用于 CentOS 7 系统。
3.1.1 安装必要依赖

sudo yum install -y gcc jemalloc-devel tcl
3.1.2 下载 Redis 源码

cd /usr/local/src
sudo wget http://download.redis.io/releases/redis-6.2.6.tar.gz
sudo tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
3.1.3 编译安装 Redis

sudo make
sudo make install
3.1.4 创建 Redis 用户和目录

sudo adduser --system --group --no-create-home redis
sudo mkdir /etc/redis
sudo mkdir /var/lib/redis
sudo chown redis:redis /var/lib/redis
3.2 配置 Redis

复制默认配置文件到 /etc/redis/ 目录,并进行必要的修改。
sudo cp redis.conf /etc/redis/
使用编辑器打开配置文件进行修改:
sudo vi /etc/redis/redis.conf
修改或确认以下配置项:
# 监听所有接口(根据实际需求调整)
bind 0.0.0.0

# 禁用保护模式(确保访问安全)
protected-mode no

# 设置持久化策略
save 900 1
save 300 10
save 60 10000

# 设置数据库文件路径
dir /var/lib/redis

# 设置日志级别
loglevel notice
logfile "/var/log/redis/redis.log"

# 设置后台运行
daemonize yes

# 设置 pid 文件
pidfile /var/run/redis.pid

# 设置最大客户端数量
maxclients 10000

# 开启远程管理(可选,需确保安全)
# requirepass your_redis_password
   安全提示:


[*]强烈建议启用暗码认证,修改 requirepass 并设置复杂暗码。
[*]如果 Redis 需要对外开放,请确保通过防火墙和安全组限定访问泉源。
3.3 启动 Redis 服务

3.3.1 创建 Redis 系统服务文件

创建 /etc/systemd/system/redis.service 文件:

Description=Redis In-Memory Data Store
After=network.target


User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always


WantedBy=multi-user.target
3.3.2 启动并启用 Redis 服务

sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl enable redis
3.3.3 验证 Redis 服务状态

sudo systemctl status redis
应显示 Redis 正在运行状态。
3.3.4 测试 Redis 毗连

redis-cli ping
应返回 PONG。
4. 高可用与负载均衡设计

为了确保系统的高可用性和性能,需要为 MySQL 和 Redis 配置相应的负载均衡和高可用方案。
4.1 MySQL 负载均衡计谋

在主主复制环境中,需考虑以下负载均衡计谋:
4.1.1 使用 HAProxy 进行负载均衡

HAProxy 是一个高性能的 TCP/HTTP 负载均衡器,适用于 MySQL 负载均衡。
安装 HAProxy

sudo yum install haproxy -y
配置 HAProxy

编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg,添加 MySQL 后端配置:
frontend mysql_front
    bind *:3307
    mode tcp
    default_backend mysql_back

backend mysql_back
    mode tcp
    balance roundrobin
    option mysql-check user replicator
    server mysql1 192.168.1.1:3306 check
    server mysql2 192.168.1.2:3306 check
   阐明:


[*]前端监听 3307 端口,应用步伐通过该端口毗连 MySQL。
[*]后端定义两台 MySQL 服务器,使用 roundrobin 负载均衡计谋。
[*]mysql-check 用于健康查抄,确保只有可用的后端服务器接收流量。
启动并启用 HAProxy

sudo systemctl start haproxy
sudo systemctl enable haproxy
测试 HAProxy

应用步伐毗连字符串示例:
jdbc:mysql://<HAProxy_IP>:3307/test_db?user=<username>&password=<password>
4.2 Redis 高可用方案(Redis Sentinel)

Redis Sentinel 提供监控、通知、主动故障转移和配置中心功能。以下步骤将配置 Redis Sentinel 以实现 Redis 的高可用性。
4.2.1 部署 Redis Sentinel

在至少三个节点上部署 Redis Sentinel,以制止单点故障。以下以单个节点示例,实际部署请在多台服务器上进行。
安装 Redis Sentinel

Redis Sentinel 是 Redis 的一部门,无需单独安装。在每台 Redis 服务器上编辑配置文件添加 Sentinel 配置。
配置 Sentinel

创建 Sentinel 配置文件 /etc/redis/sentinel.conf:
port 26379
sentinel monitor mymaster 192.168.1.1 6379 2
sentinel auth-pass mymaster your_redis_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1


[*]mymaster:Master 名称,可自定义。
[*]192.168.1.1 6379:Master Redis 实例的 IP 和端口。
[*]2:达到多少个 Sentinel 节点确认 master 故障。
[*]your_redis_password:如果 Redis 设置了暗码,需要配置此项。
启动 Sentinel

创建 Sentinel 系统服务文件 /etc/systemd/system/redis-sentinel.service:

Description=Redis Sentinel
After=network.target


User=redis
Group=redis
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/sentinel.conf
Restart=always


WantedBy=multi-user.target
启动并启用 Sentinel 服务:
sudo systemctl daemon-reload
sudo systemctl start redis-sentinel
sudo systemctl enable redis-sentinel
4.2.2 验证 Sentinel 配置

在任一 Sentinel 节点上实行以下下令检察 Sentinel 状态:
redis-cli -p 26379 sentinel masters
应显示 Master 的具体信息。
5. 安全性配置

确保数据库和缓存系统的安全性是至关紧张的。以下是一些安全配置建议:
5.1 防火墙配置

使用 firewalld 或 iptables 限定对 MySQL 和 Redis 服务的访问,仅允许特定 IP 访问。
示例:使用 firewalld 配置端口

sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=3307/tcp    # HAProxy 端口
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --permanent --add-port=26379/tcp
sudo firewall-cmd --reload
修改为仅允许特定 IP 地点访问,比方仅允许内网访问:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
# 类似配置其他端口
5.2 强化 MySQL 和 Redis 认证



[*]MySQL:确保 root 用户不允许长途登录,使用强暗码,并定期更换暗码。
[*]Redis:启用暗码认证,配置 requirepass,并在 Sentinel 配置中同步暗码。
5.3 加密传输

考虑使用 SSL/TLS 加密 MySQL 和 Redis 的传输,防止数据在传输过程中被窃听。


[*]MySQL:配置 ssl 干系参数,启用 SSL 毗连。
[*]Redis:Redis 6.0 及以上支持 TLS,可在配置文件中启用。
6. 监控与备份计谋

6.1 监控

使用专业的监控工具及时监控 MySQL 和 Redis 的性能和健康状态。


[*]Prometheus + Grafana:采集和可视化监控指标。
[*]Percona Monitoring and Management (PMM):专为 MySQL 设计的监控工具。
[*]Redis Exporter:用于 Prometheus 的 Redis 指标收集工具。
6.2 备份

制定定期备份计谋,确保数据安全与可恢复性。


[*]MySQL 备份:

[*]使用 mysqldump 进行逻辑备份。
[*]使用 Percona XtraBackup 进行物理备份。

[*]Redis 备份:

[*]配置 SAVE 规则,定期生成 RDB 文件。
[*]使用 Redis Backup Tools 或 RDB 拷贝脚本 进行备份。

6.3 主动化脚本

编写主动化脚本,定期实行备份使命,并将备份文件存储在安全的位置,如长途服务器或云存储。
7. 常见标题与解决方案

7.1 MySQL 复制不工作

标题描述:SHOW SLAVE STATUS\G
中 Slave_IO_Running 或 Slave_SQL_Running 显示 No。
解决方案:

[*]查抄复制用户权限是否精确。
[*]确认网络毗连正常,防火墙未拦截。
[*]查抄 MySQL 配置是否精确,尤其是 server-id、log_bin 等参数。
[*]检察错误日记,定位具体错误信息。
7.2 HAProxy 无法毗连 MySQL 后端

标题描述:应用步伐无法通过 HAProxy 毗连 MySQL,或毗连非常。
解决方案:

[*]确认 HAProxy 配置文件是否精确,后端服务器 IP 和端口配置无误。
[*]查抄后端 MySQL 服务是否正常运行。
[*]检察 HAProxy 日记,分析毗连失败原因。
[*]确认防火墙配置允许 HAProxy 与 MySQL 后端通讯。
7.3 Redis Sentinel 未能主动故障转移

标题描述:当 Master Redis 节点宕机时,Sentinel 未能主动进行故障转移。
解决方案:

[*]确认 Sentinel 配置文件中的 sentinel monitor 参数精确无误。
[*]确保至少有三个 Sentinel 实例在运行。
[*]查抄 Sentinel 日记,检察故障转移干系错误信息。
[*]确认 Sentinel 节点之间的网络通讯正常。
8. 总结

通过本指南,您已成功搭建了一个 MySQL 主主复制与 Redis 缓存的高可用环境。以下是关键要点总结:

[*]环境准备:确保服务器配置、网络通畅和必要的权限。
[*]MySQL 主主复制:安装 MySQL,两台服务器配置不同的 server-id 和复制参数,确保数据双向同步。
[*]Redis 安装与配置:编译安装 Redis,进行必要的安全配置,确保缓存服务稳固运行。
[*]高可用与负载均衡:使用 HAProxy 进行 MySQL 负载均衡,配置 Redis Sentinel 实现 Redis 高可用。
[*]安全性配置:通过防火墙、强暗码和加密传输确保系统安全。
[*]监控与备份:部署监控工具,制定定期备份计谋,确保系统的可见性和数据安全。
[*]故障扫除:了解常见标题的解决方法,确保系统稳固运行。
最终建议:


[*]定期维护:定期查抄系统状态,更新软件版本,应用安全补丁。
[*]性能优化:根据监控数据优化数据库和缓存配置,提升系统性能。
[*]扩展性设计:根据业务增长需求,灵活扩展 MySQL 和 Redis 实例,确保系统可伸缩性。
[*]文档与培训:记录系统配置与操作流程,定期培训运维团队,提升团队应急响应本领。
通过科学的规划和过细的实行,您将拥有一个稳固、高效且安全的数据库与缓存系统,满足业务发展的需要。如遇到复杂标题,可以下方留言。
祝您的部署顺利!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL 主主复制与 Redis 环境安装部署