云计算工程师做 “选择题”
    
软件 --> 组件化的设计思想     nginx   --  模块

第二阶段:
    监控与安全:5天
        监控解决方案:3
            Zabbix
            Prometheus
        安全:2
            kali、扫描与抓包、系统安全加固、服务加固、iptables
    项目实战一:2天
        高可用负载均衡web集群
----------------------------------------------------------
---------------------------------------------------
集群:
    集群分类:
        按功能分类:
            高性能集群
            高可用集群:故障自动切换(备胎)
            负载均衡集群:压力分摊
        按架构分类:
            中心化架构集群
            非中心化架构集群

    负载均衡软件:
        LVS:Linux virtual Server
            组成:
                内核空间:IPVS框架
                用户空间:ipvsadm命令
            工作模式:
                NAT:地址转换模式   net.ipv4.ip_forward
                DR:直连路由模式
                TUN:隧道模式
        NGINX:能够做web服务器,也能做反向代理服务器

        HAPROXY:天生的负载均衡器

    负载均衡软件选择:
        LVS:负载特别大的站点
        NGINX:负载比较小的站点
        HAPROXY:负载较大且需要七层会话处理

        功能:LVS<HAPROXY<NGINX
        性能:LVS>HAPROXY>NGINX


    代理和调度:
        代理:
            负载均衡软件工作于OSI七层
            需要对客户端的包进行深层次解析后发往真实服务器
        调度:
            负载均衡软件工作于OSI四层
            无法识别典型的应用层协议,仅做流量调度分发
----------------------------------------------------
存储
    解决方案:
        硬件层面:存储柜
        软件层面:分布式存储系统(SDS:soft define storage)

Ceph:分布式存储解决方案
    
    组件化设计思想

    版本:v17  Qunicy   

    存储提供形式:
        块存储
        文件存储
        对象存储

    组件:
        MON:monitor,整个集群的监控,绘制OSD地图
        MGR:manager,管理组件,提供了一个对于ceph的web管理界面
        OSD:objective stroage deamon,负责集群内部的数据存储
        MDS:meatadata service,元数据服务器
        RGW:rados gateway,网关服务

    
    搭建准备工作:
        1、更新自定义yum源ceph相关软件
        2、配置hosts文件解析主机名
            192.168.88.240 quay.io
        3、配置各节点yum源
        4、配置时间服务
        5、各个节点安装必要软件:podman/python39/lvm2
        6、搭建私有镜像仓库
            6.1、搭建私有仓库    5000-->80
            6.2、导入ceph相关镜像
                podman load -i xx.tar
            6.3、推送ceph镜像到私有仓库
                podman push quay.io/ceph/ceph:v17
        7、配置各个节点识别私有镜像仓库
        8、Ceph节点关机打快照


    搭建流程:
        1、初始化集群(cephadm)
            # ./cephadm bootstrap \
            > --mon-ip 192.168.88.11 \
            > --initial-dashboard-password=123456 \
            > --dashboard-password-noupdate \
            > --skip-monitoring-stack
            # podman images | wc -l   ==> 2
            # podman ps | wc -l       ==> 4
        2、同步ceph的ssh公钥
            # ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph1
        3、集群扩容
            # ceph orch host add ceph2 192.168.88.12
        4、绑定OSD组件
            a) # ceph orch daemon add osd ceph1:/dev/vdb
            b) # ceph orch apply osd --all-available-devices
        5、检查集群状态
            # ceph -s 
            # ceph orch ls

    

    补充:清理集群方法
        # ceph mgr module disale cephadm
        # ceph fsid
        # cephadm rm-cluster --force --zap-osds --fsid <fsid>

    存储池:pool,Ceph中存储资源类型的逻辑区分
        类似于Windows中的文件夹,仅做存储数据类型的区分

    块存储:Rados Block Device
        优点:读写速度快,多节点IO
        缺点:不能用于多节点共享

        场景:应用服务器需要进行大量读写操作,典型代表是数据库服务器

        COW技术:Copy ON Write,写时复制


    文件存储:Ceph FS
        优点:允许多客户端同时挂载
        缺点:读写速度比块要慢

        场景:多机共享文件

    对象存储:Ceph Rados Gateway,   web服务
        优点:适用于非结构化数据
        缺点:开发难度大

        场景:网站资源解耦(网页资源与静态资源分离)

        数据分类:
            结构化数据:可以存储到关系型数据库中的数据,典型代表字符串
            非结构化数据:不适合存储到数据库中的数据,典型代表图片
