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

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]# lsmha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23
1.el7.noarch.rpmmha4mysql-manager-0.58.tar.gz                   
perl-Mail-Sendmail-0.79
21.el7.noarch.rpmmha4mysql-node-0.58-0.el7.centos.noarch.rpm     
1.el7.noarch.rpmperl-Config-Tiny-2.14-7.el7.noarch.rpm          
perl-MIME-Lite-3.030
2.el7.noarch.rpmperl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03
19.el7.noarch.rpmperl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       
2.el7.noarch.rpm[root@mysql-mha MHA-7]# yum install *.rpm -yperl-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:6379slots:[6827-10922] (4096 slots) master1 additional replica(s)M: 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7 172.25.254.30:6379slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 009571cb206a89afa6658b60b2d403136056ac09 172.25.254.40:6379slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master1 additional replica(s)S: c20c9b5465b2e64868161c0e285d55bc81358ba4 172.25.254.110:6379slots: (0 slots) slavereplicates 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7S: d458f34fa900d83212c021dc1e65396e490b5495 172.25.254.120:6379slots: (0 slots) slavereplicates 5ab2e93f4f0783983676f7bd118efaacfb202bd1M: 5ab2e93f4f0783983676f7bd118efaacfb202bd1 172.25.254.10:6379slots:[1365-5460] (4096 slots) master1 additional replica(s)S: 83d7a82fe896cf9f4d8212cb533058659bba16ce 172.25.254.130:6379slots: (0 slots) slavereplicates ba504e78f14df5944280f9035543277a0cf5976bS: 86a4a8fb08e70e41b5a30f829deb983d23854ea7 172.25.254.140:6379slots: (0 slots) slavereplicates 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)? 4096What is the receiving node ID? 1fcaeb1dd936b46f4ea1efe4330c54195e66acf7Please 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: 5ab2e93f4f0783983676f7bd118efaacfb202bd1Source 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 5ab2e93f4f0783983676f7bd118efaacfb202bd1Warning: 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.confmasterauth "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-cli127.0.0.1:6379> auth 123456OK127.0.0.1:6379> info#节点加入集群的超时时间单位是ms# Clustercluster_enabled:1

redis-cli --cluster 参数说明

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册免费的vps:infinityfree

首先是注册网址 https://dash.infinityfree.com/login 各位自行注册就好了 注册好后创建账户&#xff0c;选择最左边这个免费的就可以了 然后可以创建一个子域名&#xff0c;各位自行选择后缀和填写前面就好了 然后拉下来选择 I approve 然后创建账户 然后就可以打开控制面…

LRN正则化是什么?

LRN正则化&#xff0c;全称为Local Response Normalization&#xff08;局部响应归一化&#xff09;&#xff0c;是一种在深度学习&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中常用的正则化技术。该技术旨在通过模拟生物视觉系统中的侧抑制现象&#xff0c;…

微深节能 环冷卸灰小车定位远程控制系统 格雷母线

微深节能环冷卸灰小车定位远程控制系统中的格雷母线&#xff0c;作为一种高精度位移测量系统&#xff0c;在系统中发挥着关键作用。 一、格雷母线概述 格雷母线系统主要由格雷母线、天线箱、地址解码器、地址编码器四个核心部分组成。其核心部件包括扁平状的尼龙加纤合成材质外…

华为大咖说丨企业数字化转型如何开展顶层设计?

本文作者&#xff1a;李克武&#xff08;华为交通智慧化军团 首席数字化转型专家&#xff09;全文约1787字&#xff0c;阅读约需6分钟 近期&#xff0c;我与朋友探讨了有关企业数字化转型顶层设计这一话题。探讨结束后&#xff0c;我认为有必要详述一番&#xff0c;由此才有了这…

更改文件路径时出现The location is not writable.Please choose a new location问题解决方案

The location is not writable.Please choose a new location问题解决方案 1.问题如下图&#xff1a; 在当前盘里面试着删除一个文件夹&#xff0c;发现需要管理员的权限才可删除 主要原因&#xff1a;当前盘没有修改/写入权限 2.解决方案 在需要写入的盘符上右键–>点击属…

矩阵分析 学习笔记2 线性子空间 线性映射

