| 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] |