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

打印 上一主题 下一主题

主题 968|帖子 968|积分 2914

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/8Ubuntu 20.04+
  • 网络配置:确保服务器之间网络通畅,能够通过内网 IP 相互访问。
  • 权限:需要具备服务器的 root 权限或具备 sudo 权限的用户。
  • 时间同步:确保所有服务器的时间同步,建议使用 NTP 服务。

2. MySQL 主主复制环境配置

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

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

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

  1. sudo yum install mysql-server -y
复制代码
2.1.3 启动 MySQL 服务

  1. sudo systemctl start mysqld
  2. sudo systemctl enable mysqld
复制代码
2.1.4 获取初始 root 暗码

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

使用临时暗码登录 MySQL 并设置新暗码:
  1. 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,根据实际文件位置调整。
  1. [mysqld]
  2. server-id=1
  3. log_bin=mysql-bin
  4. binlog_format=ROW
  5. relay_log=relay-bin
  6. auto_increment_increment=2
  7. auto_increment_offset=1
  8. replicate-same-server-id=0
  9. gtid_mode=ON
  10. enforce_gtid_consistency=ON
  11. master_info_repository=TABLE
  12. relay_log_info_repository=TABLE
  13. binlog_transaction_dependency_history_size=100
复制代码
2.2.2 配置 Server B

编辑 MySQL 配置文件,配置与 Server A 不同的 server-id 和 auto_increment_offset。
  1. [mysqld]
  2. server-id=2
  3. log_bin=mysql-bin
  4. binlog_format=ROW
  5. relay_log=relay-bin
  6. auto_increment_increment=2
  7. auto_increment_offset=2
  8. replicate-same-server-id=0
  9. gtid_mode=ON
  10. enforce_gtid_consistency=ON
  11. master_info_repository=TABLE
  12. relay_log_info_repository=TABLE
  13. binlog_transaction_dependency_history_size=100
复制代码
2.2.3 重启 MySQL 服务

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

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

在 Server A 和 Server B 上分别实行以下下令获取 MASTER 状态信息。
在 Server A 实行:
  1. SHOW MASTER STATUS;
复制代码
输出示例:
  1. +------------------+----------+--------------+------------------+-------------------+
  2. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  3. +------------------+----------+--------------+------------------+-------------------+
  4. | mysql-bin.000001 | 154      |              |                  | e6d...             |
  5. +------------------+----------+--------------+------------------+-------------------+
复制代码
在 Server B 实行:
  1. SHOW MASTER STATUS;
复制代码
输出示例:
  1. +------------------+----------+--------------+------------------+-------------------+
  2. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  3. +------------------+----------+--------------+------------------+-------------------+
  4. | mysql-bin.000001 | 156      |              |                  | a1b...             |
  5. +------------------+----------+--------------+------------------+-------------------+
复制代码
记录下各自的 File 和 Position 或 Executed_Gtid_Set,用于配置 CHANGE MASTER TO。
2.2.6 配置复制

在 Server A 配置复制到 Server B:
  1. CHANGE MASTER TO
  2.   MASTER_HOST='192.168.1.2',
  3.   MASTER_USER='replicator',
  4.   MASTER_PASSWORD='password123',
  5.   MASTER_AUTO_POSITION=1;
  6. START SLAVE;
复制代码
在 Server B 配置复制到 Server A:
  1. CHANGE MASTER TO
  2.   MASTER_HOST='192.168.1.1',
  3.   MASTER_USER='replicator',
  4.   MASTER_PASSWORD='password123',
  5.   MASTER_AUTO_POSITION=1;
  6. START SLAVE;
复制代码
  注意:MASTER_AUTO_POSITION=1 表现使用 GTID 复制模式。
  2.2.7 验证复制状态

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


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

为了验证主主复制是否正常工作,可以在任一服务器上创建测试数据库和表,并插入数据,查抄数据是否同步到另一台服务器。
  1. -- 在 Server A 上执行
  2. CREATE DATABASE test_db;
  3. USE test_db;
  4. CREATE TABLE users (
  5.   id INT AUTO_INCREMENT PRIMARY KEY,
  6.   name VARCHAR(50),
  7.   email VARCHAR(100)
  8. );
  9. INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
  10. -- 在 Server B 上验证数据
  11. USE test_db;
  12. 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 安装必要依赖

  1. sudo yum install -y gcc jemalloc-devel tcl
复制代码
3.1.2 下载 Redis 源码

  1. cd /usr/local/src
  2. sudo wget http://download.redis.io/releases/redis-6.2.6.tar.gz
  3. sudo tar xzf redis-6.2.6.tar.gz
  4. cd redis-6.2.6
