暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 主从集群 + mycat双节点 + Keepalived 读写分离高可用方案

69

今天分享一下读写分离

使用 MyCAT 版本来实现 MySQL 主从集群与 MyCAT 双节点部署,并结合 Keepalived 实现高可用的完整解决方案。


一、架构设计

1. 场景说明

在大型业务系统中,数据库压力大,为了解决单点瓶颈和读写分离问题,采用 MySQL 主从集群和 MyCAT 做数据中间层。为保证 MyCAT 层面的高可用,部署两个 MyCAT 节点,利用 Keepalived 做 VIP 浮动 IP,保障服务不中断。

架构如下



二、部署环境规划

主机 IP
安装服务
角色
10.0.0.41
MySQL 主库 + MyCAT + Keepalived
主节点(MASTER)
10.0.0.42
MySQL 从库 + MyCAT + Keepalived
备节点(BACKUP)
VIP
10.0.0.100
客户端访问入口

mysql集群已经部署完成,没有部署的可以参考我前面文章进行部署。

三、MyCAT 双节点部署

1. 安装 MyCAT

两个节点都需要部署mycat,部署过程一样

mycat官网:https://github.com/MyCATApache/Mycat-Server

1.1 安装java

yum install -y java

1.2 下载并解压 MyCAT

# 下载mycat
wget https://github.com/MyCATApache/Mycat-Server/releases/download/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
tar -xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

# 解压好的文件迁移到/usr/local
mv mycat usr/local/mycat

1.3 创建 MyCAT 用户

useradd mycat
chown -R mycat:mycat usr/local/mycat

1.4 配置环境变量

vi etc/profile
# 在尾部添加
export PATH=/usr/local/mycat/bin:$PATH

# 立即生效
source /etc/profile

2. 配置 MyCAT

配置文件路径:/usr/local/mycat/conf/
涉及 3 个主要文件:

  • server.xml
     — 配置 MyCAT 相关服务
  • schema.xml
     — 配置数据库连接、读写分离
  • rule.xml
     — 配置分库分表规则(此方案中不涉及)

2.1 server.xml
 配置

路径:/usr/local/mycat/conf/server.xml

<?xml version="1.0" encoding="UTF-8"?>
<mycat:server xmlns:mycat="http://mycat.io/">
    <user name="root">
        <property name="password">123456</property>
        <property name="schemas">testdb</property>
    </user>
</mycat:server>

客户端通过 MyCAT 连接时,使用 root/123456
 登录。

2.2 schema.xml
 配置

路径:/usr/local/mycat/conf/schema.xml

<?xml version="1.0" encoding="UTF-8"?>
<mycat:schema xmlns:mycat="http://mycat.io/">
    <!-- 定义逻辑库 -->
    <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
        <table name="*" dataNode="dn1" />
    </schema>

    <!-- 数据节点配置 -->
    <dataNode name="dn1" dataHost="localhost" database="testdb" />

    <!-- 主从数据库节点配置 -->
    <dataHost name="localhost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select 1</heartbeat>

        <!-- 主库 -->
        <writeHost host="hostM1" url="10.0.0.41:3306" user="root" password="123456">
            <!-- 从库 -->
            <readHost host="hostS1" url="10.0.0.42:3306" user="root" password="123456" />
        </writeHost>
    </dataHost>
</mycat:schema>

关键配置说明

配置项
说明
balance="1"
配置读写分离,读操作自动分发到从库
writeType="0"
只允许向主库写入数据
writeHost
主库配置
readHost
从库配置

2.3 启动 MyCAT

cd /usr/local/mycat/bin
./mycat start

2.4 查看 MyCAT 日志

tail -f usr/local/mycat/logs/wrapper.log

2.5 查看状态

mycat status

两个节点配置完mycat后,接下来配置keepalived

四、配置 Keepalived 高可用

1. 安装 Keepalived

yum install keepalived -y

2. 配置 Keepalived

2.1 主节点 /etc/keepalived/keepalived.conf

global_defs {
   router_id MyCAT_1
}

vrrp_script chk_mycat {
    script "/usr/local/mycat/bin/check_mycat.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33  # 确保网卡名正确
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100
    }
    track_script {
        chk_mycat
    }
}

2.2 备节点 /etc/keepalived/keepalived.conf

global_defs {
   router_id MyCAT_2
}

vrrp_script chk_mycat {
    script "/usr/local/mycat/bin/check_mycat.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100
    }
    track_script {
        chk_mycat
    }
}

2.3 健康检查脚本

vi usr/local/mycat/bin/check_mycat.sh

#!/bin/bash

MYCAT_PORT=8066

if ! netstat -ntlp | grep $MYCAT_PORT > /dev/null
then
    echo "MyCAT is down, stopping keepalived"
    systemctl stop keepalived
fi

2.4 授权执行权限

chmod +x /usr/local/mycat/bin/check_mycat.sh


3. 启动 Keepalived 服务

# 启动keepalived并设置开机自启动
systemctl enable --now keepalived

五、客户端访问

客户端或应用通过 VIP(10.0.0.100)和端口 8066 访问:

mysql -h 10.0.0.100 -P 8066 -uroot -p123456

高可用实现:

  • 默认情况下,VIP 在主节点上,MyCAT 监听 8066 端口
  • 如果主节点的 MyCAT 异常,VIP 会自动漂移到备节点
  • 客户端通过 VIP 访问,无需关心实际 MyCAT 节点的变化

今天分享先到这


文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论