id |
murmur |
|
|
任何自定义的分片规则也可以这样配置 |
2.2.2 server.xml此文件用来配置mycat全局参数 |
节点 |
druidparser,指定SQL解析器,默认是fdbparser,经测试druidparser效率更高 |
1,指定mycat自动序列号生成方式。0:在借助本地文件生成序列号,1:借助数据库生成序列号,更多信息请参考Mycat in action |
8066指定mycat服务端口号,mycat通过这个端口接收数据库客户端的访问请求。 |
另外还有一个9066端口没有出现在配置文件中,用来接收mycat监控命令、查询mycat运行状况、重新加载配置文件等。更多信息请参考Mycat in action。 |
|
节点 |
name属性指定mycat用户名 |
password |
database_name |
false |
可以有多个user节点。 |
|
2.2.3 router.xml、都配置成了一样的,而且都与要连接的数据库名保持一致 –> |
|
|
dataNodeName |
queryNode |
|
|
2.2.4 schema.xml |
其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.aaa,此时会自动过滤TESTDB,SQL变为select * from aaa,若不会出现上述写法,则可以关闭属性为false |
|
|
primaryKey=”pk” |
dataNode=”dataNodeName” |
rule=”sharding-by-murmur” |
authIncrement=”true”> |
|
|
|
|
dataHost是节点主机名,在下面要出现的dataHost定义 |
database数据库名 |
–> |
<datahost name="”localhost”" maxcon="”1000”" mincon="”10”" balance="”0” |
wrteType=”0” dbType=”mysql” dbDriver=”native> |
maxCon minCon分别是连接到物理数据库的最大最小连接数 |
dbType指定数据库类型 |
dbDriver只有两个取值,分别是native和jdbc。native为mycat自带驱动,只支持mysql,jdbc为使用jdbc实现连接数据库,指定什么数据库的jdbc驱动就可以访问什么数据库,更灵活,但效率不如native |
可以有多个dataHost节点 |
–> |
select 1 |
|
|
|
|
|
2.3 启动和使用MyCat2.3.1 启动MyCat# mycat console |
2.3.2 访问MyCat访问MyCat同访问MySQL的方式完全相同, 常用访问方式如下: |
mysql –h 127.0.0.1 –u test –p test -P8066 –DTESTDB |
2.3.3 自测可以自己编写一些语句进行测试,看是否按规则进行分配。 |
3 KEEPALIVED配置编辑/etc/keepalived/keepalived.cnf文件,红色字体是为mycat新加的 |
global_defs { |
router_id LVS_MASTER #BACKUP上修改为LVS_BACKUP |
} |
vrrp_instance VI_1 { |
state MASTER |
interface eth0 |
virtual_router_id 51 |
priority 100 |
advert_int 1 |
authentication { |
auth_type PASS |
auth_pass 1111 |
} |
virtual_ipaddress { |
192.168.10.252 #virtual server |
192.168.10.253 #mycat |
} |
} |
virtual_server 192.168.10.252 8080 { |
delay_loop 6 |
lb_algo rr |
lb_kind DR |
#lb_kind NAT |
# persistence_timeout 3 |
protocol TCP |
real_server 192.168.10.3 8080 { |
weight 3 |
TCP_CHECK { |
connect_timeout 3 |
nb_get_retry 3 |
delay_before_retry 3 |
connect_port 8080 |
} |
} |
real_server 192.168.10.4 8080 { |
weight 3 |
TCP_CHECK { |
connect_timeout 3 |
nb_get_retry 3 |
delay_before_retry 3 |
connect_port 8080 |
} |
} |
} |
virtual_server 192.168.10.253 8066 { |
delay_loop 6 |
lb_algo rr |
lb_kind DR |
#lb_kind NAT |
# persistence_timeout 3 |
protocol TCP |
real_server 192.168.10.3 8066 { |
weight 3 |
TCP_CHECK { |
connect_timeout 3 |
nb_get_retry 3 |
delay_before_retry 3 |
connect_port 8066 |
} |
} |
real_server 192.168.10.4 8066 { |
weight 3 |
TCP_CHECK { |
connect_timeout 3 |
nb_get_retry 3 |
delay_before_retry 3 |
connect_port 8066 |
} |
} |
} |
4 mycat服务器执行脚本lvs_mycat.sh脚本内容: |
#!/bin/bash |
VIP=192.168.10.253 |
case “$1” in |
start) |
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP |
/sbin/route add -host $VIP dev lo:0 |
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore |
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce |
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore |
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce |
sysctl -p >/dev/null 2>&1 |
echo “lvs_vip server start ok!”;; |
|
stop) |
ifconfig lo:0 down |
/sbin/route del $VIP >/dev/null 2>&1 |
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore |
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce |
echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore |
echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce |
echo “lvs_vip server stoped.”;; |
*) |
echo “arg start | stop.” |
exit 1 |
esac |
exit 0 |
在脚本所在目录执行#./lvs_mycat.sh start;脚本主要作用是为服务器的回环接口设定虚拟IP,并屏蔽该IP的arp请求和应答。 |
5 总体测验5.1 网络架构图客户机IP:192.168.10.1 |
负载机VIP:192.168.10.253 |
[/url] |
主mycat和mysql1在同一个服务器上,IP为:192.168.10.3 |
从mycat和mysql2在同一个服务器上,IP为:192.168.10.4 |
mysql1上创建两个数据库db351353(主),db352354(备),mysql2上创建两个数据库db352354(主),db351353(备);mysql2上db351353是mysql1上db351353的备用库,mysql1上的db352354是mysql2上db352354的备用库。 |
5.2 客户机测试环境安装navicat for mysql,创建5个数据连接: |
|
直连mysql1数据库 连接名:mysql1 ip:168.10.3 端口:3306 |
直连mysql2数据库 连接名:mysql2 ip:168.10.4 端口:3306 |
直连主mycat 连接名:mycat1 ip:168.10.3 端口:8066 |
直连从myca2 连接名:mycat2 ip:168.10.4 端口:8066 |
连接lvs 连接名:keepalived ip:168.10.253 端口:8066 |
5.3 MYSQL主备同步测试在mysql1上的db351353 添加数据: |
DROP TABLE IF EXISTS `so`; |
CREATE TABLE `so` ( |
`so_nbr` int(8) NOT NULL DEFAULT ‘0’, |
`local_net_id` int(8) DEFAULT NULL, |
`proc_inst_id` int(8) DEFAULT NULL, |
`prod_id` varchar(8) DEFAULT NULL, |
PRIMARY KEY (`so_nbr`) |
) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
INSERT INTO `so` VALUES (‘1’, ‘351’, null, null); |
在mysql2上的db352354添加数据: |
DROP TABLE IF EXISTS `so`; |
CREATE TABLE `so` ( |
`so_nbr` int(8) NOT NULL DEFAULT ‘0’, |
`local_net_id` int(8) DEFAULT NULL, |
`proc_inst_id` int(8) DEFAULT NULL, |
`prod_id` varchar(8) DEFAULT NULL, |
PRIMARY KEY (`so_nbr`) |
) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
INSERT INTO `so` VALUES (‘2’, ‘352’, null, null); |
在各自的备份库上能查到对应的数据,可参考1.9 |
5.4 MYCAT测试5.4.1 配置mycat主从策略和分片策略按so表本地网水平分片,351和353放到节点dn1,352和354放到节点dn2。 |
5.4.1.1 schema.xml内容:红色字体为注释,实际文件里没有,注意dn2节点的主从连接库顺序,按说明应该配在前面的写入数据库为主数据库,后面的写入数据库为从数据库,但dn2节点却正好相反,原因待查。 |
|
|
|
|
[table] |