美文网首页
Mysql实现主从复制、读写分离

Mysql实现主从复制、读写分离

作者: Lugton | 来源:发表于2019-11-26 15:55 被阅读0次

    在一个系统中,如果只使用一个mysql数据库,难以承受大并发量,系统的高可用性差。搭建mysql集群,分为主节点和从节点,通过主从复制实现数据备份、故障转移、MySQL集群、高可用、读写分离。而在平时的正常运行中,对数据库的读操作比写操作多得多,实现读写分离可以有效地减轻单台数据库的压力

    下面介绍主从复制步骤

    1.分别在主从节点上 vim /etc/my.cnf

    [mysqld]
    log-bin=mysql-bin   //[必须]启用二进制日志
    server-id=36      //[必须]服务器唯一ID
    

    2.授权主节点允许远程访问

    GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'root'; 
    flush privileges;
    show master status;
    
    
    记住File以及Position

    3.配置从节点供主节点访问

    change master to master_host='192.168.1.36',master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=786; 
    flush privileges;
    start slave; 
    show slave status;
    

    看Slave_IO_Running、Slave_SQL_Running状态,为Yes则表明设置成功

    这样主从复制就已经配置成功了。

    测试可知,在master新建一个数据库,slave会进行同步。


    下面介绍读写分离步骤

    1.安装Mycat(系统要预先装好jdk)

    wget http://dl.mycat.io/1.6.6/Mycat-server-1.6.6.1-test-20180729105217-linux.tar.gz
    tar -zxvf Mycat* -C /usr/local
    

    2.配置环境变量

    vim /etc/profile
    export MYCAT_HOME=/usr/local/mycat
    export PATH=${JAVA_HOME}/bin:${MYCAT_HOME}/bin:${PATH}
    

    3.配置用户

    vim /usr/local/mycat/conf/server.xml
    
    设置用户名、密码、数据库名

    4.配置读写分离

    vim /usr/local/mycat/conf/schema.xml 
    
    <dataNode name="dn4" dataHost="slave" database="glo-index"/>
    <dataHost name="slave" maxCon="1000" minCon="10" balance="1"
                              writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100" maxRetryCount="4">
                    <heartbeat>show slave status</heartbeat>
                    <!-- can have multi write hosts -->
                    <writeHost host="hostM1" url="192.168.1.36:3306" user="root"
                                       password="root">
                            <!-- can have multi read hosts -->
                            <readHost host="hostS2" url="192.168.1.60:3306" user="root" password="root" />
                    </writeHost>
                    <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
     </dataHost>
    

    注意两个参数:

    balance:负载均衡类型

    • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
    • balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡
    • balance="2",所有读操作都随机的在writeHost、readhost上分发。
    • balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

    switchType:切换模式

    • switchType='-1' 表示不自动切换
    • switchType='1' 默认值,表示自动切换
    • switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
    • switchType='3' 基于MySQL galary cluster的切换机制(适合集群

    因此,该配置文件中的balance="1"意味着作为stand by writeHost的hostS1和hostS2将参与select语句的负载均衡,这就实现了主从的读写分离,switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1和hostS2并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,毕竟,单纯的MySQL主从集群并不允许将数据读进slave中,除非配置的是双master。

    测试一下:

    在slave数据库中写入数据id为14的数据,master不会同步


    slave
    master

    在master数据库中写入数据id为15的数据,slave同步


    master
    slave

    至此,mysql的主从复制+读写分离就实现了。

    参考:https://segmentfault.com/a/1190000016507131
    https://www.cnblogs.com/cxyyh/p/10815393.html

    相关文章

      网友评论

          本文标题:Mysql实现主从复制、读写分离

          本文链接:https://www.haomeiwen.com/subject/vkoewctx.html