==========================================================================
Zabbix监控方案:对服务器直接进行监控
    组成部分:
        C/S:数据采集、数据存储
        B/S:数据展示、配置
    组件:
        MySQL:数据持久化存储
        zabbix-server:接收agent采集的数据,写入到MySQL
        zabbix-agent:负责数据采集,传递采集数据
        zabbix-web:数据展示
        
    核心概念:
        主机:被监控端,通常是安装了agent的服务器或支持SNMP协议的网络设备
        主机群组:主机分类,便于查找

        监控项:数据采集单位,每个监控项对应一个数据采集点(key)
        模板:监控项的分组,便于新增设备时绑定对应的监控项

        触发器:定义阈值,表现形式为一个表达式
        触发器动作:触发器中定义的阈值被触发后的行为

        自动发现规则:定义符合条件的规则
        自动发现动作:符合自动发现条件的主机如何处理

    自定义监控项:
        语法:UserParameter=键值,脚本(shell命令)
        语法:UserParameter=键值[*],脚本(shell命令) $1

    监控模式:(针对于被监控端)
        被动模式:server向agent发起索要数据的请求,agent接收到请求后将数据发送给server
            表现:
                zabbix-agent服务监听固定端口10050用于连接建立和数据传输
        主动模式:agent按照指定的时间间隔将采集到的数据推送给server
            表现:
                zabbix-agent服务不监听固定端口
                推送数据时临时启用一个高位端口,传输完成断开连接
--------------------------------------------------------------------------
Prometheus:适用于监控云原生领域容器相关指标的一款开源监控方案
    组件:
        prometheus-server:数据接收、存储、展示
        xx-exporter:数据采集单位
        push-gateway:push模式下数据中转站
        alertmanager:报警组件
        grafana:数据展示组件
    工作模式:
        pull模式:prometheus-server主动找exporter索要数据
        push模式:exporter主动将数据推送到push-gateway,然后回传到server
    alertmanager特性:
        去重、分组、路由、抑制、静默
------------------------------------------------------------------------------
安全:
    kali:一款基于debain分支的Linux发行版,广泛应用于网络安全领域
    nmap:基于scan方式的强大扫描工具,可实现网段、主机、多端口、弱口令爆破等功能
            -sP/-sS/-sT/-sU/-A    --script
            
    加密方法:对称加密、非对称加密
    tcpdump -i 网卡 -A -w 文件名  -r  文件名

    网站攻击方式:
            DoS:Deny of Service
            DDoS:Distribute Deny of Service
    用户管理:chage /passwd
    文件安全:i / a

    iptables:Linux上的软件防火墙
        组成部分:
            内核空间:NET-FILTER
            用户空间:iptables
        工作模式:
            主机型防火墙
            网络型防火墙
        四表五链:
            表:raw/mangle/nat/filter
            链:INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
        默认规则设置方式:
            白名单:默认禁止,添加放行规则
            黑名单:默认放行,添加禁止规则

        选项:
            -nL/-F/-A/-I/-D/-P
            -m state/multiport/iprange

        地址转换:
            源地址转换:适用场景为多用户上网,内部网络数据包穿过路由器后做地址转换
                -j SNAT --to-source xxx/-j MASQUERADE
            目标地址转换:适用场景为服务发布,外部网络数据包进入路由器前进行地址转换
                -j DNAT --to-destination xxx
=================================================================================