复制代码
3.1.3 编译安装 Redis

  1. sudo make
  2. sudo make install
复制代码
3.1.4 创建 Redis 用户和目录

  1. sudo adduser --system --group --no-create-home redis
  2. sudo mkdir /etc/redis
  3. sudo mkdir /var/lib/redis
  4. sudo chown redis:redis /var/lib/redis
复制代码
3.2 配置 Redis

复制默认配置文件到 /etc/redis/ 目录,并进行必要的修改。
  1. sudo cp redis.conf /etc/redis/
复制代码
使用编辑器打开配置文件进行修改:
  1. sudo vi /etc/redis/redis.conf
复制代码
修改或确认以下配置项:
  1. # 监听所有接口(根据实际需求调整)
  2. bind 0.0.0.0
  3. # 禁用保护模式(确保访问安全)
  4. protected-mode no
  5. # 设置持久化策略
  6. save 900 1
  7. save 300 10
  8. save 60 10000
  9. # 设置数据库文件路径
  10. dir /var/lib/redis
  11. # 设置日志级别
  12. loglevel notice
  13. logfile "/var/log/redis/redis.log"
  14. # 设置后台运行
  15. daemonize yes
  16. # 设置 pid 文件
  17. pidfile /var/run/redis.pid
  18. # 设置最大客户端数量
  19. maxclients 10000
  20. # 开启远程管理(可选,需确保安全)
  21. # requirepass your_redis_password
复制代码
  安全提示
  

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

3.3.1 创建 Redis 系统服务文件

创建 /etc/systemd/system/redis.service 文件:
  1. [Unit]
  2. Description=Redis In-Memory Data Store
  3. After=network.target
  4. [Service]
  5. User=redis
  6. Group=redis
  7. ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
  8. ExecStop=/usr/local/bin/redis-cli shutdown
  9. Restart=always
  10. [Install]
  11. WantedBy=multi-user.target
复制代码
3.3.2 启动并启用 Redis 服务

  1. sudo systemctl daemon-reload
  2. sudo systemctl start redis
  3. sudo systemctl enable redis
复制代码
3.3.3 验证 Redis 服务状态

  1. sudo systemctl status redis
复制代码
应显示 Redis 正在运行状态。
3.3.4 测试 Redis 毗连

  1. redis-cli ping
复制代码
应返回 PONG。

4. 高可用与负载均衡设计

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

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

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

  1. sudo yum install haproxy -y
复制代码
配置 HAProxy

编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg,添加 MySQL 后端配置:
  1. frontend mysql_front
  2.     bind *:3307
  3.     mode tcp
  4.     default_backend mysql_back
  5. backend mysql_back
  6.     mode tcp
  7.     balance roundrobin
  8.     option mysql-check user replicator
  9.     server mysql1 192.168.1.1:3306 check
  10.     server mysql2 192.168.1.2:3306 check
复制代码
  阐明
  

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

  1. sudo systemctl start haproxy
  2. sudo systemctl enable haproxy
复制代码
测试 HAProxy

应用步伐毗连字符串示例:
  1. 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:
  1. port 26379
  2. sentinel monitor mymaster 192.168.1.1 6379 2
  3. sentinel auth-pass mymaster your_redis_password
  4. sentinel down-after-milliseconds mymaster 5000
  5. sentinel failover-timeout mymaster 10000
  6. 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:
  1. [Unit]
  2. Description=Redis Sentinel
  3. After=network.target
  4. [Service]
  5. User=redis
  6. Group=redis
  7. ExecStart=/usr/local/bin/redis-sentinel /etc/redis/sentinel.conf
  8. Restart=always
  9. [Install]
  10. WantedBy=multi-user.target
复制代码
启动并启用 Sentinel 服务:
  1. sudo systemctl daemon-reload
  2. sudo systemctl start redis-sentinel
  3. sudo systemctl enable redis-sentinel
复制代码
4.2.2 验证 Sentinel 配置

在任一 Sentinel 节点上实行以下下令检察 Sentinel 状态:
  1. redis-cli -p 26379 sentinel masters
复制代码
应显示 Master 的具体信息。

5. 安全性配置

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

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

  1. sudo firewall-cmd --permanent --add-port=3306/tcp
  2. sudo firewall-cmd --permanent --add-port=3307/tcp    # HAProxy 端口
  3. sudo firewall-cmd --permanent --add-port=6379/tcp
  4. sudo firewall-cmd --permanent --add-port=26379/tcp
  5. sudo firewall-cmd --reload
复制代码
修改为仅允许特定 IP 地点访问,比方仅允许内网访问:
  1. sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
  2. # 类似配置其他端口
复制代码
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 ToolsRDB 拷贝脚本 进行备份。

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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表