【Tomcat+MySQL+Redis源码安装三件套】

news2024/11/23 6:28:44

Tomcat+MySQL+Redis源码安装三件套

  • Tomcat部分
    • 概念
      • Tomcat的作用
      • Tomcat的原理
      • Linux运维中的应用场景
      • 具体操作示例
    • 基本使用流程实验
      • Tomcat安装
      • tomcat的反向代理及负载均衡
        • 源地址hash(不能负载)
        • tomcat负载均衡实现(使用cookie)
      • memcached 操作命令
    • 理论补充
      • 结合反向代理实现tomcat部署
        • 常见部署方式
        • 理论阐述
          • 1. Standalone 模式
          • 2. 单机反向代理
          • 3. 多机反向代理
          • 4. 多级代理
          • 5. 集群配置
          • 总结
          • Memcached简介
          • Memcached的工作原理
          • Memcached与Tomcat的集成
          • 工作场景
  • MySQL集群技术部分
    • 概念
      • 原因
      • 重要性
      • 应用场景
    • 基本使用和实验流程
      • 源码安装mysql
      • mysql的组从复制
      • MySQL延迟复制
      • 慢查询日志:
        • 概念
        • 实验
        • 测试:
      • mysql的并行复制
      • 配置MHA高可用
        • 搭建主从
        • 配置MHA环境
          • 剩余配置理论补充
      • MHA添加VIP功能
  • Redis集群
    • 概念
      • 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库
      • 1.2 为什么还要用 NoSQL 数据库呢?
      • 1.3 RDBMS和NOSQL的特点及优缺点:
      • Redis特性
      • Redis特性
      • 缓存的实现流程
    • Redis的安装
    • 配置主从同步
    • 哨兵:
        • 故障解决:
    • Redis Cluster(无中心化设计)
      • 概念
        • Redis Cluster 工作原理
          • Redis Cluster特点如下
        • Redis cluster 架构
        • 创建redis cluster的前提
      • 环境配置
        • 检测
        • 查看集群信息
          • **所有的Redis都需要进行密码验证**
      • 8台模式:
        • 集群扩容
        • 添加slave集群
      • 拓展实验(clsuter集群维护)
        • 代码
    • Redis理论补充
      • 部署redis cluster
      • redis-cli --cluster 参数说明

Tomcat部分

概念

在运维当中,Tomcat的主要作用是作为一个Servlet容器,负责运行Java Web应用程序。它提供了一个环境,使得开发者能够构建和运行基于Java的Web应用。以下是Tomcat的一些关键作用和原理:

Tomcat的作用

  1. Servlet容器:Tomcat实现了Java Servlet规范,可以加载和管理Servlet,处理HTTP请求和响应。
  2. JSP支持:Tomcat支持JavaServer Pages(JSP),允许开发者使用JSP编写动态网页。
  3. Web应用部署:Tomcat可以部署和管理Web应用程序,支持热部署和动态更新。
  4. 日志和监控:Tomcat提供了日志记录和监控功能,帮助运维人员进行故障排查和性能监控。
  5. 安全性:Tomcat支持各种安全机制,如用户认证、角色授权和SSL加密。

Tomcat的原理

  1. 生命周期管理:Tomcat负责管理Servlet的生命周期,包括初始化、服务和销毁。
  2. 请求处理:Tomcat接收到HTTP请求后,会解析请求,找到对应的Servlet或JSP页面,然后处理请求并生成响应。
  3. 多线程处理:Tomcat使用多线程技术来处理并发请求,提高服务器的响应能力。
  4. 类加载机制:Tomcat具有独特的类加载机制,确保Web应用程序之间的隔离性和资源共享。
  5. 日志和配置:Tomcat使用配置文件(如server.xml)来管理服务器的各种设置,并提供日志记录功能。

Linux运维中的应用场景

  1. Web应用部署:在Linux环境中部署Java Web应用程序,使用Tomcat作为应用服务器。
  2. 集群和负载均衡:在高并发场景下,使用Tomcat集群和负载均衡技术来提高系统的可用性和性能。
  3. 性能优化:通过调整Tomcat的配置参数(如线程池大小、连接超时时间等),优化服务器性能。
  4. 日志分析和监控:使用Linux工具(如grepawk等)分析Tomcat日志,监控服务器运行状态,及时发现和解决问题。
  5. 自动化部署和管理:使用Linux脚本(如Shell脚本)自动化Tomcat的部署和管理任务,提高运维效率。