项目实战一:
    业务知识补充:
        开发分类:
            前端:网站上目之所及的所有内容归类到前端
            后端:眼睛看不到的内容归类到后端
        
        开发语言:
            前端:HTML/CSS/JS
            后端:Java/python/php/c++/Go
            
                解释型语言:python/php
                编译型语言:C、C++/Go

        服务:
            前端:nginx/httpd
            后端:Tomcat/php-fpm/uWSGI

        前后端数据交互:动静分离
        
    项目结构设计:
        前后端不分离开发-->一个业务对应一套代码
        前后端分离开发  -->一个业务对应多套代码
        
    架构演变设计:
        单机部署(ALL IN ONE)-->纵向拆分(服务分离)-->横向扩展(并发请求处理)
        
    Linux操作系统安装:
        单机:光盘、U盘(UltraIOS)、再生龙
        批量:PXE/Cobbler
    
    服务器硬件:http://www.tmooc.cn/course/300254.shtml
    
    www.huawei.com-->商用产品及方案(鲲鹏计算)-->学习与技术支持(产品文档)-->智能服务器
=====================================================================================

第三阶段:
    数据库(10天):
        MySQL(8天)
            MySQL使用:5
                SQL语句
                MySQL索引
                MySQL用户权限管理体系
            MySQL数据备份与还原:1
                备份方法
                备份策略
            MySQL架构设计:2
                MySQL主从同步
                MySQL读写分离
                MySQL分库分表
        Redis(2天)
            Redis的基础使用、数据类型、数据持久化
            Redis架构设计
                Redis主从同步
                Redis哨兵服务
                Redis分布式高可用集群
    项目实战(4天):
        HIS医疗信息系统:Springboot+VUE
        CICD技术路线:Git+GitLab+Jenkins+(ssh/ansible)
-------------------------------------------------------------------------------
数据库:
    是在服务端实现数据存储的一类软件的统称

    分类:
        关系型数据库
            1、数据持久化存储
            2、数据结构化存储
            3、数据与数据之间可以建立关联关系
            4、通常具备体系化的SQL语句
        非关系型数据库
            1、数据灵活存储
            2、数据通常存储于内存
            3、通常不具备体系化的SQL语句