子空间是啥&#xff1a; 平凡子空间&#xff1a;{0}&#xff08;只有一个0元素&#xff09;和V&#xff08;原本的子空间&#xff09; 向量组生成的子空间&#xff1a; 比如说&#xff0c;我们的三维空间就是由三个标准基组成的向量组“张”成的空间&#xff0c;而标准基组成的…

解决npm下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

尖山有多尖 长沙有多长

各位“大虾”、各位朋友&#xff1a; 大家都知道&#xff0c;在我们长沙有一条新一代计算系统产业链&#xff0c;这是全国45个国家级先进制造业集群唯一以“计算”命名的产业集群。产业链每年都会举办若干活动&#xff0c;为大家提供交流碰撞、相互提高的机会。 今天&#xf…

关于Claude Artifacts的5条总结!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

JavaWeb - Vue项目

创建 命令行 vue create project 图形化界面 vue ui 目录结构 启动 命令行 npm run serve 端口配置 Vue的组件文件以.vue结尾 每个组件有三个部分组成&#xff1a; <template>&#xff1a;模板部分&#xff0c;由它生成HTML代码<script>&#xff1a;控制…

电容笔买什么牌子好?2024开学季超硬核避坑指南!选对不交智商税

随着平板设备的广泛使用&#xff0c;电容笔逐渐成为了学生和职场人士的热门选择&#xff0c;因为它们可以与平板设备无缝配合&#xff0c;提升用户书写和绘画的效率与乐趣。但随着电容笔市场的蓬勃发展&#xff0c;涌现了很多平替品牌&#xff0c;很多用户都在纠结电容笔该买什…

css画个熊猫

【html源码-一键复制查看效果】 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.box {position: relative;width: 300px;height: 260px;…

文件批量处理:批量读取、修改与保存的技术指南

目录 一、引言 二、批量读取文件 2.1 文件格式与规范 2.2 读取文件的基本方法 2.3 批量读取的实现 三、批量重命名文件 3.1 使用专用软件 3.2 编写脚本实现 四、批量修改文件内容 4.1 使用文本编辑器或IDE的批量替换功能 4.2 编写脚本批量修改文件内容 五、案例分析…

android studio 设置gradle jdk

1. 左上角点击file 2. 按照如下点击&#xff1a; 3. 即可修改gradle jdk

SQL-函数

1、字符串函数 # 字符函数 select concat(hello , mysql!); select lower(HELLO); select upper(hello); select lpad(01,5,-);# 左填充 select rpad(01,5,-);# 右填充 select trim( hello mysql ! );# 去除前后空格 select substring(hello mysql!,1,7);# 截取一部分字符前7…

sql-labs31-35关通关攻略

第三十一关 一.判断闭合 1“” 二.查询数据库 http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,2,database()--http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,2,database()-- 三.查表 http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,…

pmp证书为何会被骂?他真的就是个垃圾证书?

说是垃圾到不至于。 毕竟PMP证书今年被北京市列入急需紧缺专业人才人员名单&#xff01;同时可以在创新创业、社会保障、评价激励等方面得到优先支。 其次&#xff0c;证书&#xff0c;其内容可以夯实基础&#xff0c;理清一个项目从启动、执行到最后的收尾做ppt结案的整个流…

[Hive]四、Hive On Tez

G:\Bigdata\Projects\大数据电商数仓项目(含2.0、3.0版本)\数仓项目实战V2.0\word版资料 1. Hive集成引擎Tez Tez是一个Hive的运行引擎,性能优于MR。为什么优于MR呢?看下图。 用Hive直接编写MR程序,假设有四个有依赖关系的MR作业,上图中,绿色是Reduce Task,云状表示写…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;303 标注数量(xml文件个数)&#xff1a;303 标注数量(txt文件个数)&#xff1a;303 标注类别…

多个pdf合并成一个文件怎么操作?教你几种大家都在用的合并pdf文件方法!

多个pdf合并成一个文件怎么操作&#xff1f;在当下这个信息爆炸的数字化纪元&#xff0c;PDF文件的整合管理正逐步成为职场与学术界的热门话题&#xff0c;许多人或许还未全然意识到&#xff0c;将多个PDF文档合并为一的策略背后所蕴含的深远意义&#xff0c;其中最重要的就在于…