文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql+mycat实现读写分离

2024-04-02 19:55

关注

centos7

master slave mycat1.6 client
192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13

实验环境关闭自己的防火墙
配置所有主机hosts文件:
mysql+mycat实现读写分离
1、master(41.10):
vim /etc/my.cnf
mysql+mycat实现读写分离
systemctl restart mysqld \重启服务读取配置文件参数
1)配置复制用户以及root用户权限
mysql+mycat实现读写分离
2、slave(41.11)
配置/etc/my.cnf配置文件
mysql+mycat实现读写分离
systemctl restart mysqld
mysql> change master to master_host='192.168.41.10',master_user='myslave',master_password='123.com',master_log_file='mysql-bin.000002',master_log_pos=1334;
mysql> start slave ;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> grant all on . to root@'%' identified by '123.com';
mysql> flush privileges;
回到master主机创建test库
mysql> create database test;
3、配置mycat(41.12)
1)部署mycat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@192 ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local
2)加载环境变量
[root@192 ~]# vi /etc/profile
.....
export PATH=$PATH:/usr/local/java/bin
export JAVA_HOME=/usr/local/java
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:/usr/local/mycat/bin
[root@192 ~]# source /etc/profile
3)配置serve.xml
[root@192 ~]# cd /usr/local/mycat/conf/
[root@192 conf]# vim server.xml

......
<user name="root">
<property name="password">123.com</property>
<property name="schemas">test</property>

            &lt;!-- 表级 DML 权限设置 --&gt;
            &lt;!--            
            &lt;privileges check="false"&gt;
                    &lt;schema name="TESTDB" dml="0110" &gt;
                            &lt;table name="tb01" dml="0000"&gt;&lt;/table&gt;
                            &lt;table name="tb02" dml="1111"&gt;&lt;/table&gt;
                    &lt;/schema&gt;
            &lt;/privileges&gt;           
             --&gt;
    &lt;/user&gt;

    &lt;user name="user"&gt;
            &lt;property name="password"&gt;user&lt;/property&gt;
            &lt;property name="schemas"&gt;test&lt;/property&gt;
            &lt;property name="readOnly"&gt;true&lt;/property&gt;
    &lt;/user&gt;

</mycat:server>
4)配置schema.xml
[root@192 conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

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

    <dataNode name="dn1" dataHost="host01" database="test" />

    <dataHost name="host01" maxCon="1000" minCon="10" balance="1"
                      writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>show slave status</heartbeat>
            <writeHost host="hostM1" url="192.168.41.10:3306" user="root" password="123.com">
            <readHost host="hostS1" url="192.168.41.11:3306" user="root" password="123.com"/>
            </writeHost>
    </dataHost>
            </mycat:schema>
  balance 属性负载均衡类型,目前的取值有 4 种:

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 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

writeType 属性,负载均衡类型,目前的取值有 3 种:
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . writeType="1",所有写操作都随机的发送到配置的 writeHost。 writeType="2",没实现。

switchType 属性
-1 表示不自动切换 1 默认值,自动切换 2 基于MySQL 主从同步的状态决定是否切换

5)启动mycat服务器
[root@192 logs]# mycat start
[root@192 logs]# tailf wrapper.log #观察启动日志,便于排错
[root@192 logs]# ss -anpt | grep java
LISTEN 0 1 127.0.0.1:32000 : users:(("java",pid=40133,fd=4))
LISTEN 0 50 :::50632 ::: users:(("java",pid=40133,fd=51))
LISTEN 0 100 :::9066 :::
users:(("java",pid=40133,fd=69))
LISTEN 0 50 :::33782 ::: users:(("java",pid=40133,fd=53))
LISTEN 0 50 :::1984 :::
users:(("java",pid=40133,fd=52))
LISTEN 0 100 :::8066 :::* users:(("java",pid=40133,fd=73))

4、客户端(41.13)验证读写分离

   ①登录到连接端口

[root@192 ~]# mysql -h 192.168.41.12 -P 8066 -uroot -p123.com
mysql> show databases;
+----------+
| DATABASE |
+----------+
| test |
+----------+
1 row in set (0.01 sec)

mysql> use test
Database changed
mysql> create table tb (id int);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tb values (1);
Query OK, 1 row affected (0.05 sec)

mysql> select * from tb;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.02 sec)
②登录管理端口
[root@192 ~]# mysql -P9066 -uroot -p123.com -h 192.168.41.12
mysql> show @@datasource ;
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| dn1 | hostM1 | mysql | 192.168.1.12 | 3306 | W | 0 | 10 | 1000 | 49 | 0 | 2 |
| dn1 | hostS1 | mysql | 192.168.1.10 | 3306 | R | 0 | 6 | 1000 | 44 | 2 | 0 |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
从管理端口观察两主机负载变化,发现READ_LOAD在hostS1为2, WRITE_LOAD在hostM1为2,说明读写分离已经实现

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