--------------------------------------------------------
SQL语句:
    MySQL登录方法(选项和参数间不留空格):
        # mysql -h数据库服务器地址 -P数据库服务端口 -u用户 -p密码

    MySQL密码管理:
        已知密码:
            # mysqladmin -u用户 -p'旧密码' password '新密码'
            -> alter user 用户@地址 identified by '新密码';
        未知密码(root用户密码破解):
            skip_grant_tables
            
    命令行补全工具:
        [root@mysql50 ~]# python3 -m pip install --upgrade pip
        [root@mysql50 ~]# python3 -m pip install mycli==1.2.0
        使用mycli命令代替mysql命令

    图形工具:
        phpMyAdmin
        DBeaver
        MySQL-WorkBench

    操作分类:
        读操作:select
        写操作:insert/update/delete

    查询语句:
        语法:
            select 字段列表 from 库名.表名
            [连接方式] join 库名.表名 on 连接条件
            ...
            where      分组前筛选
            group by   分组字段
            having     分组后筛选
            order by   排序字段
            limit      分页
        
        SQL语句执行顺序:
            FROM子句:确定数据来源,包括JOIN的表
            ON:执行JOIN条件
            JOIN:如果有JOIN,根据JOIN类型(如INNER、LEFT),将相关行组合起来
            WHERE子句:过滤记录
            GROUP BY子句:根据指定的列分组记录
            聚合函数:分组后对分组外其他字段进行聚合处理
            HAVING子句:过滤分组
            SELECT子句:选取特定的列
            DISTINCT子句:去除重复数据
            ORDER BY子句:最后对结果进行排序
            LIMIT子句:限制输出行数
            
        多表查询:
            连接方式:
                交叉连接:笛卡尔积
                内连接:inner
                外连接
                    左外连接:left
                    右外连接:right
                    全外连接:full(MySQL中不支持full)   union
            连接条件:
                等值连接
                不等值连接

        嵌套查询(子查询):多个select语句进行拼接
            where后:       select语句的结果作为条件
            having后:      select语句的结果作为条件
            from后:        select语句的结果作为临时表
            select后:      select语句的结果作为临时字段

        条件筛选:
            数值比较:</<=/>/>=/=/!=
            字符串比较:=/!=
            范围匹配:in/not in/between x and y
            模糊匹配:like    _   %
            正则匹配:regexp
            逻辑运算:and/or/not   && || !  ()
            空与非空:IS NULL/IS NOT NULL

        
        查询结果处理:
            别名:as
            去重:distinct
            结果拼接:concat(),concat_ws()    
            聚合函数:count()/max()/min()/avg()/sum()
            分组:          group by 
            分组后过滤:    having
            排序:          order by 
            分页:          limit
            
            关于where与having:
                作用:查询数据中申明筛选条件
                区别:
                    对于表中真实的字段筛选用where
                    对于select过程中做出来的临时字段用having
                核心:
                    group by 后边只能用having

        内置函数:
            字符函数:
                length()/char_length()/upper()/lower()
                substr()/instr()/trim()
            数学函数:
                abs()/pi()/ceil()/floor()/mod()/round()
            日期时间函数
                now()/curdate()/curtime()
                date()/time()
                year()/month()/day()/hour()/minute()/second()
                week()/weekday()/monthname()/dayname()
                quarter()/dayofyear()/dayofmonth()
            加密函数:md5()
            聚合函数:
                count()/max()/min()/avg()/sum()
            数学计算
            流程控制函数:if()/ifnull()/case

    表记录管理语句:
        新增:insert into 库名.表名(字段列表) values (行1),(行2)...;
        修改:update 库名.表名 set 字段1=值,字段2=值... where 条件筛选;
        删除:delete from 库名.表名 where 条件筛选;
                
    库表管理:
        库管理
            create/alter/drop database
            show databases
            show create database
        表管理
            create/alter/drop/desc table
            show tables from 库名
            show create table 

            alter table 库名.表名 动作(add/modify/change/drop/rename)

            create table xx select * from xx
            create table xx like xx

    数据类型
        字符类型:char/varchar/text/blob
        数值类型:
            整型:tinyint/smallint/mediumint/int/bigint
            浮点型:float/double
            unsigned
        日期时间类型:date/time/year/datetime/timestamp
        枚举类型:enum/set

    数据导入导出
        导入:
            load data infile "文件" into 库名.表名 
            fields terminated by 列分隔符
            lines terminated by 换行符
        导出:
            select 字段列表 from 库名.表名 into outfile "文件"
            fields terminated by 列分隔符
            lines terminated by 换行符

    表约束
        基础约束
            空与非空:not null
            默认值:default
        高级约束
            唯一约束:unique,字段值唯一,可以赋空值,一张表中可以有多个
            主键约束:primary key,字段值唯一且不能为空,一张表中只能有一个
            自增约束:auto_increment,主键不一定自增,但自增一定是主键
            外键约束:foreign key,建立表与表之间数据的关联

    SQL语句分类:
        DDL:database define language,数据定义语句
            create/alter/drop
        DML:database manager language,数据操作语句
            insert/update/delete
        DQL:database query language,数据查询语句
            select/show
        DCL:database control language,数据控制语句
            grant/revoke
        TCL:transcation control language,事务控制语句
            begin/commit/savepoint/rollback
    
    事务:
        针对于DML
        一组SQL语句要么全部执行,要么全部不执行
        是保证数据准确性的机制

        特性:
            原子性(Auomicity):在一个事务中,像增删改(DML)要么全部成功,要么全部失败
            一致性(Consistency):事务完成时必须所有数据都保持一致状态
            隔离性(Isolation):多个事务的执行是互不干扰的
            持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
    
    
    存储引擎:InnoDB、MyISAM、MEMORY   > show engines;
    
    
    索引:加速查询速度的一种数据结构
        分类:
            按作用效果:针对于字段值
                普通索引:index
                唯一索引:unique
                主键:    primary key
            按存储形式
                聚簇索引:数据和索引在一起
                非聚簇索引:数据和索引不在一起
            按数据结构:
                树型索引:btree、b+tree,正排表:根据行号找内容
                哈希索引:hash
                全文索引:fulltext
                空间索引
            按作用字段
                单列索引:作用于单个字段
                复合索引:作用于多个字段,使用时从左往右匹配


    用户权限管理:
        用户管理:
            create/alter/drop/rename user 
        权限管理:
            grant/revoke
            flush privileges
        权限二阶段验证:
            一阶段:用户登录权限
            二阶段:SQL执行权限
        权限分布:
            用户信息 --> mysql.user
            全局权限 --> mysql.user
            库权限   --> mysql.db
            表权限   --> mysql.tables_priv
            字段权限 --> mysql.tables_priv/mysql.columns_priv
