第四阶段笔记 Jingtao_day10

day 10 数据库读写分离和负载均衡

此文档是根据上课流程编写,更多细节和图片请参见刘老师的专栏。

江哥的专栏

cgb2008-京淘day10

两台数据库:129 --> 主库;130 --> 从库
高可用:HA

一. 实现数据库读写分离
  1. 原理

    ​ 用户在和数据库连接时,默认是一个服务器连接一个数据库。查询操作多,写入操作少。读从库,读/写主库。添加数据库代理,管理主从库。代理服务器需要知道IP地址和端口号。用户不知道自己连的是哪个服务器,所以是反向代理技术,客户端连接的是代理的IP地址。

    ​ 用户 --> 数据库代理[Amoba --> Mycat] --> 数据库

    ​ Mycat:数据库分库分表中间件

  2. Mycat中间件

    i. Mycat介绍

    ​ 参见官网《MYCAT官方网站—开源分布式数据库中间件

    ii. Mycat配置

    ​ 1) 安装Mycat

    # 跳转到工作路径
    cd /usr/local/src
    # 解压Mycat
    tar -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
    # 将Mycat文件移动到/software
    mv Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz software/

    ​ 2) 配置用户和代理服务器,服务器和数据库的连接

    cd mycat/
    == application.yml
    #连接的是数据库的代理
    url: jdbc:mysql://192.168.126.129:8066/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

    ​ 3) 编辑server.xml

    ​ 用户与代理服务器之间的连接通过server.xml文件进行配置

    
    
        root
        
        
        jtdb
    
    
        
        user
        jtdb
        true
    

    ​ 4) 编辑schema.xml

    ​ 该文件表示代理和数据库的配置 HOST:PORT:用户名:密码:数据库名称

    
    
    
    
    
    

    ​ 5) Mycat命令

    # 跳转到工作目录
    cd ../bin
    # 启动mycat
    ./mycat start
    # 查看mycat状态
    ./mycat status

    ​ 6) 负载均衡测试

    ​ 将从库的数据库信息手动地进行修改

  3. 实现数据库双机热备

    核心:2台数据库互为主从,实现数据库高可用的条件式实现主从的备份。

    之前:129为主,130为从;现在的配置:130为主,129为从

    1) 检查主库状态

    192.168.126.130
    SHOW MASTER STATUS;

    2) 实现主从配置

    192.168.126.129
    CHANGE MASTER to MASTER_HOST="192.168.126.130",
    MASTER_PORT=3306,
    MASTER_user="root",
    MASTER_PASSWORD="root",
    MASTER_LOG_FILE="mysql-bin.000001",
    MASTER_LOG_POS=700;
    
    #启动主从服务
    start slave    
    
    #检查状态
    show slave status;
二. 实现数据库高可用
  1. 修改schema配置文件

    
    
    
        
    
    
        
        
        
          
        
            
        
        
        
        
        
        
        
        select 1
        
        
            
            
            
            
        
        
            
            
            
            
        
        
        
        
    
    
  2. 上传文件

    # 停止mycat服务
    ./mycat stop
  3. 数据库高可用的测试

    i. 首先应该将129数据库关闭

    ii. 启动程序,通过数据库代理检查是否访问正确(查),入库是否正常(写)

    iii. 重启129数据库,看数据是否同步

三. Redis缓存
  1. 系统优化策略

    ​ 缓存服务器:当用户进行查询操作时,先看缓存服务器中是否有数据,如果有,将缓存中的数据返回给用户;否则用户直接查询数据库,并将查询到的结果存储到缓存。可以降低用户访问物理设备的频次,从而提高响应速度。

  2. 缓存的设计

    1) 缓存数据如何存储?应该采用什么样的数据结构呢? K-V --> key的唯一性

    2) 缓存数据的容量大小,2G? 100G? 1000G? 应该动态维护缓存数据,将不需要的数据提前删除 --> LRU/LFU/随机/TTL算法

    3) 缓存数据保存到内存中,缓存的特点是断电即擦除。定期将内存数据持久化 --> 写入磁盘中

    4) 单台缓存服务器性能不足,所以一般需要搭建集群,实现高可用

    5) 使用C语言开发

  3. Redis缓存服务

    i. 什么是redis?

    ​ 参见官网《Redis》《Redis中文网

    ​ 开源,数据结构服务器,可用作非关系型数据库、高速缓存和消息队列代理。

    ​ 速度:读:11.2W/s,写:8.6W/s

    ii. 上传redis安装文件

    tar -xvf redis-5.0.4.tar.gz
    mv redis-5.0.4 redis
    mv redis-5.0.4.tar.gz software

    iii. 安装redis

    cd redis
    make
    make install

    iv. 修改redis配置文件redis.conf

    # 去除IP绑定
    # bind 127.0.0.1
    # 修改保护模式
    protected-mode no
    # 设置后台运行
    daemonize yes

    80,8080,3306,8066,redis端口号:6379

  4. Redis基础命令

    ​ Redis服务在运行时,必须依赖redis.conf。操作redis时最好在根目录中。

    # 启动redis
    redis-server redis.conf
    # 进入redis客户端
    redis-cli -p 6379
    Ctrl+C 退出
    # 关闭redis服务器
    redis-cli shutdown
  5. Redis客户端命令

    i. String类型命令

    set a aaa
    get a => "aaa"
    strlen a => (integer)3
    exists a => (integer)1
    del a => (integer)1
    keys *
    keys a
    keys a*
    keys ??
    mset a a b b c c
    mget a b => "a" "b"
    append a b
    type a
    select 3
    flushdb 0 清空第一个数据库
    flushall 清空所有数据库
    incr decr incrby decrby
    expire a 5
    ttl a
    persist a

你可能感兴趣的:(java,intellij-idea,mycat)