具体操作示例

  1. 安装Tomcat

    sudo dnf  install tomcat9 
    
  2. 启动和停止Tomcat

    sudo systemctl start tomcat9 
    sudo systemctl stop tomcat9 
    
  3. 查看Tomcat日志

    sudo nano /var/log/tomcat9/catalina.out 
    
  4. 部署Web应用
    将WAR文件复制到Tomcat的webapps目录下,Tomcat会自动解压并部署应用。

    sudo cp myapp.war /var/lib/tomcat9/webapps/
    
  5. 配置Tomcat
    修改/etc/tomcat9/server.xml文件来调整Tomcat的配置,例如增加一个新的Context:

    <Context path="/myapp" docBase="/path/to/myapp" reloadable="true" />
    

通过以上步骤,可以在Linux环境中高效地管理和维护Tomcat服务器,确保Java Web应用程序的稳定运行。

基本使用流程实验

准备两台纯净的虚拟机,redhat9版本虚拟机,或者centOS7及以上版本,外加一台再加一台nginx主机,并上面安装

Tomcat安装

这个是后来的Tomcat1,后面我自己改了名字
在这里插入图片描述
准备Tomcat环境包

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

配置启动文件
在这里插入图片描述
两边Tomcat一样配置

tomcat的反向代理及负载均衡

在这里插入图片描述
126是另一台Tomcat的IP地址
在这里插入图片描述
两边都有
在这里插入图片描述

源地址hash(不能负载)

在这里插入图片描述

tomcat负载均衡实现(使用cookie)

使用cookie jsessionid来实现hash
在这里插入图片描述

memcached 操作命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
干掉Tomcat2再看效果:

在这里插入图片描述
在这里插入图片描述

理论补充

结合反向代理实现tomcat部署

常见部署方式

在这里插入图片描述
在这里插入图片描述

理论阐述

反向代理是一种常见的网络配置,它允许客户端通过代理服务器访问实际的服务端。在Tomcat部署中,经常使用Nginx作为反向代理服务器,以提高性能、安全性及可维护性。以下是几种常见的部署方式及其工作模式:

1. Standalone 模式

在Standalone模式中,Tomcat独立运行,直接接收和处理用户的请求。这种模式简单,适合开发和测试环境,但在生产环境中可能不够高效,因为Tomcat处理静态资源的能力不如专门的Web服务器。

2. 单机反向代理

在这种模式下,Nginx作为反向代理服务器,前置在Tomcat前面。Nginx处理静态资源请求,并将动态请求(如JSP、Servlet)转发给Tomcat处理。这种方式既能利用Nginx处理静态资源的优势,又能充分利用Tomcat处理Java应用的能力。

3. 多机反向代理

当需要处理大量并发请求时,可以使用多台Tomcat服务器,并通过Nginx进行负载均衡。Nginx不仅作为反向代理服务器,还负责将请求分发到不同的Tomcat实例上,从而提高系统的处理能力和可靠性。

4. 多级代理

在一些复杂的环境中,可能会使用多级代理。例如,LNNMT(Linux + Nginx + Nginx + MySQL + Tomcat)架构中,第一级Nginx处理外部请求,第二级Nginx处理内部请求,然后将请求转发给Tomcat。这种方式可以提供更细粒度的控制和更高的安全性。

5. 集群配置

在需要高可用性和负载均衡的场景中,可以使用Nginx+Tomcat的集群配置。Nginx作为反向代理,将请求分发到多个Tomcat实例上。这样不仅可以提高系统的处理能力,还能确保在某个Tomcat实例出现问题时,其他实例能够接管请求,保证服务的连续性。

总结

反向代理实现Tomcat部署的方式多种多样,可以根据具体的需求选择合适的方案。无论是单机环境还是多机集群,合理利用Nginx和Tomcat的优势,可以显著提升系统的性能和可靠性。

Memcached简介

Memcached是一个高性能的分布式内存对象缓存系统,用于减轻数据库负载,加速动态Web应用。其工作原理主要涉及数据的存储和检索,以及与Tomcat等应用服务器的集成使用。

Memcached的工作原理
  1. 数据存储:Memcached接收来自客户端(如Tomcat)的请求,将数据以键值对的形式存储在内存中。每个键都会通过哈希算法映射到一个特定的内存位置,以便快速查找。

  2. 数据检索:当客户端请求某个键的数据时,Memcached会查找相应的内存位置,如果找到则返回数据,否则返回未命中(miss)。

  3. LRU策略:当内存满时,Memcached使用最近最少使用(LRU)策略淘汰最不常用的数据,为新的数据腾出空间。

  4. 分布式:Memcached支持分布式部署,通过一致性哈希等方式将数据分布在多个节点上,提高系统的扩展性和容错能力。

Memcached与Tomcat的集成
  1. 客户端库:Tomcat通常通过Memcached客户端库(如Spymemcached、XMemcached等)与Memcached服务器通信。这些库提供了方便的API,用于设置和获取缓存数据。

  2. 缓存策略:在Tomcat中,可以将频繁访问的数据(如数据库查询结果、用户会话信息等)缓存到Memcached中,减少对后端数据库的请求,提高系统性能。

