mycat快速搭建

news2024/11/27 16:35:26

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改

mycat快速搭建

在主从数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同步到从库中,也就是写操作

优点

  1. 分摊服务器压力,提高机器的系统处理效率。
  2. 在写入不变,大大分摊了读取,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了。
  3. 增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。

MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

在这里插入图片描述

mycat部署

  1. 准备一台虚拟机
  1. 安装java环境
    下列代码执行完成之后:JDK就被安装在了 /usr/java/jdk1.80_xxx 目录下。
[root@localhost tmp]# cd /tmp
[root@localhost tmp]# rpm -ivh jdk-8u251-linux-x64.rpm 
警告:jdk-8u251-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:jdk1.8-2000:1.8.0_251-fcs        ################################# [100%]Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
  1. 配制环境变量
[root@localhost java]# vi /etc/profile

在profile中尾部追加一下3行配置
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.

//刷新环境变量
[root@localhost java]# source /etc/profile

注意:如果刷新环境变量时,有异常信息,大多是配置环境变量的关键字有错
  1. 解压缩mycat.tar.gz
[root@localhost opt]# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /opt/
  1. 配置环境变量
[root@localhost opt]# vi /etc/profile
export MYCAT_HOME=/opt/mycat
export PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin
//刷新环境变量
[root@localhost java]# source /etc/profile 
  1. 修改mycat配置文件

6.1 server.xml

# 进入mycat/conf目录中
[root@mycat conf]# vim server.xml
...
  <!--下面的用户和密码是应用程序连接到 MyCat其中的schemas 配置项所对应的值是逻辑数据库的名字,可以自由定义,但需要和后面 schema.xml 文件中配置的一致。-->      

        <user name="root" defaultAccount="true">
                <property name="password">root</property>
                <property name="schemas">mycatdb</property>
        </user>
<!--下面是另一个用户,并且设置的访问 TESTED 逻辑数据库的权限是 只读。可以注释掉
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">mycatdb</property>
                <property name="readOnly">true</property>
        </user>
         -->
</mycat:server>

defaultAccount:当前使用版本支持可以添加,不支持报错误可以删掉

6.2 schema.xml

逻辑库和分表设置
<schema name="mycatdb"           // 逻辑库名称,与server.xml的一致
        checkSQLschema="false"    // 不检查sql
        sqlMaxLimit="100"         // 最大连接数
        dataNode="dn1">        //  数据节点名称
<!--这里定义的是分表的信息-->        
</schema>
数据节点
<dataNode name="dn1"             // 此数据节点的名称
          dataHost="localhost1"     // 主机组虚拟的
          database="testdb" />  // 真实的数据库名称
主机组
<dataHost name="localhost1"                       // 主机组
          maxCon="1000" minCon="10"               // 连接
          balance="0"                             // 负载均衡
          writeType="0"                           // 写模式配置
          dbType="mysql" dbDriver="native"        // 数据库配置
          switchType="1"  slaveThreshold="100">
<!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>

balance 属性
负载均衡类型,目前的取值有 3 种:

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

writeType 属性
负载均衡类型

  1. writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切换到还生存的第二个writeHost,重新启动后已切换后的为准.
  2. writeType=“1”,所有写操作都随机的发送到配置的 writeHost,#版本1.5 以后废弃不推荐。
健康检查
<heartbeat>select user()</heartbeat>	#对后端数据进行检测,执行一个sql语句,user()内部函数
读写配置
<writeHost host="hostM1" url="192.168.246.135:3306" user="mycat" password="111111">
                        <!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.246.136:3306" user="mycat" password="111111" />
</writeHost>
配置范例
[root@mycat conf]# vim schema.xml     
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

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

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

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="192.168.240.134" url="192.168.240.134:3306" user="mycat" password="123456">
                        <!-- can have multi read hosts -->
                 <readHost host="192.168.240.135" url="192.168.240.135:3306" user="mycat" password="123456" />
                 <readHost host="192.168.240.136" url="192.168.240.136:3306" user="mycat" password="123456" />
                </writeHost>
        </dataHost>
</mycat:schema>
  1. 创建用户
在上述schema.xml中配置了主库从库的登录用户,若库中没有该用户,需要创建
mysql> grant all on back.* to mycat@'%' identified by '123456';
  1. 启动mycat
