悠扬随风 发表于 2025-4-12 10:06:37

基于Redis主从复制和哨兵模式的LNAMP架构缓存系统(无监控)

项目形貌
       搭建一个 LNAMP 架构的 Web 应用,利用 Redis 作为缓存层,加速 MySQL 数据库的查询响应。通过 Redis 主从复制实现数据冗余,通过哨兵模式实现高可用性。Nginx 作为反向代理和负载均衡器,Apache 处理动态内容,PHP 作为后端语言,Redis 缓存热点数据,提拔系统整体性能。
架构计划
服务器IP                        角色                         软件/服务                   阐明
192.168.56.11       Nginx+Redis主节点        Nginx,Redis        反向代理 + 负载均衡 + Redis 主节点
192.168.56.12       Redis从节点+哨兵          Redis,哨兵          Redis 从节点 + 哨兵
192.168.56.14       Redis从节点+哨兵           Redis,哨兵         Redis 从节点 + 哨兵
192.168.56.16       Apache+PHP                   Apache,PHP      动态内容处理
192.168.56.17       MySQL                              MySQL             数据库
搭建步骤
1.安装 Nginx(192.168.56.11)
        1.安装 Nginx:
        yum install epel-release
        yum install nginx
        2.启动 Nginx:
        systemctl start nginx
        systemctl enable nginx
2. 安装 Redis(192.168.56.11, 192.168.56.12, 192.168.56.14)
        1.安装 Redis:
        yum install redis
        2.配置 Redis 主节点(192.168.56.11):
        (1)编辑/etc/redis.conf
        bind 0.0.0.0
        requirepass  '123456Hei@'  #这里的密码本身设置
        (2)重启 Redis:
        systemctl restart redis
        systemctl enable redis
        3.配置 Redis 从节点(192.168.56.12, 192.168.56.14):
        (1)编辑 /etc/redis.conf:
        bind 0.0.0.0
        requirepass  '123456Hei@'
        slaveof 192.168.56.11 6379
        masterauth  '123456Hei@'
        (2)重启 Redis:
        systemctl restart redis
        systemctl enable redis
3.配置 Redis 哨兵模式(192.168.56.12, 192.168.56.14)
        1.配置哨兵
       (1) 创建哨兵配置文件 /etc/redis-sentinel.conf:
        port 26379
        sentinel monitor mymaster 192.168.56.11 6379 2
        sentinel auth-pass mymaster ‘123456Hei@’
        sentinel down-after-milliseconds mymaster 5000
        sentinel failover-timeout mymaster 10000
        (2)启动哨兵:
        redis-sentinel /etc/redis-sentinel.conf
4. 安装 Apache 和 PHP(192.168.56.16)
        1.安装 Apache:
        yum install httpd
        2.安装 PHP:
        yum install php php-mysqlnd php-fpm
        3.启动 Apache:
        systemctl start httpd
        systemctl enable httpd
5. 安装 MySQL(192.168.56.17)
        (1)安装 MySQL:
        yum install mysql-server
        (2)启动 MySQL:
        systemctl start mysqld
        systemctl enable mysqld
6. 配置 Nginx 反向代理(192.168.56.11)
        (1)编辑 Nginx 配置文件/etc/nginx/nginx.conf:
        (2)添加反向代理配置:
https://i-blog.csdnimg.cn/direct/d01f9bf48bd44c24806a84e3193f5031.png
        (3)重启 Nginx:
        systemctl restart nginx
7. 配置 Apache 和 PHP(192.168.56.16)

        (1)编辑 Apache 配置文件:
        vim /etc/httpd/conf/httpd.conf
        (2)配置 PHP-FPM:
        编辑 /etc/php-fpm.d/www.conf,确保用户和组设置为 apache。
        (3)启动 PHP-FPM:
        systemctl start php-fpm
        systemctl enable php-fpm
8. 配置 Redis 缓存(192.168.56.16)
        (1)安装 PHP Redis 扩展:
        yum install php-pecl-redis
        2.在 PHP 中利用 Redis:
        https://i-blog.csdnimg.cn/direct/493fcad3962347bfae747bea3e85e64d.png
        在/var/www/html/ 目次下创建一个 index.html 或 index.php 文件
        echo "Hello, World!" > /var/www/html/index.html
        重启Apache:
        systemctl restart httpd
测试:
浏览器访问192.168.56.11
https://i-blog.csdnimg.cn/direct/dd41cc977f3b4fc9bc6d021166fc34a3.png
总结