工作场景
  1. Web应用加速:在Web应用中,许多请求是重复的,尤其是对静态内容和常见数据的请求。通过将这些数据缓存到Memcached中,可以显著减少数据库负载,提高应用响应速度。

  2. 会话管理:在分布式Web应用中,传统的Cookie-based会话管理难以扩展。通过将用户会话数据存储在Memcached中,可以实现跨服务器的会话共享,支持无缝的负载均衡和高可用性。

  3. 数据预加载:在某些应用场景中,可以预先将热点数据加载到Memcached中,进一步提高系统的响应速度。例如,在新闻网站中,可以将热门新闻的数据库记录缓存起来。

  4. 分布式锁:在多节点环境中,Memcached可以用来实现分布式锁,协调多个应用实例对共享资源的访问,避免并发问题。

通过以上介绍,可以看出Memcached在Web应用的性能优化和分布式系统的设计中扮演了重要角色。结合Tomcat等应用服务器,可以构建出高效、可扩展的Web应用架构。

MySQL集群技术部分

概念

在运维工作中,源码安装MySQL具有以下几个原因、重要性和应用场景:

原因

  1. 定制化需求:某些特殊应用场景可能需要对MySQL进行定制化编译,以满足特定的功能或性能需求。
  2. 版本控制:源码安装允许管理员精确控制MySQL的版本,避免依赖包管理工具可能带来的版本冲突问题。
  3. 优化编译选项:通过源码安装,可以根据硬件和系统特点优化编译选项,获得更好的性能。
  4. 安全性和控制:源码安装可以让管理员更好地控制MySQL的安装过程和配置,增强系统的安全性。

重要性

  1. 灵活性:源码安装提供了最大的灵活性,允许管理员根据具体需求进行配置和优化。
  2. 性能优化:针对特定硬件和操作系统进行优化编译,可以显著提升MySQL的性能。
  3. 技术支持:源码安装通常伴随着详细的编译和安装文档,有助于运维人员深入理解MySQL的内部结构和工作原理,提供更好的技术支持。
  4. 安全控制:通过源码安装,可以更好地控制软件的来源和安装过程,减少潜在的安全风险。

应用场景

  1. 高性能计算环境:在需要极致性能的环境中,源码安装允许管理员针对特定硬件进行优化,提升MySQL的性能表现。
  2. 特殊功能需求:某些特殊功能可能需要对MySQL源码进行修改或添加补丁,源码安装是唯一的选择。
  3. 版本兼容性要求:在需要严格控制软件版本的环境中,源码安装可以避免依赖包管理工具可能带来的版本冲突问题。
  4. 安全要求高的环境:在对安全性要求较高的环境中,源码安装可以让管理员更好地控制软件的来源和安装过程,减少潜在的安全风险。

通过源码安装MySQL,运维人员可以获得更高的灵活性和控制力,更好地满足特定的业务需求和技术要求。

基本使用和实验流程

源码安装mysql

先准备两台虚拟机(红帽7版本的系统)
在这里插入图片描述

在这里插入图片描述
把里面的libtirpc=devel的包单独拿出来
在这里插入图片描述
源码编译安装mysql
[root@mysql-node10 mysql-5.7.44]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
用myisam-DWITH_EXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/

