MYCAT

MYCAT
服务安装与配置
1、四台服务器做hosts绑定
#vim /etc/hosts
192.168.30.10 mycat-node
192.168.30.11 cong11
192.168.30.12 cong12
192.168.30.13 cong13
2、建立时间同步环境,在mycat-node上配置NTP服务,为其他三台mysql服务器提供时间校对服务。
安装NTP
yum -y install ntp
vim /etc/ntp.conf
添加如下两行
server 127.127.1.0
fudge 127.127.1.0 stratum 8
重启NTPD服务
systemctl restart ntpd
开机自启
systemctl enable ntpd
3、配置主从复制(一主两从:master,slave1、slave2)
1)主服务器master的配置
create database HA;
use HA;
create table T1(id int,name varchar(20));
insert into T1 values(1,‘Tom1’);
创建主从复制的授权用户,允许slave主机连接master:
grant replication slave on . to ‘slave’@‘192.168.30.%’ identified by “123456”;
flush privileges;
配置my.cnf:
server-id=1
log-bin=/data/mysql/log/mysql-bin-master
binlog-do-db=HA
sync-binlog=1
binlog-format=mixed
重启
将数据库锁住,仅仅允许读,以保证数据一致性:
flush tables with read lock;
flush privileges;
show master status; #查看master状态
导出数据库:保证同步的数据库一致
mysqldump -uroot -p123456 -B HA >HA.sql
将导出的数据库传给从服务器
scp HA.sql root@192.168.19.3:~
scp HA.sql root@192.168.19.8:~
2)接着是slave从节点操作
导入数据库,和主数据库服务器保持一致:
mysql -uroot -p123456 <HA.sql
3)从节点slave1主机:
vim /etc/my.cnf
server-id=2
relay-log=/data/mysql/log/relay-log-bin
relay-log-index=/data/mysql/log/slave-relay-bin.index
replicate-do-db=HA //只复制指定库
#replicate-ignore-db=mysql
重启
进行主从配置:
mysql>change master to master_host=‘192.168.30.11’,master_user=‘slave’,master_password=‘123456’,master_log_file=‘mysql-bin-master.000001’,master_log_pos=154;
start slave;
show slave status\G;
4)从节点slave2主机:
vim /etc/my.cnf
server-id=3
relay-log=/data/mysql/log/relay-log-bin
relay-log-index=/data/mysql/log/slave-relay-bin.index
replicate-do-db=HA //只复制指定表
#replicate-ignore-db=mysql
重启
进行主从配置:
mysql>change master to master_host=‘192.168.30.11’,master_user=‘slave’,master_password=‘123456’,master_log_file=‘mysql-bin-master.000001’,master_log_pos=154;
start slave;
show slave status\G;
5)在master主节点上操作
mysql> unlock tables;
测试主从同步是否成功
主插入数据
insert into T1 values(2,‘zhangsan’);
select * from T1;
从上查看
select * from T1;
6)安装mycat
上传包,解压:
tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local/
cd /usr/local/mycat/
ls
bin catlet conf lib logs version.txt
bin程序目录:
mycat命令,启动、重启、停止等
例如:Linux下运行:./mycat console
注:mycat支持的命令{ console | start | stop | restart | status | dump }
conf目录
存放配置文件,server.xml是Mycat服务器参数调整和用户授权的配置文件,schema.xml是数据库读写分离配置文件,rule.xml是分片(分库分表)规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下。配置文件修改,需要重启Mycat或者通过8066端口reload.
lib目录
主要存放mycat依赖的一些jar文件,mycat是java开发的。
logs目录
日志文件,包括Mycat启动的日志和运行的日志。日志存放在logs/mycat.log中,每天一个文件,日志的配置是在conf/log4j2.xml中,根据自己的需要,可以调整输出级别为debug,debug级别下,会输出更多的信息,方便排查问题.
wrapper.log:为程序启动的日志,启动时的问题看这个
mycat.log:为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。