[*]这个项目重要是通过以下技能实现:
[*]Redis 主从复制和哨兵模式的配置与实现。
[*]LNAMP 架构的搭建与优化。
[*]Nginx 反向代理与负载均衡配置。
[*]Nginx 反向代理与负载均衡配置。
这里帮大家科普一下MySQL和redis的区别:
MySQL:是关系型数据库,重要以表格形式存储,支持复杂的关系模型。适用于对数据同等性要求高、数据量较大且需要举行复杂查询和事故处理的场景。
Redis:非关系型数据库,是内存数据库,重要基于键值对存储数据,同时支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。常用于缓存、消息队列、及时数据处理、分布式锁等场景。
在性能方面:
MySQL:将数据存储在磁盘上,涉及到I/O操作,在处理高并发读写时,性能相对受限。
Redis:数据存储在内存中,内存的读写速度远快于磁盘,所以 Redis 能实现极高的读写性能,可轻松处理每秒数万甚至数十万的并发请求,非常适合处理对及时性要求高的业务场景。
数据长期化:
MySQL:数据默认长期化到磁盘,通过事故日志、数据文件等机制包管数据的安全性和可靠性,纵然数据库服务器瓦解,也能通过恢复机制还原数据。
Redis:支持多种长期化方式,如 RDB(快照)和 AOF(追加式日志)。RDB 方式会定期将内存中的数据快照保存到磁盘,AOF 则是将每次写操作追加到日志文件中。但假如服务器突然宕机,可能会丢失部门未及时长期化的数据。
内存占用:
MySQL:重要存储数据在磁盘,内存重要用于缓存查询结果、数据页等,内存占用相对较小,具体内存利用量取决于数据库的配置和查询负载。
Redis:由于数据全部存储在内存中,内存占用较大,对服务器的内存资源要求较高。需要根据现实业务需求合理配置内存大小,以避免内存溢出题目。
      所以在这两个数据库在利用过程中,在读写性能方面redis的性能要优于MySQL,但在数据存储长期性和安全性方面MySQL要优于redis。
报错题目:
1.下载redis时间出现无法下载的题目
# dnf install -y redis
前次元数据逾期检查:0:00:05 前,实行于 2025年03月14日 星期五 19时22分56秒。
未找到匹配的参数: redis
解决方式
这里我推荐redis源码安装:wget https://download.redis.io/releases/redis-7.0.11.tar.gz
解压源码包
tar -xzf redis-7.0.11.tar.gz
cd redis-7.0.11
编译和安装
make
make install
这里我比力风俗利用systemctl所以我配置了redis服务(这里看本身风俗是否要本身配置)
# 创建 Redis 配置目次和数据目次
mkdir -p /etc/redis /var/lib/redis
# 复制配置文件
cp redis.conf /etc/redis/6379.conf
# 修改配置文件
sed -i 's/^daemonize no/daemonize yes/g' /etc/redis/6379.conf
sed -i 's/^dir \.\//dir \/var\/lib\/redis/g' /etc/redis/6379.conf
# 创建 Redis 服务文件
cat > /etc/systemd/system/redis.service << EOF

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

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

WantedBy=multi-user.target
EOF
# 创建 Redis 用户和组
useradd -r -s /sbin/nologin redis
chown redis:redis /var/lib/redis
chown redis:redis /etc/redis/6379.conf
# 启动 Redis 服务并设置开机自启
systemctl daemon-reload
systemctl start redis
systemctl enable redis
这里配置完成后就可以正常利用systemctl启动redis
2.启动httpd时间启动失败
https://i-blog.csdnimg.cn/direct/7c40aadcd97f4a68aede8af4aa51de01.png
从日志可以看出是由于端口被占用导致出错,后来我检查了下发现是Nginx的端口和httpd的端口冲突造成的,直接把Nginx制止就可以正常启动
https://i-blog.csdnimg.cn/direct/abf3b05b10bd412db704018c60cd3a75.png
利用losf命令需要下载
dnf install -y lsof
3.在下载php - pecl - redis时间出现和原来的php - pecl - redis5出现冲突,我原来已经下载过redis安装的是php - pecl - redis5,之前更新过yum源所以下载的6版本会导致冲突,假如想安装新版本,卸载原来的版本重新安装即可
# 卸载 php-pecl-redis6 包
yum remove php-pecl-redis6
# 安装 php-pecl-redis
yum install php-pecl-redis
4.在启动redis主从时间肯定要关闭防火墙大概添加端口配置不然会拦截导致无法举行主从复制,其次假如假造机是相互复制的会导致推选主节点时间出现卡死的题目


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于Redis主从复制和哨兵模式的LNAMP架构缓存系统(无监控)