关于java:第四阶段笔记-Jingtaoday10

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文件进行配置

    <!--用户标签-->
    <user name="root">
        <property name="password">root</property>
        <!--与schema.xml中的配置雷同 留神数据库的大小写-->
        <!--<property name="schemas">jtdb,db2,db3</property>-->
        <property name="schemas">jtdb</property>
    </user>
    <user name="user">
        <!--只读的用户-->
        <property name="password">user</property>
        <property name="schemas">jtdb</property>
        <property name="readOnly">true</property>
    </user>

    ​ 4) 编辑schema.xml

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

    <writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
    <!--读数据库1-->
    <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
    <!--读数据库2-->
    <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
    </writeHost>

    ​ 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配置文件

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
        
    <!--name属性是自定义的  dataNode示意数据库的节点信息  jtdb示意逻辑库-->
    <schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>
        <!--定义节点名称/节点主机/数据名称-->
        <dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
        <!--参数介绍 UTF-8 中文报错  应用单行正文 -->
        <!--balance 0示意所有的读操作都会发往writeHost主机 -->  
        <!--1示意所有的读操作发往readHost和闲置的主节点中-->
        <!--writeType=0 所有的写操作都发往第一个writeHost主机-->    
        <!--writeType=1 所有的写操作随机发往writeHost中-->
        <!--dbType 示意数据库类型 mysql/oracle-->
        <!--dbDriver="native"  固定参数 不变-->
        <!--switchType=-1 示意不主动切换, 主机宕机后不会主动切换从节点-->
        <!--switchType=1  示意会主动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会主动切换到第二个主节点-->
        <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 示意第一个节点.该文件不要随便批改否则会呈现大问题-->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select 1</heartbeat>
        <!--配置第一台主机次要进行写库操作,在默认的条件下Mycat次要操作第一台主机在第一台主机中曾经实现了读写拆散.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担局部压力.
        -->
        <writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
            <!--读数据库1-->
            <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
            <!--读数据库2-->
            <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
        </writeHost>
        <!--定义第二台主机 因为数据库外部曾经实现了双机热备.-->
            <!--Mycat实现高可用.当第一个主机137宕机后.mycat会主动收回心跳检测.检测3次.-->
            <!--如果主机137没有给Mycat响应则判断主机死亡.则回启东第二台主机持续为用户提供服务.-->
            <!--如果137主机复原之后则处于期待状态.如果141宕机则137再次继续为用户提供服务.-->
            <!--前提:实现双机热备.-->
        <writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">
        <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
        <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
    </mycat:schema>
  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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理