[root@localhost conf]# mycat start
Starting Mycat-server...
  1. 登录mycat测试

VIP设置(浮动IP)

在计算机网络架构中,VIP(Virtual IP)是指一个虚拟的IP地址,可以分配给多个不同的物理主机,使得它们看起来像是一个单独的主机。这种技术在一定程度上提高了网络的可靠性和可用性,因为当一个物理主机出现故障时,其他主机可以接管它的 VIP,并继续提供服务

添加VIP

  1. 查看网卡信息
[root@localhost conf]# yum install -y net-tools httpd-tools
[root@localhost conf]# ifconfig

在这里插入图片描述

  1. 添加VIP
[root@localhost conf]# ifconfig ens33:1 192.168.240.200
  1. 再次查看

在这里插入图片描述

  1. 关闭VIP
[root@localhost conf]# ifconfig ens33:1 down

MyCat+MHA+VIP实现自动切换主库vip

配置
  1. MHA所在主机创建脚本,配置完成之后给与可执行权限
[root@localhost conf]# vi /usr/local/bin/master_ip_failover
#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
 
use Getopt::Long;
 
my (
    $command,          $ssh_user,        $orig_master_host, $orig_master_ip,
    $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
);
 
my $vip = '192.168.240.200/24'; #此处改为你希望的主库vip
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; # 网卡信息要与你的集群相同
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
 
GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
);
 
exit &main();
 
