0
点赞
收藏
分享

微信扫一扫

主从复制&读写分离

janedaring 2021-09-25 阅读 101

为什么要做主从?

读写分离的好处

一主双从,使用mycat中间件实现读写分离

准备四台机器:

10.3.134.98 master
10.3.134.99 slave1
10.3.134.100 slave2
10.3.134.101 mycat

vim /etc/hosts    添加如下内容
10.3.134.98          master
10.3.134.99          slave1
10.3.134.100         slave2
10.3.134.101         mycat

先做好主从再进行读写分离:
M-S架构GTID(全局事务标识) 基于事务ID复制
3、编辑配置文件
[root@biudefor ~]# vim /etc/my.cnf
#####  master 端添加如下配置
server-id=4098   #定义server id master必写 
log-bin=mylog   #开启binlog日志,master比写
gtid_mode=ON    #开启gtid
enforce_gtid_consistency=1   #强制gtid
slave1操作: #添加如下配置
server-id=4099
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

slave2操作: #添加如下配置
server-id=4100
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

4、重启服务
5、登陆MySQL,并修改密码
[root@biudefor ~]# mysqladmin -uroot -p password"新密码"
Enter password: 旧密码
6、master上创建连接账户,slave上指定连接账户
在master上操作:
创建账户:
mysql> grant replication  slave,reload,super on *.*  to 'slave'@'%' identified by '密码' ;
mysql> flush privileges;

slave1和slave2上的操作是一样的:
slave1:
mysql> \e
change master to
master_host='master',      #主ip 地址  最好用域名
master_user='授权用户',     #主服务上面创建的用户
master_password='授权密码', 
master_auto_position=1;

mysql> start slave;   #启动slave角色
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G  #查看状态,验证sql和IO是不是yes。

然后在slave2上进行相同的操作

7、测试

Mycat 数据库中间件

部署环境
安装jdk
将jdk上传到服务器中
[root@mycat ~]# tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@mycat ~]# cd /usr/local/
[root@mycat local]# mv jdk1.8.0_221/ java 
设置环境变量
[root@mycat local]# vim /etc/profile  #添加如下内容,
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@mycat local]# source /etc/profile
部署mycat
下载
[root@mycat ~]# wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
解压
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
配置mycat
认识配置文件

MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:

/usr/local/mycat/conf/server.xml  #定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml  #定义逻辑库,表、分片节点等内容。
编辑server.xml
[root@mycat ~]# cd /usr/local/mycat/conf/
[root@mycat conf]# vim server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">

        <user name="root" defaultAccount="true">
                <property name="password">Duan@123</property>
                <property name="schemas">duan</property>
        </user>
</mycat:server>

name='root'     mycat的虚拟用户名
 password       用于登陆这个虚拟用户的密码
  schemas       虚拟库
schema配置详解:
      maxCon="1000" minCon="10"               // 连接
      balance="0"                             // 负载均衡
      writeType="0"                           // 写模式配置
      dbType="mysql" dbDriver="native"        // 数据库配置
      switchType="1"  slaveThreshold="100">

!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>

<writeHost host="hostM1" url="master:3306" user="mycat" password="Duan@123">
                        <readHost host="hostS1" url="slave:3306" user="mycat" password="Duan@123" />
                        <readHost host="hostS2" url="slave1:3306" user="mycat" password="Duan@123" />
                </writeHost>

配置schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="duan" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="duan" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

                <writeHost host="hostM1" url="master:3306" user="mycat" password="Duan@123">
                        <readHost host="hostS1" url="slave1:3306" user="mycat" password="Duan@123" />
                        <readHost host="hostS2" url="slave2:3306" user="mycat" password="Duan@123" />
                </writeHost>
        </dataHost>
</mycat:schema>

mycat已经配置好了,然后在master上给用户授权
mysql> grant all on testdb.* to 配置文件中指定的用户名@'%' identified by '配置文件里的密码';
mysql> flush privileges;
启动mycat

启动mycat之前需要调整JVM

在wrapper.conf中添加 
[root@mycat mycat]# cd conf/
[root@mycat conf]# vim wrapper.conf  #在设置JVM哪里添加如下内容
#wrapper.java.additional.1=
wrapper.startup.timeout=300 //超时时间300秒 
wrapper.ping.timeout=120
启动:
[root@mycat conf]# /usr/local/mycat/bin/mycat start 
Starting Mycat-server...
[root@mycat ~]# jps   #查看mycat是否启动
13377 WrapperSimpleApp
13431 Jps
[root@mycat ~]# netstat -lntp | grep java
测试
在mycat的机器上面测试mycat用户登录
[root@biudefor conf]# mysql -uroot -hmaster -umycat -p
Enter password: 

将master当做mycat的客户端
[root@mysql-master ~]# mysql -uroot -h mycat -p  -P 8066
举报

相关推荐

0 条评论