#指定安装路径
#指定数据目录
#指定套接字文件
#指定启用INNODB存储引擎,默认
#扩展字符集
#指定默认字符集
#指定默认校验字符集
#指定c++库依赖
[root@mysql-node10 mysql-5.7.44]# make -j2 #-j2 核心就跑几个进程 ,2代表核心数
[root@mysql-node10 mysql-5.7.44# make install

部署mysql
#生成启动脚本
[root@node10 ~]# dnf install initscripts-10.11.6-1.el9.x86_64 -y
[root@node10 ~]# cd /usr/local/mysql/support-files/
[root@node10 support-files]# cp mysql.server /etc/init.d/mysqld
#修改环境变量
[root@node10 ~]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/mysql/bin
[root@node10 ~]# source ~/.bash_profile
#生成数据目录
[root@mysql-node1 ~]# useradd -s /sbin/nologin -M mysql
[root@mysql-node1 ~]# mkdir -p /data/mysql
[root@mysql-node1 ~]# chown mysql.mysql /data/mysql/
在这里插入图片描述

在这里插入图片描述
开始初始化:
在这里插入图片描述
最后一行的末尾的e<P-Xngvw6dd是我的密码,每个人的密码随机,自己观察

在这里插入图片描述
在这里插入图片描述

mysql的组从复制

主(node01为主):
在这里插入图片描述
在这里插入图片描述

从:
在这里插入图片描述
在这里插入图片描述
注意要两个YES才成功:如下,
在这里插入图片描述
测试:
在这里插入图片描述

MySQL延迟复制

在这里插入图片描述
在这里插入图片描述
在master中写入数据后过了延迟时间才能被查询成功,这里延时是60秒
这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的
是日志已经保存在slave端了,但是犹豫设置了延时,所以SQL语句的效果需要60秒之后才能生效

node2查询:

在这里插入图片描述
查询结果需要等时间
在这里插入图片描述

慢查询日志:

概念

慢查询,顾名思义,执行很慢的查询 当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个 SQL语句就是需要优化的 慢查询被记录在慢查询日志里 慢查询日志默认是不开启的 如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。

实验

主:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SET long_query_time=4;是一条用于设置慢查询日志阈值的命令。这里的long_query_time` 是一个系统变量,它定义了一个查询被视为“慢查询”的时间阈值,单位是秒。

测试:

在这里插入图片描述

mysql的并行复制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
当slave挂掉的时候,半同步无法写入,但是十秒(根据自身设定)之后转换成为异步模式就可以写入

配置MHA高可用

搭建主从

在这里插入图片描述
从(两台)

重新初始化
在这里插入图片描述
在这里插入图片描述

执行操作:
## KaTeX数学公式
在这里插入图片描述

两边slave都配置了之后,在slave下才能查出三条
在这里插入图片描述

这段MySQL命令是在配置MySQL Group Replication(组复制)时执行的一系列操作。MySQL Group Replication是一个高可用性解决方案,它提供了容错、自动故障检测和自动恢复功能。下面是对这段命令的逐行解释:

  1. SET SQL_LOG_BIN=0;
    临时关闭二进制日志记录。这在创建用户和授予权限时不希望这些操作被记录到二进制日志中时使用。

  2. CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';
    创建一个名为rpl_user的新用户,允许从任何主机(%)连接,并使用密码lee进行身份验证。

  3. GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
    授予rpl_user用户复制从属(slave)的权限,这意味着该用户可以用于复制过程。

  4. FLUSH PRIVILEGES;
    刷新权限,使新创建的用户和授予的权限立即生效。

  5. SET SQL_LOG_BIN=1;
    重新开启二进制日志记录,因为在接下来的操作中需要记录到二进制日志。

  6. CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';
    配置用于组复制恢复通道的复制用户和密码。这个通道用于节点加入组复制时的通信。

  7. SET GLOBAL group_replication_bootstrap_group=ON;
    设置全局变量group_replication_bootstrap_groupON,这允许当前节点引导整个组复制集群。通常只在第一个节点启动组复制时这样做。

  8. START GROUP_REPLICATION;
    启动组复制。这将使当前节点开始参与组复制集群。

  9. SET GLOBAL group_replication_bootstrap_group=OFF;
    将全局变量group_replication_bootstrap_group设置回OFF,以防止后续节点引导集群。

  10. SELECT * FROM performance_schema.replication_group_members;
    查询performance_schema.replication_group_members表,以查看组复制集群中的成员状态。这个表显示了每个节点的UUID、角色(PRIMARY或SECONDARY)、状态(如ONLINE、RECOVERING、OFFLINE等)以及一些其他信息。

这些命令通常是在配置MySQL Group Replication时在单个节点上执行的,特别是在初始化集群时。在多节点环境中,这些步骤需要在每个节点上重复,但在其他节点上不需要设置group_replication_bootstrap_group=ON,因为只有第一个节点需要引导集群。

配置MHA环境

重新那一台虚拟机,作为MHA主机,如果看到我这小节的route把他理解为MHA,因为当时名字忘改了

#在MHA中
[root@mysql-mha ~]# unzip MHA-7.zip
 [root@mysql-mha MHA-7]# ls
 mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23
1.el7.noarch.rpm
 mha4mysql-manager-0.58.tar.gz                   
perl-Mail-Sendmail-0.79
21.el7.noarch.rpm
 mha4mysql-node-0.58-0.el7.centos.noarch.rpm     
1.el7.noarch.rpm
 perl-Config-Tiny-2.14-7.el7.noarch.rpm          
perl-MIME-Lite-3.030
2.el7.noarch.rpm
 perl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03
19.el7.noarch.rpm
 perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       
2.el7.noarch.rpm
 [root@mysql-mha MHA-7]# yum install *.rpm -y
 perl-MIME-Types-1.38
perl-Parallel-ForkManager-1.18
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.10:/mnt
 [root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.20:/mnt
 [root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.30:/mnt
 #在sql-node中
[root@mysql-node10 ~]# yum install /mnt/mha4mysql-node-0.58
0.el7.centos.noarch.rpm -y
 [root@mysql-node20 ~]# yum install /mnt/mha4mysql-node-0.58
0.el7.centos.noarch.rpm -y
 [root@mysql-node30 ~]# yum install /mnt/mha4mysql-node-0.58
0.el7.centos.noarch.rpm -y

在软件中包含的工具包介绍
1.Manager工具包主要包括以下几个工具:
masterha_check_ssh #检查MHA的SSH配置状况
masterha_check_repl #检查MySQL复制状况
masterha_manger #启动MHA
masterha_check_status #检测当前MHA运行状态

masterha_master_monitor #检测master是否宕机
masterha_master_switch #控制故障转移(自动或者手动)
masterha_conf_host #添加或删除配置的server信息
2.Node工具包 (通常由masterHA主机直接调用,无需人为执行)
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog #去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)

剩余配置理论补充

配置MHA 的管理环境
在这里插入图片描述
因为我们当前只有一套主从,所以我们只需要写一个配置文件即可
rpm包中没有为我们准备配置文件的模板
可以解压源码包后在samples中找到配置文件的模板文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.检测配置:
a)检测网络及ssh免密

在这里插入图片描述
在这里插入图片描述
b)检测数据主从复制情况
在这里插入图片描述
在这里插入图片描述
MHA的故障切换
在这里插入图片描述

MHA添加VIP功能

在这里插入图片描述

设置秘钥认证
在这里插入图片描述

在这里插入图片描述
最后的ssh后面还有个id_rsa

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Redis集群

概念

关系型数据库和 NoSQL 数据库

1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库

关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库
中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。
NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适
用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键
值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库
(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用
场景及优点。

1.2 为什么还要用 NoSQL 数据库呢?

主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺
陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足
日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优
势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高

1.3 RDBMS和NOSQL的特点及优缺点:

在这里插入图片描述

Redis特性

速度快: 10W QPS,基于内存,C语言实现
单线程
持久化
支持多种数据结构
支持多种编程语言
功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
主从复制
支持高可用和分布式

Redis特性

速度快: 10W QPS,基于内存,C语言实现
单线程
持久化
支持多种数据结构
支持多种编程语言
功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
主从复制
支持高可用和分布式

缓存的实现流程

在这里插入图片描述

在这里插入图片描述

Redis的安装

官方下载地址:
http://download.redis.io/releases/
一开始需要三台虚拟机即可
在这里插入图片描述

`在这里插入图片描述

配置主从同步

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

哨兵:

在这里插入图片描述
TWO
在这里插入图片描述
在这里插入图片描述

哨兵节点是一个单独的进程,此功能并不是集成在主从复制当中的。哨兵机制就是通过哨兵节点来解决 Redis 主节点挂掉的问题的方法。哨兵节点不负责存储数据,主要是用来监控监控 Redis 主从服务器是否正常运行,并且在主节点挂掉后能够自动完成切换主节点,也就是故障转移工作。

故障解决:

在这里插入图片描述

  1. edis-cli`:这是启动Redis命令行界面的命令,它允许用户与Redis服务器进行交互。

  2. 127.0.0.1:6379> CONFIG GET min-slaves-to-write:这条命令用于获取当前Redis服务器的min-slaves-to-write配置值。CONFIG GET命令用于读取Redis配置参数的当前值。min-slaves-to-write是一个配置项,它定义了主服务器必须至少有多少个健康的从服务器才能接受写入操作。如果少于这个数量的从服务器可用,主服务器将拒绝写入操作,以防止数据丢失。

    输出结果:

    1) "min-slaves-to-write" 
    2) "0"
    

    这表示当前min-slaves-to-write的值为0,即主服务器不要求有任何健康的从服务器就能接受写入操作。

  3. 127.0.0.1:6379> CONFIG SET min-slaves-to-write 2:这条命令用于设置min-slaves-to-write的新值为2。CONFIG SET命令用于修改Redis配置参数的值。在这里,将min-slaves-to-write设置为2意味着主服务器只有在至少有两个健康的从服务器时才会接受写入操作。

    输出结果:

    OK 
    

    这表示配置设置成功。

  4. 127.0.0.1:6379> CONFIG GET min-slaves-to-write:再次执行CONFIG GET命令来验证min-slaves-to-write的值是否已经被成功设置为2。

    输出结果:

    1) "min-slaves-to-write" 
    2) "2"
    

    这确认了min-slaves-to-write的值现在确实是2。

总结来说,这段命令的作用是先查询然后设置Redis服务器的min-slaves-to-write配置参数,以控制主服务器在什么条件下可以接受写入操作。在这个例子中,设置为2意味着主服务器只有在至少有两个健康的从服务器时才允许写入操作,这样可以增加数据的冗余和安全性。

Redis Cluster(无中心化设计)

概念

Redis Cluster 工作原理

在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,
从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受
限于单机的内存大小、并发数量、网卡速率等因素。
redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存
当前节点数据和整个集群状态,每个节点都和其他所有节点连接

Redis Cluster特点如下
  1. 所有Redis节点使用(PING机制)互联
  2. 集群中某个节点的是否失效,是由整个集群中超过半数的节点监测都失效,才能算真正的失效
  3. 客户端不需要proxy即可直接连接redis,应用程序中需要配置有全部的redis服务器IP
  4. redis cluster把所有的redis node 平均映射到 0-16383个槽位(slot)上,读写需要到指定的redis
    node上进行操作,因此有多少个redis node相当于redis 并发扩展了多少倍,每个redis node 承担
    16384/N个槽位
  5. Redis cluster预先分配16384个(slot)槽位,当需要在redis集群中写入一个key -value的时候,会使
    用CRC16(key) mod 16384之后的值,决定将key写入值哪一个槽位从而决定写入哪一个Redis节点
    上,从而有效解决单机瓶颈。
Redis cluster 架构

在这里插入图片描述

创建redis cluster的前提

1.每个redis node节点采用相同的硬件配置、相同的密码、相同的redis版本。
2.每个节点必须开启的参数
cluster-enabled yes
#必须开启集群状态,开启后redis进程会有cluster显示
cluster-config-file nodes-6380.conf #此文件有redis cluster集群自动创建和维护,不需要任何手
动操作
3.所有redis服务器必须没有任何数据
4.先启动为单机redis且没有任何key value

环境配置

需要8台纯净的虚拟机,redhat9版本或者CentOS7版本

下面这些环境配置每一台都需要做
在这里插入图片描述
使用xshell,控制全局会话可以,在一台主机上面输入指令全部主机都生效

在这里插入图片描述
刚开始是6台
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这里的密码一定要和上面配置文件里面的一致

在这里插入图片描述
配置之前先把防火墙和selinux关掉

在这里插入图片描述

检测

成功:
在这里插入图片描述
在这里插入图片描述
图上可只slave是228,看:

Performing Cluster Check (using node 172.25.253.224:6379)
M: 14e9553017d23ccbf754b18fad5177025650b1cf 172.25.253.224:6379

的号码去找: replicates开头的后面跟的id号码

查看集群信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所有的Redis都需要进行密码验证

在这里插入图片描述
在这里插入图片描述

8台模式:

再加两台虚拟机

两台虚拟机关掉防火墙鹅selinux,下载Redis服务,将配置文件复制过去,

集群扩容

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4096=How many slots do you want to move (from 1 to 16384)? 的16384/4(集群主服务器的数量)而得来

添加slave集群

在这里插入图片描述
检查成功,231成功成为230的从主机

在这里插入图片描述

拓展实验(clsuter集群维护)

添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相
反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如
果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。

代码
#移除要下线主机的哈希槽位
**[root@redis-master2 ~]# redis-cli  -a 123456 --cluster reshard 172.25.254.20:6379**
 Warning: Using a password with '-a' or '-u' option on the command line interface 
may not be safe.
 >>> Performing Cluster Check (using node 172.25.254.20:6379)
 M: ba504e78f14df5944280f9035543277a0cf5976b 172.25.254.20:6379
 slots:[6827-10922] (4096 slots) master
 1 additional replica(s)
 M: 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7 172.25.254.30:6379
 slots:[12288-16383] (4096 slots) master
 1 additional replica(s)
M: 009571cb206a89afa6658b60b2d403136056ac09 172.25.254.40:6379
 slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
 1 additional replica(s)
 S: c20c9b5465b2e64868161c0e285d55bc81358ba4 172.25.254.110:6379
 slots: (0 slots) slave
 replicates 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7
 S: d458f34fa900d83212c021dc1e65396e490b5495 172.25.254.120:6379
 slots: (0 slots) slave
 replicates 5ab2e93f4f0783983676f7bd118efaacfb202bd1
 M: 5ab2e93f4f0783983676f7bd118efaacfb202bd1 172.25.254.10:6379
 slots:[1365-5460] (4096 slots) master
 1 additional replica(s)
 S: 83d7a82fe896cf9f4d8212cb533058659bba16ce 172.25.254.130:6379
 slots: (0 slots) slave
 replicates ba504e78f14df5944280f9035543277a0cf5976b
 S: 86a4a8fb08e70e41b5a30f829deb983d23854ea7 172.25.254.140:6379
 slots: (0 slots) slave
 replicates 009571cb206a89afa6658b60b2d403136056ac09
 [OK] All nodes agree about slots configuration.
 >>> Check for open slots...
 >>> Check slots coverage...
 [OK] All 16384 slots covered.
 How many slots do you want to move (from 1 to 16384)? 4096
 What is the receiving node ID? 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7
 Please enter all the source node IDs.
 Type 'all' to use all the nodes as source nodes for the hash slots.
 Type 'done' once you entered all the source nodes IDs.
 Source node #1: 5ab2e93f4f0783983676f7bd118efaacfb202bd1
 Source node #2: done
 #删除master
 **[root@redis-master2 ~]# redis-cli  -a 123456 --cluster del-node  
172.25.254.120:6379 d458f34fa900d83212c021dc1e65396e490b5495** #这个172.25.254.120:6379后面跟的id是使用check查出来的
 Warning: Using a password with '-a' or '-u' option on the command line interface 
may not be safe.
 >>> Removing node d458f34fa900d83212c021dc1e65396e490b5495 from cluster 
172.25.254.120:6379
 >>> Sending CLUSTER FORGET messages to the cluster...
 >>> Sending CLUSTER RESET SOFT to the deleted node.
 [root@redis-master2 ~]# redis-cli  -a 123456 --cluster del-node  
172.25.254.10:6379 5ab2e93f4f0783983676f7bd118efaacfb202bd1
 Warning: Using a password with '-a' or '-u' option on the command line interface 
may not be safe.
 >>> Removing node 5ab2e93f4f0783983676f7bd118efaacfb202bd1 from cluster 
172.25.254.10:6379
 >>> Sending CLUSTER FORGET messages to the cluster...
 >>> Sending CLUSTER RESET SOFT to the deleted node

Redis理论补充

部署redis cluster

[root@redis-masterx ~]# vim /etc/redis/redis.conf
 masterauth "123456"                 
#集群主从认证
requirepass "123456"                
用“auth 密码”进行认证
cluster-enabled yes                 
#redis登陆密码  redis-cli 命令连接redis后要
#开启cluster集群功能
cluster-config-file nodes-6379.conf #指定集群配置文件
cluster-node-timeout 15000          
[root@redis-master1 ~]# systemctl restart redis.service
 [root@redis-master1 ~]# redis-cli
 127.0.0.1:6379> auth 123456
 OK
 127.0.0.1:6379> info
 #节点加入集群的超时时间单位是ms
 # Cluster
 cluster_enabled:1

redis-cli --cluster 参数说明

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据系统测试——大数据系统解析(上)

各位好&#xff0c;我是 道普云 欢迎关注我的主页 希望这篇文章对想提高软件测试水平的你有所帮助。 在本文中我们一起来看一下大数据系统每一个层次需要解决的技术问题和对应的一些技术需求。以此来作为学习大数据系统测试的基础。 数据收集层主要是进行数据源的分布式、…

sqli-labs靶场通关攻略 31-35

主页有sqli-labs靶场通关攻略 1-30 第三一关 less-31 闭合方式为?id1&id1 ") -- 步骤一&#xff1a;查看数据库名 http://127.0.0.1/less-31/?id1&id-1%22)%20union%20select%201,database(),3%20-- 步骤二&#xff1a;查看表名 http://127.0.0.1/less-31/?…

Redis 实现哨兵模式

目录 1 哨兵模式介绍 1.1 什么是哨兵模式 1.2 sentinel中的三个定时任务 2 配置哨兵 2.1 实验环境 2.2 实现哨兵的三条参数&#xff1a; 2.3 修改配置文件 2.3.1 MASTER 2.3.2 SLAVE 2.4 将 sentinel 进行备份 2.5 开启哨兵模式 2.6 故障模拟 3 在整个架构中可能会出现的问题 …

【FastAPI】—— 01 创建FastAPI项目

1.FastAPI框架介绍 FastAPI是⼀个现代、快速&#xff08;⾼性能&#xff09;的Web框架&#xff0c;⽤于构建API。是建⽴在Starlette和Pydantic基础上的。它基于Python3.7的类型提示&#xff08;typehints&#xff09;和异步编程&#xff08;asyncio&#xff09;能⼒&#xff0c…

软件设计原则之开闭原则

开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;是软件设计中的一个重要原则&#xff0c;由伯特兰梅耶&#xff08;Bertrand Meyer&#xff09;在1988年提出。该原则强调软件实体&#xff08;如类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭…

【机器学习】 7. 梯度下降法,随机梯度下降法SGD,Mini-batch SGD

梯度下降法,随机梯度下降法SGD,Mini-batch SGD 梯度下降法凸函数(convex)和非凸函数梯度更新方向选择步长的选择 随机梯度下降SGD(Stochastic Gradient Descent)梯度下降法&#xff1a;SGD: Mini-batch SGD 梯度下降法 从一个随机点开始决定下降方向&#xff08;重要&#xff…

关于kafka的分区和消费者之间的关系

消费者和消费者组 当生产者向 Topic 写入消息的速度超过了消费者&#xff08;consumer&#xff09;的处理速度&#xff0c;导致大量的消息在 Kafka 中淤积&#xff0c;此时需要对消费者进行横向伸缩&#xff0c;用多个消费者从同一个主题读取消息&#xff0c;对消息进行分流。 …

【JVM】OOM与调优(二)

OOM与调优 6.JVM工具如jps 该命令是纯Java编写的 -q:只显示Java进程的ID -m:输出Java进程的ID main函数所在类的名字 传递给main函数的参数 -l:输出Java进程的IDmain函数所在类的全限定名(包名类名) -v:输出Java进程的IDmain函数所在类的名称传递给JVM的参数 应用&am…

在野漏洞的应急响应流程

许多时候&#xff0c;对于负责安全工作又不太擅长安全漏洞技术的人员而言&#xff0c;如何应对突发漏洞是工作中主要的难点&#xff0c;这里的突发漏洞指的是两类&#xff1a;一类是通过新闻、咨询推送&#xff0c;被社会舆论所有关注的CVE漏洞&#xff0c;比如前段时间所谓的核…

【YOLOv10改进[Conv]】感受野注意力卷积RFAConv(2024.3)| 使用RFAConv 改进v10目标检测效果 + 含全部代码和详细修改方式

本文将进行在YOLOv10中使用RFAConv,助力YOLOv10目标检测效果,文中含全部代码、详细修改方式。助您轻松理解改进的方法。

手撕M.2 的B-KEY M-KEY、M+B KEY定义

SSD 尺寸与规格 我们在买ssd的时候&#xff0c;商家都会说什么ssd是2280还是2242规格的,这里的规格实际上就是代表的ssd的尺寸大小 M.2模组的尺寸目前有11种&#xff0c;用Type xxyy的方式表示&#xff0c;xx表示宽度&#xff0c;yy表示长度&#xff0c;单位为毫米。例如上面提…

(mcu) 嵌入式基础简单入门(程序架构分析)

文章目录 &#x1f4bd;前言&#x1f4bd;软件框架&#x1f4c0;工具环境&#x1f4c0;模板工程&#x1f4c0;编译后&#x1f4c0;Code&#x1f4c0;典例举例 &#x1f4bd;Keil 使用notes⭐END&#x1f31f;关注我 &#x1f4bd;前言 本文为一份简单入门笔记&#xff0c;以 st…

算法-单词规律(290)

leetcode题目链接 这道题用哈希表来解决 一个哈希表存放从单词到字符的映射&#xff0c;一个存放从字符到单词的映射&#xff0c;依照空格分隔字符&#xff0c;并将每个字符存放到vector字符数组&#xff0c; 遍历 pattern&#xff0c;对于每个字符 c 和对应的单词 w&#xf…

带你快速了解WEB应用服务器TOMCAT

目录 一、WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.1 web资源和访问 2.2 后台应用架构 2.2.1 单体架构 2.2.2 微服务 2.2.3 单体架构和…

机器学习 第6章 支持向量机

这里写目录标题 6.1 间隔与支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归 6.1 间隔与支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , 1 } D\left \{ (x_{1},y_{1}),(x_{2},y_{2}) ,...,(x_{…

禹晶、肖创柏、廖庆敏《数字图像处理》Otsu方法描述勘误

最大化类间距离准则与最小错误率准则不等价。 虚线处为最大类间距离&#xff0c;前景与背景直方图的交界处为最小错分概率&#xff0c;当部分前景错分为背景或者部分背景错分为前景时&#xff0c;一般会导致类间距离变小。所以两者接近&#xff0c;但不相等。 禹晶、肖创柏、…

《Spring Boot 集成 Swagger:打造高效接口文档与开发体验》

Swagger 一.导语&#xff1a; ​ 相信无论是前端还是后端开发&#xff0c;都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力&#xff0c;经常来不及更新。其实无论是前端调用后端&#xff0c;还是后…

MindSearch 部署

任务 按照教程&#xff0c;将 MindSearch 部署到 HuggingFace 并美化 Gradio 的界面&#xff0c;并提供截图和 Hugging Face 的Space的链接。 创建开发机 & 环境配置 mkdir -p /root/mindsearch cd /root/mindsearch git clone https://github.com/InternLM/MindSearch.…

dbsyncer同步mysql数据

1 概述 DBSyncer&#xff08;代码地址&#xff1a;https://github.com/86dbs/dbsyncer&#xff09;是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务&#…

人脸质量评价:深入解析和实现

人脸质量评价&#xff1a;深入解析和实现 引言 随着人工智能和计算机视觉技术的飞速发展&#xff0c;人脸识别已成为许多领域的关键技术之一。然而&#xff0c;人脸识别的准确性高度依赖于输入的人脸图像质量。因此&#xff0c;人脸质量评价作为人脸识别前的预处理步骤&#…