=============================================================================
数据备份:(保证数据安全)
    三要素:
        BW、RPO、RTO
    方式:
        冷备份:cp/tar/zip,数据库服务停止的状态下完成数据备份操作
        温备份:mysqldump,数据库运行状态下完成数据备份,但数据库的写操作会被阻塞
        热备份:xtrabackup,数据库运行状态下完成数据备份,数据库读写操作不受影响
                --host / --port / --user / --password / --datadir / --backup
                --target-dir / --incremental-basedir 
                --prepare / --apply-log-only / --incremental-dir /--copy-back
    文件:
        物理备份:数据库磁盘文件
        逻辑备份:SQL语句
    策略:
        完整备份:备份所有数据(单库单表的所有数据也归此类)
        部分备份:备份部分数据(以某一个备份点为参考点)
                差异备份:部分备份都以完整备份为参考点
                增量备份:部分备份以上一次备份为参考点

    实时备份:binlog日志,记录MySQL执行过的所有的写操作的语句
        binlog日志管理:
            配置:log_bin
            查看日志:
                show master status      #当前使用的
                show binary logs        #所有的
            刷新日志:
                1、达到默认大小自然刷新
                2、flush logs
                3、mysqldump --flush-logs
                4、重启MySQL服务
            清理日志:
                1、自动清理
                2、purge master logs to xx
                3、reset master
            恢复数据:
                mysqlbinlog binlog.000001 | mysql

    推荐方案:
        1、冷备份                               开发、测试环境
        2、mysqldump+lvm-snapshot               内部系统,数据量小
        3、mysqldump+binlog                     内部系统,数据量中
        4、xtrabackup                           外部业务,数据量大


    MySQL中的锁:
        类型:
            读锁:共享锁
            写锁:排它锁
        粒度:
            表级锁
            页级锁
            行级锁
