1.下载mycat
在http://www.mycat.io/下找到
Mycat-server-1.6.6-release 版本发布
会有几个版本 找到适合自己的版本
在这前提 首先你要在具体的虚拟机安装数据库 ,并且将各个数据库配置成主从
如虚拟机40是宿主机配置mycat 41,42,44,45都要安装数据库
如果是配置安装好好一台虚拟机 可以拷贝替换另一台虚拟机 更改ip地址即可
在进行主从配置 具体看主从配置
并且40,42,44,45配置成主从
将文件下载了 用ssh工具 放在/usr/loclal/src/ 下面
解压文件
2.安装mycat
tar zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
然后将解压的复制到 /usr/local/mycat 目录
cp -r Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz /usr/local/mycat
3.添加组和用户
groupadd mycat
adduser -r -g mycat mycat
chown -R mycat.mycat /usr/local/mycat //修改mycat目录所属mycat用户
4.了解mycat和mysql联系
5.配置mycat文件的conf的server.xml
我们改的就是两个端口一个是9066 一个就是8066
还有用户 密码 项目名字
<user name="root">
<property name="password">kyd8899</property>
<property name="schemas">QIWUIOT</property>
<property name="readOnly">false</property>
</user>
1、user标签
<user name="root">
<property name="password">kyd8899</property>
<property name="schemas">QIWUIOT</property>
</user>
user 用户配置节点
—name 登录的用户名,也就是连接Mycat的用户名
—password 登录的密码,也就是连接Mycat的密码
—schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
2、privileges标签
对用户的 schema以及表进行精细化的DML权限控制
<privileges check="false">
</privileges>
—check 表示是否开启DML权限检查。默认是关闭。server.dtd文件中 <!ELEMENT privileges (schema)*> 说明可以有多个schema的配置。
—dml 顺序说明:insert,update,select,delete
<schema name="db1" dml="0110" >
</schema>
db1的权限是update,select。
tb01的权限是啥都不能干。
tb02的权限是insert,update,select,delete。
其他表默认是udpate,select。
- system标签
这个标签内嵌套的所有 property 标签都与系统配置有关。
<property name="charset">utf8</property>
字符集
<property name="processors">1</property>
处理线程数量,默认是cpu数量。
<property name="processorBufferChunk">4096</property>
每次读取留的数量,默认4096。
<property name="processorBufferPool">409600</property>
创建共享buffer需要占用的总空间大小。processorBufferChunkprocessors100。
<property name="processorBufferPoolType">0</property>
默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。
<property name="processorBufferLocalPercent">100</property>
二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
<property name="sequnceHandlerType">100</property>
全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
<property name="useCompression">1</property>
是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
<property name="packetHeaderSize">4</property>
指定 Mysql 协议中的报文头长度。默认 4。
<property name="maxPacketSize">16M</property>
指定 Mysql 协议可以携带的数据最大长度。默认 16M。
<property name="idleTimeout">1800000</property>
指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
<property name="txIsolation">3</property>
前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
<property name="sqlExecuteTimeout">300</property>
SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
<property name="processorCheckPeriod">1000</property>
清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
位毫秒。
<property name="dataNodeIdleCheckPeriod">300000</property>
对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
<property name="dataNodeHeartbeatPeriod">10000</property>
对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。
<property name="bindIp">0.0.0.0</property>
mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
<property name="serverPort">8066</property>
定义 mycat 的使用端口,默认值为 8066。
这里我们改为3306
<property name="managerPort">9066</property>
定义 mycat 的管理端口,默认值为 9066。
这里我们改为3077
<property name="fakeMySQLVersion">5.6</property>
mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。
<property name="useSqlStat">0</property>
是否开启实时统计。1为开启;0为关闭 。
<property name="useGlobleTableCheck">0</property>
是否开启全局表一致性检测。1为开启;0为关闭 。
<property name="handleDistributedTransactions">0</property>
分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。
<property name="maxStringLiteralLength">65535</property>
默认是65535。 64K 用于sql解析时最大文本长度
以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容。
System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。
- Firewall标签
顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
<firewall>
<whitehost>
<host host="127.0.0.1" user="mycat"/>
<host host="127.0.0.2" user="mycat"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。
5.schema.xml
schema.xml中的rule是rule.xml里面众多分配规则的一种
这样的配置与前一个示例配置改动如下:
删除了table分配的规则,以及datanode只有一个
datahost有2台,但是writehost总添加了readhost,balance改为1,表示读写分离。
以上配置达到的效果就是102.168.1.41为主库,192.168.1.42为从库。
以上配置达到的效果就是102.168.1.44为主库,192.168.1.45为从库。
6.rule.xml
而rule.xml中的规则默认的mod-long是三个 也即是dataNode的数量我们这里是切分为两个修改为2
这些配置好之后
启动mycat
到mycat bin下
[root@Mycat-node ~]# cd /data/mycat/bin/
[root@Mycat-node bin]#
[root@Mycat-node bin]# ./mycat start #开启
[root@Mycat-node bin]# ./mycat stop #关闭
[root@Mycat-node bin]# ./mycat restart #重启
[root@Mycat-node bin]# ./mycat status #查看启动状态
[root@Mycat-node bin]# ./mycat console #前台运行
[root@Mycat-node bin]# ./mycat pause #暂停
如果在启动时发现异常,在logs目录中查看日志。
mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好的执行。
如果在启动时发现异常,在logs目录中查看日志。
[root@Mycat-node ~]# cd /data/mycat/logs/
[root@Mycat-node logs]# ls
2018-07 mycat.log mycat.pid wrapper.log
- wrapper.log 为程序启动的日志,启动时的问题看这个
- mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。
mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好的执行。
配置好之后输入 netstat -antpl 会有以下效果
有ESTABKISHED和LISTEN是正常
如果出现 TIME_WAIT问题
编辑vim /etc/sysctl.conf
添加以下内容
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_synack_retries=2
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_orphan_retries=3
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout=30
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 4096
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
减少超时前的探测次数
net.ipv4.tcp_keepalive_probes=5
优化网络设备接收队列
net.core.netdev_max_backlog=3000
通过navtivecat去连接数据库 测试是否可以打开数据库的具体的表那么你的真实的数据库的 那个41的 和那个44的就是做主的数据库要进行创建表要一个一个的分别与schema.xml中table的表一个个对应上