mycat实现主从分离(docker)

mycat实现主从分离(docker),第1张

主从数据库
https://blog.csdn.net/qq_50743124/article/details/124074378?spm=1001.2014.3001.5501

四、安装mycat 1、jdk环境
#查看安装的jdk版本 -如果有环境可以不用下载
java -version
#  执行以下命令查看可安装的jdk版本:
yum -y list java*
2、安装mycat
# 查询mycat镜像列表,选择星数高
docker  search mycat
# 拉取mycat镜像
docker pull longhronshens/mycat-docker
# 查看版本信息
docker image inspect longhronshens/mycat-docker:latest|grep -i version

五、mycat读写分离 1、为什么要读写分离

读写分离之后可以降低计算机的压力

2、读写分离的原理

读写分离,简单地说是把对数据库的读和写 *** 作分开,以对应不同的数据库服务器。主数据库提供写 *** 作,从数据库提供读 *** 作,
这样能有效地减轻单台数据库的压力。
通过Mycat即可轻易实现上述功能,不仅可以支持MysoL,也可以支持oracle和sql Server。
MyCat控制后台数据库的读写分离和负载均衡由schema . xml文件datahost标签的balance属性控制。

3、启动mycat
docker run --name Mmycat -v /usr/local/mycat/schema.xml:/usr/local/mycat/conf/schema.xml -v /usr/local/mycat/rule.xml:/usr/local/mycat/conf/rule.xml -v /usr/local/mycat/server.xml:/usr/local/mycat/conf/server.xml --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=mysql1234 -d longhronshens/mycat-docker

参数说明:

-v:容器文件挂载到本地文件;目的:本地修改文件容器内绑定的文件一起变 3.1、确认启动

4、mycat配置

前提

主库和从库要有schema.xml配的

4.1、server.xml

DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
		<property name="nonePasswordLogin">0property> 
		<property name="useHandshakeV10">1property>
		<property name="useSqlStat">0property>  
		<property name="useGlobleTableCheck">0property>  
 
		<property name="sequnceHandlerType">2property>
		<property name="subqueryRelationshipCheck">falseproperty> 
		<property name="handleDistributedTransactions">0property>
 
		<property name="useOffHeapForMerge">1property>
 
		<property name="memoryPageSize">64kproperty>
 
		<property name="spillsFileBufferSize">1kproperty>
 
		<property name="useStreamOutput">0property>
		<property name="systemReserveMemorySize">384mproperty>
 
		<property name="useZKSwitch">falseproperty>
 
		<property name="strictTxIsolation">falseproperty>
			
		<property name="useZKSwitch">trueproperty>
		
	system>
 
	<user name="root">
        <property name="password">mysql1234property>
        <property name="schemas">ITCASTproperty>
       
    user>

    <user name="user">
        <property name="password">mysql1234property>
        <property name="schemas">ITCASTproperty>
        <property name="readOnly">trueproperty>
    user>

mycat:server>
4.2、schema.xml(重点关注)

DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    
    <schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100">
        <table name="user" dataNode="dn1">table>
    schema>
	
    
    <dataNode name="dn1" dataHost="bmphost" database="bmp"/>

	 
    
    <dataHost name="bmphost" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
        
        <heartbeat>select user()heartbeat>
        
        <writeHost host="hostM1" url="175.178.183.32:3301" user="root" password="mysql1234">
            
            <readHost host="hostS2" url="175.178.183.32:3302" user="root" password="mysql1234">readHost>
        writeHost>
    dataHost>
mycat:schema>


重要参数说明:

balance:

负载均衡类型,目前取值有4种:

balance="0”:不开启读写分离机制,所有读 *** 作都发送到当前可用的writeHost上。

balance=“1”︰全部的readHost 与 stand by writeHost(备用的writeHost)都参与select语句的负载均衡,简而言之,就是采用双主双从模式(1 -->s1 ,M2 -->S2,正常情况下,M2,51,S2 都参与 select 语句的负载均衡)。

balance=“2”:所有的读写 *** 作都随机在writeHost , readHost上分发。

balance="3”:所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力 ;balance=3只在MyCat1.4 之后生效。

checkSQLschema
当该值设置为true时,如果我们执行语句"select from test01.user ;"语句时,MyCat则会把schema字符去掉,可以避免后端数据库执行时报错;

4.3、rule.xml(不用改)

DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="userrule">
		<rule>
			<columns>idcolumns>
			<algorithm>func1algorithm>
		rule>
	tableRule>
	<tableRule name="categoryrule">
		<rule>
			<columns>idcolumns>
			<algorithm>jump-consistent-hashalgorithm>
		rule>
	tableRule>
 
	<function name="murmur" class="io.mycat.route.function.PartitionByMurmurHash">
		<property name="seed">0property>
		<property name="count">2property>
		<property name="virtualBucketTimes">160property>
		
		
	function>
 
	<function name="crc32slot" class="io.mycat.route.function.PartitionByCRC32PreSlot">
		<property name="count">2property>
	function>
	<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
		<property name="mapFile">partition-hash-int.txtproperty>
	function>
	<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
		<property name="mapFile">autopartition-long.txtproperty>
	function>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		
		<property name="count">4property>
	function>
 
	<function name="func1" class="io.mycat.route.function.PartitionByLong">
		<property name="partitionCount">8property>
		<property name="partitionLength">128property>
	function>
	<function name="latestMonth"
		class="io.mycat.route.function.LatestMonthPartion">
		<property name="splitOneDay">24property>
	function>
	<function name="partbymonth" class="io.mycat.route.function.PartitionByMonth">
		<property name="dateFormat">yyyy-MM-ddproperty>
		<property name="sBeginDate">2019-01-01property>
	function>
	
	<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
        <property name="mapFile">partition-range-mod.txtproperty>
	function>
	
	<function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
		<property name="totalBuckets">4property>
	function>
mycat:rule>
5、验证准备 5.1、找到容器流水号

默认读者使用finalshell

docker inspect 容器名或者容器ID

5.2、进入容器内部文件系统

注意不是这个;是尾部没有init的

找到这个目录

/var/lib/docker/overlay2/41d76209d603e2a5fd37bf0d9804e004f39a4c3f694299e01ba55687ebebc51f/merged/usr/local/mycat/conf
5.3、修改mycat容器的log4j2.xml文件

把info修改debug才能出现日志

6、验证 6.1、新开一个窗口观察日志
docker exec -it Mmycat bash

cd /usr/local/mycat/logs

tail -f mycat.log
6.1、在mycat的数据库 *** 作观察日志

show databases;

use ITCAST;

show tables;

select * from user;
验证结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/928822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存