================================================================================
MySQL架构:
    MySQL主从同步:解决多个数据库服务器数据实时同步的解决方案
        工作原理:通过复现主服务器binlog日志中SQL语句的方式实现数据实时同步
        结构模式:(宏观模式),区分数据库服务器的角色
            一主一从:搭建简单,数据副本数少
            一主多从:数据多副本且无关联,主节点负载高
            级联复制:相对主节点负载低,数据多副本但有关联
            互为主从:多节点写,易出现死锁
        复制模式:(微观模式),保证MySQL主从同步性能
            异步复制:主服务器处理完SQL直接返回结果
            半同步复制:主服务器处理完SQL等待至少1个从完成数据同步后返回结果
            全同步复制:主服务器处理完SQL等待所有从完成数据同步后返回结果

        搭建流程:
            主服务器:
                1、安装MySQL并启动服务
                2、配置binlog日志和server_id
                3、授权主从同步用户
                4、备份已有数据
            从服务器:
                1、安装MySQL并启动服务
                2、还原主服务器备份数据
                3、配置server_id(从服务器不严格要求启用binlog日志)
                4、change master to语句      设置主服务器信息
                        master_host=主服务器地址
                        master_port=主服务器端口
                        master_user=登录主服务器用户
                        master_passowrd=登录主服务器密码
                        master_log_file=主服务器正在使用的binlog日志
                        master_log_pos=主服务器当前偏移量
                5、启动io/sql线程,start slave
            错误处理:
                > stop slave;                           #停止io/sql线程
                > reset slave all;                      #重置主从信息
                > change master to 语句                 #重新配置主从同步
                > start slave;                          #启动io/sql线程


    MySQL读写分离:解决MySQL主从同步中主服务器负载高的解决方案
        实现方法:
            客户端分离:开发者手工分离
            服务端分离:加设MySQL主从复制组的代理服务器
        工作原理:识别SQL类型按照主写读从的规则进行分发
        解决方案:
            mysql-proxy/mysql-router/maxscale
            amoeba/cobar/mycat/mycat2
            atlas/kingshard/vitees
        mycat2配置:
            维度:
                用户/数据源/集群/逻辑库
            配置方法:
                冷配置:手搓配置文件,重启服务生效
                热配置:命令行/管理接口命令操作,即时生效
    
    MySQL分库分表:解决单个MySQL存储上限的解决方案
        实现方法:
            存储层面:利用分布式存储解决方案
            MySQL层面:分库分表机制
        工作原理:将原本存放于1台数据库服务器上的数据分散存储到多个机器上
        常用设计思路:
            垂直分库+水平分表
        解决方案:
            mycat/mycat2/shardingsphere/vitees
        
        
        ###############mycat2热配置模板####################
            # 用户管理
            /*+ mycat: showusers{} */;
            /*+ mycat: createuser{"name":"xx","password":"xx"...} */;
            /*+ mycat: dropuser{"name":"xx"} */;
            # 数据源管理
            /*+ mycat: showdatasources{} */;
            /*+ mycat: createdatasource{"name":"xx"...} */;
            /*+ mycat: dropdatasource{"name":"xx"} */;
            # 集群管理
            /*+ mycat: showclusters{} */;
            /*! mycat: createcluster{"name":"xx"...} */;
            /*! mycat: dropcluster{"name":"xx"} */;
            # 逻辑库表管理
            /*+ mycat: showschemas{} */;
            /*+ mycat: createschema{"name":"xx"...} */;
            /*+ mycat: dropschema{"name":"xx"} */;
            
            
/*+ mycat: createdatasource{
"name":"whost56",
"url":"jdbc:mysql://192.168.88.56:3306/",
"user":"plja",
"password":"123456"
} */;

/*+ mycat: createdatasource{
"name":"rhost57",
"url":"jdbc:mysql://192.168.88.57:3306/",
"user":"plja",
"password":"123456"
} */;

/*+ mycat: dropdatasource{"name":"xx"}*/;

/*! mycat: createcluster{
"name":"rwcluster",
"masters":["whost56"],
"replicas":["rhost57"]
} */;

/*! mycat: dropcluster{"name":"xxx"}*/;


/*+ mycat: createdatasource{
"name": "dw0",
"url": "jdbc:mysql://192.168.88.59:3306/",
"user": "plj", "password": "123456"
} */;                            /*+ mycat: dropdatasource{"name":"xx"}*/;
/*+ mycat: createdatasource{
"name": "dr0",
"url": "jdbc:mysql://192.168.88.60:3306/",
"user": "plj", "password": "123456"
} */;
/*+ mycat: createdatasource{
"name": "dw1",
"url": "jdbc:mysql://192.168.88.61:3306/",
"user": "plj", "password": "123456"
} */;
/*+ mycat: createdatasource{
"name": "dr1",
"url": "jdbc:mysql://192.168.88.62:3306/",
"user": "plj", "password": "123456"
} */;

/*! mycat: createcluster{
"name":"c0",
"masters": ["dw0"],
"replicas": ["dr0"]
} */;

/*! mycat: createcluster{
"name":"c1",
"masters": ["dw1"],
"replicas": ["dr1"]
} */;