sub main {
 
    print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
 
    if ( $command eq "stop" || $command eq "stopssh" ) {
 
        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {
 
        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}
 
sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {
     return 0  unless  ($ssh_user);
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
 
sub usage {
    print
    "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

  1. MHA配置文件添加读取vip迁移脚本
[root@localhost conf]# vi /var/log/mha/app1.cnf
[server default]
manager_log=/var/log/mha/log/manager.log
manager_workdir=/var/log/mha/app.log
master_binlog_dir=/opt/liuyh/log/mylog
master_ip_failover_script=/usr/local/bin/master_ip_failover # 添加脚本信息
password=111111
ping_interval=2
repl_password=111111
repl_user=testslave
ssh_user=root
user=mha

[server1]
hostname=192.168.157.111
port=3306

[server3]
hostname=192.168.157.113
port=3306

[server2]
hostname=192.168.157.112
port=3306
  1. 测试mha主从复制情况
[root@localhost conf]# masterha_check_repl --conf=/var/log/mha/app1.cnf 

在这里插入图片描述

  1. 将mycat中schema.xml配置文件的主库信息改为vip
  1. 开启前手动为主库设置vip
  1. 开启mycat和MHA,测试主从切换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1259531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

坚鹏:基于招商银行案例研究的银行APP运营成功之道培训圆满结束

中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点&#xff0c;服务个人客户超6.5亿户。2022年&#xff0c;在《银行家》…

Linux(10):Shell scripts

什么是 Shell scripts shell script&#xff08;程序化脚本&#xff09;&#xff1a;shell 部分是一个文字接口下让我们与系统沟通的一个工具接口&#xff1b;script 是脚本的意思&#xff0c;shell script 就是针对 shell 写的脚本。 shell script 是利用 shell 的功能所写的…

【ONE·Linux || 网络基础(四)】

总言 主要内容&#xff1a;传输层UDP、TCP协议基本介绍。UDP报文格式、TCP报文格式、三次握手四次挥手、TCP可靠性策略说明。 文章目录 总言8、UDP协议&#xff08;传输层一&#xff09;8.1、传输层预备知识8.1.1、端口号8.1.2、一些指令&#xff08;netstat、pidof、xargs&am…

UE4/UE5 雾

雾 UE4/UE5 雾平面雾材质效果图&#xff1a; 3D雾区材质效果图&#xff1a; UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图&#xff1a; 3D雾区 做好将材质放在3D模型上就行 材质 效果图&#xff1a;

智能优化算法应用:基于蜉蝣算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜉蝣算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜉蝣算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜉蝣算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Android问题笔记四十九:ViewPager 嵌套 Fragment 扩大滑动响应区域,避免左右滑动过于灵敏问题

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

minio分布式存储系统

目录 拉取docker镜像 minio所需要的依赖 文件存放的位置 手动上传文件到minio中 工具类上传 yml配置 config类 service类 启动类 测试类 图片 视频 删除minio服务器的文件 下载minio服务器的文件 拉取docker镜像 拉取稳定版本:docker pull minio/minio:RELEASE.20…

00TDI 这件红色大衣也太适合过年穿了

分享女儿的时尚穿搭—红色大衣 这款大衣非常厚实 摸起来很软糯的触感 复合了660-700g绵羊绒 厚实度堪比一件厚实的羽绒服 门禁处做了立体的爱心装饰 精致又可爱&#xff01;&#xff01;&#xff01;

数据结构 | 排序

插入排序 直接插入排序&#xff08;空间复杂度为1&#xff0c;排序后稳定&#xff09; 思路&#xff1a; 在待排序的元素中&#xff0c;假设前n-1个元素已有序&#xff0c;现将第n个元素插入到前面已经排好的序列中&#xff0c;使得前n个元素有序。按照此法对所有元素进行插入&…

面对Spring 不支持java8的改变方法

接下来&#xff0c;就只有17与21了&#xff0c;JDK开发人员每隔半年&#xff0c;发布一个新的版本&#xff0c;但是新版本也只是维护一段时间&#xff08;一年/半年&#xff09;业务越小&#xff0c;升级越简单 1.如何创建Spring Boot项目,阿里云上去下载代码&#xff0c;然后使…

[激光器原理与应用-15]:声光调制器(AOM:Acousto-optic modulator)

目录 第1章 概述 1.1 什么是AOM 1.2 AOM的主要参数 第2章 主要工作原理 2.1 光的调制技术 2.2 直接调制与间接调制 2.3 声光调制 2.4 声光调制工作原理 第3章 声光调制器件 3.1 声光调制器件的类型 3.2 应用 3.3 主要厂家 第4章 声光调制器系统 4.1 系统组成 …

自动化测试误区

数据驱动怎么玩? 数据驱动&#xff1a;因为数据的改变导致结果的改变。说人话就是&#xff0c;因为我在百度里搜索的是“selenium”导致结果就是包含了“seleniumhq.org”。因为我登录时候输入的是“zhangsan”导致的结果就是登录之后页面右上角显示“欢迎&#xff0c;zhangs…

关于为什么要替代aspera,有哪些aspera替代方案

Aspera是一种广泛使用的文件传输协议&#xff0c;其主要优势在于快速和安全地传输大型文件。然而&#xff0c;在某些情况下&#xff0c;Aspera的价格和性能可能不够优惠&#xff0c;而且需要购买额外的许可证和硬件。另外&#xff0c;一些用户可能也担心 Aspera 的安全性问题&a…

QT Day01 qt概述,创建项目,窗口属性,按钮,信号与槽

1.qt概述 1.什么是qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。它为应用程序开发者提供建立艺 术级图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组 件编程。 2.支持的平台 Windows – XP 、 Vista 、 Win7 、 Win8…

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

C语言:求Sn=a+aa+aaa+aaaa+……(n个a)之值,其中a表示一个数字,n表示a的位数,n由键盘录入。

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义四个整型变量 a、n、i 和 sn&#xff0c;并初始化 a、n 和 i 的值&#xff0c;其中 sn 用于记录数列的和。然后使用 scanf 函数从标准输入中读取用户输入的两个整数 a 和 n。 接下来&#xff0c;程序通过 while …

【JavaScript框架】2024年需要学习的顶级JavaScript框架:Blitz、SolidJS、Svelte等

如今&#xff0c;Web开发人员面临两大问题。 第一个是如何自动化繁琐的web开发工作。要为标准web应用程序设置一个项目&#xff0c;您必须花费宝贵的时间学习用于常见任务的几个库&#xff0c;如身份验证和数据库处理&#xff0c;并将它们捆绑在一起。第二个问题是如何使网络应…

knife4j集合化postman

knife4j集合化postman 01 knife4j的介绍 基于 JavaMVC的集成框架swagger的进一步强化&#xff0c;在原有通过注释就能生成文档的前身swagger-bootstrap-ui之上&#xff0c;增加了postman的测试功能&#xff0c;优化了文档的UI界面&#xff0c;在测试api接口的方面有了极大的进…