zoukankan      html  css  js  c++  java
  • 基于mycat实现读写分离

    做MySQL主从复制和读写分离

    mysql主从复制:

    要求环境:三台centos虚拟机(也可以更多),配置好yum

    将一切的准备工作做好。比如三台网络要互通。

    配置主服务器:

    [root@localhost ~]# yum -y install mariadb mariadb-devel mariadb-server

    [root@localhost ~]# yum -y install ntp

    注:搭建时间同步服务器,时间需要同步,不然很容易出错。主从复制就会丢失数据。

    [root@localhost ~]# vim /etc/ntp.conf

    在文件末尾添加

    server 127.127.1.0

    fudge 127.127.1.0 stratum 8

    [root@localhost ~]# systemctl start ntpd

    [root@localhost ~]# systemctl enable ntpd

    配置从服务器:两台从服务器操作同步

    [root@localhost ~]# yum -y install mariadb mariadb-devel mariadb-server

    [root@localhost ~]# yum -y install ntpdate

    [root@localhost ~]#ntpdate 192.168.253.6

    注:同步主服务器的时间

    再次配置主服务器:

    [root@localhost ~]# vim /etc/my.cnf

    [mysqld]

    server_id = 1

    log_bin = master-bin

    log-slave-updates = true

       [root@localhost ~]# systemctl restart mariadb

       [root@localhost ~]# mysql

       注:默认就是用管理员登录的,所以直接这样操作就行。

       MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.253.%' identified by '123456';

       MariaDB [(none)]> flush privileges;

       MariaDB [(none)]> show master status;

       注:查看我的二进制日志文件时间跟位置。

    再次配置从服务器:两台从服务器操作同步

    [root@localhost ~]# vim /etc/my.cnf

    [mysqld]

    server_id = 2  注:三台服务器的sever_id 不能一样

    relay-log=relay-log-bin

    relay-log-index=slave-relay-bin.index

    [root@localhost ~]# systemctl restart mariadb

    [root@localhost ~]# mysql

    MariaDB [(none)]> stop slave;

    MariaDB[(none)]>change master to master_host='192.168.253.6',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=477;

    注:master_host:主服务器的IP地址

    master_user:主服务器刚刚创建的用户

    master_password:主服务器刚刚创建的用户密码

    master_log_file:主服务器的二进制日志文件,通过show master status;可以查看。

    Master_log_pos=477:刚才查看到的二进制日志位置。

    MariaDB [(none)]> slave start;

    MariaDB [(none)]> show slave statusG;

    注:用G查看是因为一个屏放不下,分屏放.

    Slave_IO_State: Waiting for master to send event

                      Master_Host: 192.168.253.6

                      Master_User: myslave

                      Master_Port: 3306

                    Connect_Retry: 60

                  Master_Log_File: master-bin.000003

              Read_Master_Log_Pos: 477

                   Relay_Log_File: relay-log-bin.000002

                    Relay_Log_Pos: 530

            Relay_Master_Log_File: master-bin.000003

                 Slave_IO_Running: Yes

                Slave_SQL_Running: Yes

                  Replicate_Do_DB:

              Replicate_Ignore_DB:

               Replicate_Do_Table:

           Replicate_Ignore_Table:

          Replicate_Wild_Do_Table:

      Replicate_Wild_Ignore_Table:

                       Last_Errno: 0

                       Last_Error:

                     Skip_Counter: 0

              Exec_Master_Log_Pos: 477

                  Relay_Log_Space: 822

                  Until_Condition: None

                   Until_Log_File:

                    Until_Log_Pos: 0

               Master_SSL_Allowed: No

               Master_SSL_CA_File:

               Master_SSL_CA_Path:

                  Master_SSL_Cert:

                Master_SSL_Cipher:

                   Master_SSL_Key:

            Seconds_Behind_Master: 0

    Master_SSL_Verify_Server_Cert: No

                    Last_IO_Errno: 0

                    Last_IO_Error:

                   Last_SQL_Errno: 0

                   Last_SQL_Error:

      Replicate_Ignore_Server_Ids:

                 Master_Server_Id: 1

    查看IO跟SQL是不是yes,如果其中一个不是,就看Last_IO_Error:、Last_SQL_Error:这两段的错误日志,然后复制到百度上去查。

    验证:

     在主服务器上创建一个数据库,看看两个从服务器是不是已经同步数据库。

    --------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------

                                             Mysql读写分离

    实验环境:

      准备五台centos用于测试:         

    有三台是跟上面操作一样。

    第四台操作:

    1.  读写分离有两种方法可以做,一种是开发人员自己做,一种是开发人员不会做,需要我们运维人员做。准备好两个包。一个是amoeba做读写分离用的,一个是jdk二进制文件,因为我们本身自带的是1.8版本的,太高反而不支持运行amoeba这个软件,所以我们这里找了一个1.6版本的,刚好支持。

    2.  [root@localhost ~]#chmod +x jdk-6u31-linux-x64.bin

    [root@localhost ~]#./ jdk-6u31-linux-x64.bin

    [root@localhost ~]# mv jdk1.6.0_31/ /usr/local/jdk1.6

    [root@localhost ~]# mkdir /usr/local/amoeba

    [root@localhost ~]# chmod 755 /usr/local/amoeba

    [root@localhost ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

    [root@localhost amoeba]# /usr/local/amoeba/bin/amoeba

    注:通过这一条命令就可以看见下面内容,证明aomeba没有错。

      amoeba start|stop

    [root@localhost ~]# vim /etc/profile

    下面三行是设置jdk的变量

    export JAVA_HOME=/usr/local/jdk1.6

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

        下面两行是设置amoeba的变量

    export AMOEBA_HOME=/usr/local/amoeba/

    export PATH=$PATH:$AMOEBA_HOME/bin

    [root@localhost ~]# source /etc/profile

    [root@localhost ~]# java –version  当我们再次查看版本时,会发现,已经重1.8变成了1.6的版本

    java version "1.6.0_31"

    Java(TM) SE Runtime Environment (build 1.6.0_31-b04)

    Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

    3.  配置读写分离,给主服务器“写”、两台从服务器“读”

       首先要在三台主从服务器上给amoeba权限。

       MariaDB [(none)]> grant all on *.* to 'test'@'192.168.253.%' identified by '123.com';

    [root@localhost ~]# cd /usr/local/amoeba/

    [root@localhost amoeba]# cp conf/amoeba.xml conf/amoeba.xml{.bak}

    在更改文件之前,都要先复制一份原有的文件,防止修改完以后不能使用,还不能返回原有数据

    [root@localhost amoeba]# vim conf/amoeba.xml

    下方的红字都是在文件里需要改的,找到这几个地方,然后更改成红色的字

    <property name="authenticator">

    <bean class="com.meidusa.amoeba.mysql.server.MysqlClientA    uthenticator">

    <property name="user">amoeba</property>                      

    <property name="password">123456</property>

    <property name="defaultPool">master</property>

    <property name="writePool">master</property>

    <property name="readPool">slaves</property>

    [root@localhost amoeba]# cp conf/dbServers.xml conf/dbServers.xml{.bak}

    [root@localhost amoeba]# vim conf/dbServers.xml

    找到下面的内容并修改。

    <property name="user">test</property>

    <property name="password">123.com</property>

    <dbServer name="master"  parent="abstractServer">

                    <factoryConfig>

                            <!-- mysql ip -->

                            <property name="ipAddress">192.168.253.6</property>

                    </factoryConfig>

     </dbServer>

    <dbServer name="slave1"  parent="abstractServer">

                    <factoryConfig>

                            <!-- mysql ip -->

                            <property name="ipAddress">192.168.253.7</property>

                    </factoryConfig>

     </dbServer>

    <dbServer name="slave2"  parent="abstractServer">

                    <factoryConfig>

                            <!-- mysql ip -->

                            <property name="ipAddress">192.168.253.8</property>

                    </factoryConfig>

    </dbServer>

    <dbServer name="slaves" virtual="true"> 注 “slaves”是一个组,刚才在上面定义的。

                    <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                            <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                            <property name="loadbalance">1</property>

                            <!-- Separated by commas,such as: server1,server2,server1 -->

                            <property name="poolNames">slave1,slave2</property>

                    </poolConfig>

            </dbServer>

                                                        组内成员

      [root@localhost amoeba]# bin/amoeba start& 放到后台运行。

    [root@localhost amoeba]# netstat -anpt |grep java

      [root@localhost amoeba]# netstat -anpt |grep 8066

      通过上面两条命令可以查看8066、3306端口是否已经开启.

    最后就是找一台client用于测试。

  • 相关阅读:
    股票行情
    证券总结
    求职
    Android的Touch事件处理机制
    订货量、成交量、价订货量、成交量、价格与行情之间的关系
    Android下如何理解onMeasure,onLayout的过程
    并发和并行的区别
    网页布局
    计算机发展史--图灵
    计算机发展史
  • 原文地址:https://www.cnblogs.com/liyurui/p/11740695.html
Copyright © 2011-2022 走看看