/*! mycat: dropcluster {"name": "xx"}*/;


create table tarena.employees(
employee_id int primary key,
name char(10),
email varchar(30)
)
dbpartition by mod_hash(employee_id)
tbpartition by mod_hash(employee_id)
dbpartitions 2
tbpartitions 1;


create table tarena.salary(
employee_id int primary key,
p_date date,
basic int,
bonus int
)
dbpartition by mod_hash(employee_id)
tbpartition by mod_hash(employee_id)
tbpartitions 1; 

==========================================================================
非关系型数据库:
    分类:
        键值对数据库:redis
        文档数据库(行数据库):ElasticSearch
        列数据库:Hbase
        图形图像数据库:Neo4j
        时序数据库:Prometheus
        矢量数据库:VectorDB
    Redis:远程字典服务,键值对类型数据库代表
        核心思想:Redis将数据存放于内存,追求数据的极致处理速度
        应用场景:
                缓存服务器、session共享服务器、购物车
                分布式锁、抽奖器、计数器、消息队列
    基础指令:
        ping/set/get/keys/info
        type/ttl/expire/exists/move/select
        del/flushdb/flushall
    
    Redis数据类型:
        字符类型(string):
            set/get/mset/mget/append/strlen/getrange
        列表类型(list):
            lpush/rpush/lpop/rpop/lindex/lset/linsert/llen/lrange
        散列类型(hash):
            hset/hget/hmset/hmget/hdel/hlen
            hkeys/hvals/hgetall
        无序集合(set):
            sadd/srem/smembers/sismember/srandmember
            spop/scard/sinter/sdiff/sunion
        有序集合(sort set):
            zadd/zrange/zrank/zrevrank
            zscore/zincrby/zrem
    
    Redis数据持久化:
        概念:Redis数据备份的方式,不是把Redis的数据存放到硬盘!!!
        分类:
            rdb(拍照片):定期将内存中的Redis数据快照到硬盘
                    特性:速度快,文件体积小,适合大规模数据备份恢复,但丢失数据量大
                    触发方式:
                            1、手工执行bgsave命令
                            2、Redis服务正常退出
                            3、触发配置文件中的save规则

            aof(写日记):记录Redis执行过的所有的写操作指令
                    特性:速度慢,文件体积大,数据备份恢复速度慢,但数据丢失量小
            
    LNMP+RedisCluster(Redis做缓存服务器效果)
        通过将MySQL中的数据缓存到Redis实现数据查询加速
        热点数据:大量请求同时访问的数据

    Redis分布式高可用集群:
        Redis数据分布式存储及高可用解决方案
        核心概念:哈希槽(hash slots)
            哈希:算法:crc16(key)=int
            槽:逻辑概念,一段范围值  0~16383  共16384个
            
                            crc(key) % 16384 = 0~16383
        结论:判断Redis分布式高可用集群是否可用的标准是16384个哈希槽是否被完全覆盖,无断点和交叉


    Redis主从同步:多个Redis服务器数据实时同步的解决方案
        工作原理:
            1、从服务器向主服务器发送sync命令
            2、主服务器接收到sync命令后,开辟子进程,触发rdb持久化对已有数据做完整备份
            3、主服务器同时开辟内存buffer空间,收集当前执行的所有的写操作的指令
            4、完整备份完成后将rdb文件发送给从服务器
            5、从服务器热加载rdb文件实现数据恢复
            6、接收主服务器发送过来的buffer区域内记录的写操作的指令并进行复现
        结构模式:
            一主一从
            一主多从
            级联复制

    Redis哨兵服务:
        是Redis主从同步的增强架构,可以实现Redis主从同步的读写分离和高可用

        特性:
            1、哨兵节点作为特殊的Redis节点,可以承接客户端连接,但不存储数据
            2、实现Redis主从复制组的监控
            3、实现Redis主从的读写分离
            4、Redis主从复制组的故障自动切换

        


        


 

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