7)上传jdk版本,解压:
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
8)配置JDK环境变量
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_171
PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
CLASSPATH= J A V A H O M E / j r e / l i b / e x t : JAVA_HOME/jre/lib/ext: JAVAHOME/jre/lib/ext:JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
source /etc/profile #使环境变量生效
查看java环境
java -version
出现版本,代表成功
9)配置mycat环境变量
ln -s /usr/local/mycat/bin/* /usr/local/bin/
10)在conf/server.xml文件中配置mycat用户账号和授权信息
cd /usr/local/mycat/conf/
cp server.xml server.xml.bak
vim server.xml
//mycat对外的连接账户名
123456 //密码
HA //表示mycat的逻辑数据库名称,可以自定义。

//mycat对外的连接账户名
123456 //密码
HA
true //只读权限

参数 说明
user 用户配置节点
name 登录的用户名,也就是连接Mycat的用户名。
password 登录的密码,也就是连接Mycat的密码
schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如,这个用户需要管理两个数据库db1,db2,则配置db1,db2
privileges 配置用户针对表的增删改查的权限
readOnly mycat逻辑库所具有的权限。true为只读,false为读写都有,默认为false。
我这里配置了一个账号mycatroot,密码为123456,逻辑数据库为HA,这些信息都可以自己随意定义,读写权限都有,没有针对表做任何特殊的权限。账号mycatreadonly,密码为123456,逻辑数据库为HA,权限是只读。
11)编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息
cd /usr/local/mycat/conf/
cp schema.xml schema.xml.bak
vim schema.xml

<?xml version="1.0"?>

<mycat:schema xmlns:mycat=“http://io.mycat/”>

    <schema name="HA" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <dataNode name="dn1" dataHost="dh1" database="HA" />
    <dataHost name="dh1" maxCon="1000" minCon="10" balance="1"
                      writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <!-- can have multi write hosts -->
            <writeHost host="cong11" url="192.168.30.11:3306" user="root" password="123456"/>
            <writeHost host="cong12" url="192.168.30.12:3306" user="root" password="123456"/>
            <writeHost host="cong13" url="192.168.30.13:3306" user="root" password="123456" />
    </dataHost>

</mycat:schema>
注:复制粘贴之后,注意去掉每行开头的空格。
参数说明:
schema属性解释:


一个相当一个数据库,其中
Name: 逻辑数据库名,与server.xml中的schema对应
sqlMaxLimit: select 时默认的limit,避免查询全表
dataNode=‘dn1’ 分库的时候用到,不分也可以。dataNode对应的name
dataNode属性解释:

name:指定逻辑数据节点名称,与schema中的dataNode一致。
dataHost:对应< dataHost >的name
database:真正要使用的数据库名称。如果一个节点上有多个库,可使用表达式db$0-99,表示指定0-99这100个数据库;
dataHost属性解释

有三个参数需要注意,balance和 switchType、writeType
其中,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不负担读压力
switchType指的是切换的模式,目前的取值也有4种:
switchType=’-1’ 表示不自动切换
switchType=‘1’ 默认值,表示自动切换
switchType=‘2’ 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
switchType='3’基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
writeType表示写模式:
writeType=“0”,所有的操作发送到配置的第一个writehost
writeType=“1”,随机发送到配置的所有writehost
writeType=“2”,不执行写操作
其他参数说明:
maxCon:指定物理主机服务最大支持1000个连接;
minCon:指定物理主机服务最小保持10个连接;
heartbeat:这个标签内指明用于和后端数据库进行心跳检查的语句
writeHost & readHost:这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组着这些读写实例来满足系统的要求。在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。
通常用配置方式一



启动之前最好将log的级别改为debug,这样方便查错,修改方法:
cd /usr/local/mycat/conf/
vim log4j2.xml

改为

12)给所有mysql root远程登陆权限
mysql> grant all on . to root@‘192.168.30.%’ identified by ‘123456’; #注意ip地址所在网段。
mysql>flush privileges;
13)启动mycat服务
mycat console #使用console进行检测
检测成功,执行开启
mycat start
检测端口8066
netstat -antup | grep 8066
查看日志
tail /usr/local/mycat/logs/mycat.log
14)连接mycat
使用mycatroot账号登陆
yum -y install mysql
mysql -u mycatroot -p123456 -h 192.168.30.10 -P 8066
查看表
select * from HA.T1;
测试写
insert into T1 values(3,‘lisi’);
select * from T1;
在两个从服务器查看
select * from T1;
只有在数据库上写,其他从数据库才能同步,如果是在从数据库上写的话,是没办法同步数据的。
测试读
在slave1从服务器上插入数据
insert into T1 values(4,‘wangwu’);
在slave2从服务器上插入数据
insert into T1 values(5,‘tom5’);
在mycat查看
select * from T1;
测试只读账号
mysql -umycatreadonly -p123456 -P 8066 -h192.168.30.10
insert into T1 values(2,‘tom2’);
插入不了数据
模拟故障:从服务器挂掉了
systemctl stop mysqld #关闭从slave1 mysqld
进入mycat查看
insert into t1 values (7,’tom2’);
select * from T1;
能读写
模拟故障:主服务器挂掉了
systemctl stop mysqld #关闭主服务器
insert into T1 values(3,‘tom3’); 插入数据;
说明:ERROR 1184 (HY000): 拒绝连接 #主数据库停止了,是无法写操作的,但不影响读.
更改switchType=“1” 主服务器宕机,切换到一台从服务器为主
可以插入了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值