六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 645|回复: 0

LVS+MYCAT+读写分离+MYSQL主备同步部署手册

[复制链接]
 楼主| 发表于 2016-2-18 14:05:37 | 显示全部楼层 |阅读模式
LVS+MYCAT+读写分离+MYSQL主备同步部署手册
1      配置MYSQL主备同步1.1  测试环境mysql版本:5.6.24;
操作系统版本:Linux-3.13-0-32
主数据库IP:192.168.10.3;
主数据库名:db351353;
备用数据库IP:192.168.10.4;
备用数据库名:db352354。
1.2  配置主数据库1.2.1           编辑my.cnf文件#服务器唯一ID,一般取IP最后一段
server_id = 3
#启用二进制日志
log_bin=mysql_bin
#需要备份的数据库名  多个库以逗号分隔
Binlog_do_db =db351353
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
log_bin_trust_function_creators=TRUE
1.2.2           重启数据库# service myql.server restart
1.3  锁定主数据库DDL操作mysql> flush tables with read lock;
1.4  主备已有数据同步用navicat for mysql将主数据库数据同步到备数据库
1.5  停止从服务mysql>stop slave;
1.6  配置备用数据库1.6.1           编辑my.cnf文件#服务器唯一ID,一般取IP最后一段
server_id = 5
1.6.2      登录主数据库查看master状态mysql>show master status;
[/url]
1.6.3       执行change master to系列命令mysql> change master to
master_host=’192.168.10.3′,
master_user=’iom’,–该用户要有Repl_slave_priv权限,没有可用grant replication slave on *.* to ‘iom’@’%’ identified by ‘xf4851213’授权
master_password=’123’,
master_log_file=’mysql_bin.000005’, –根据主服务器show master status出来的File结果填写
master_log_pos=1192; –根据主服务器show master status出来的Position结果填写
1.7  重启从服务mysql>start slave;
1.8  解锁主数据库mysql> unlock tables;
1.9  验证主从同步在备份数据库上执行
mysql>show slave status;
slave_IO_running和slave_SQL_running 为yes。
[url=http://www.beautyorange.com/wp-content/uploads/2015/05/22.png]

主数据库新建一个表,往表里插入几条数据,备份数据库可以同步过来表和表中的数据。
2       MYCAT安装与配置2.1  MYCAT安装参见 MyCat_In_Action_CN.doc
2.2  参数设置重点介绍rule.xml schema.xml router.xml server.xml log4j.xml
2.2.1           rule.xml分片规则配置文件,mycat支持的所有分片规则都在这个文件里。定义一个规则需要两个节点,一个是tableRule,一个是function。
以一致性哈希分片为例,function节点定义了分片规则的实现类与初始化参数和分片规则的算法名称。
属性name为规则算法名称
class为规则实现类
property子节点为初始化规则的参数,使用seed count virtualBucketTimes就可初始化一致性哈希规则

0
2
160

tableRule节点定义了分片规则名(注意此处是规则名,前面的function节点的name属性是算法名)rule子节点指定用来分片的数据库表字段和分片算法名,也就是前面的function节点的name属性。
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 startstop.”
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]



rule=”sharding-by-intfile”>
[table]





<datahost name="”hostdn1″" maxcon="”1000″" mincon="”10″" balance="”1″
writeType=”0″ dbType=”mysql” dbDriver=”native”>
select user()

<writehost host="”hostM1″" url="”192.168.10.3:3306″" user="”iom”–dn1节点主连接库
password=”xf4851213″>
–>

<writehost host="”hostM2″" url="”192.168.10.4:3306″" user="”iom”–dn1节点从连接库
password=”123″/>

<datahost name="”hostdn2″" maxcon="”1000″" mincon="”10″" balance="”1″
writeType=”0″ dbType=”mysql” dbDriver=”native”>
select user()
<writehost host="”host2M1″" url="”192.168.10.3:3306″" user="”iom”" –dn2节点从连接库
password=”xf4851213″>
–>

<writehost host="”host2M2″" url="”192.168.10.4:3306″" user="”iom”–dn2节点主连接库
password=”123″/>


5.4.1.2        rule.xml内容红色字体为注释,实际文件里没有。


– Licensed under the Apache License, Version 2.0 (the “License”);
– you may not use this file except in compliance with the License.
– You may obtain a copy of the License at

–      [url=http://www.apache.org/licenses/LICENSE-2.0]http://www.apache.org/licenses/LICENSE-2.0

– Unless required by applicable law or agreed to in writing, software
– distributed under the License is distributed on an “AS IS” BASIS,
– WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
– See the License for the specific language governing permissions and
– limitations under the License.
–>


[table]


id
func1



[table]


user_id
func1


[table]


local_net_id –按本地网分片
hash-int


[table]


id
rang-long


[table]


id
mod-long


[table]


id
murmur



0
2
160
weightMapFile
节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 –>
/etc/mycat/bucketMapPath
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 –>


partition-hash-int.txt


autopartition-long.txt



3


8
128


5.4.1.3        partition-hash-int内容:红色字体为注释,实际文件里没有。
351=0         –分配到dn1节点
352=1          –分配到dn2节点
353=0
354=1

5.4.2           测试mycat连接客户机navicat打开mycat1连接,能看到一个数据库TESTDB,数据库中能查到db351353和db352354两个数据库的所有数据。mycat2连接亦同。
[/url]
5.4.3           测试mycat读写分离测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,balance值为1,此模式下从数据库也为读数据库。mycat增删改操作应通过mysql1的db351353进行,读操作应通过mysql2的db351353进行。
测试方法:客户机通过navicat的mysql2连接更改db351353的so表记录,这样db351353在mysql1和mysql2上有两份不同的数据,在客户机navicat的mycat1连接上查看so表本地网为351的数据是否与mysql2相同,如相同则测试通过。测试过后要恢复mysql2上db351353的数据,以免影响剩余的测试。
5.4.4           测试mycat数据节点容错测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,如果mysql1服务挂掉,dn1节点的增删改操作应自动切换到mysql2的db351353。
测试方法:在mysql1主机上执行 #service mysql.server stop; 在客户机navicat的mycat1连接上看是否能正常查询so表数据,如果查询正常,修改so表本地网为351的数据,在客户机navicat的mysql2连接上查看db351353的so表数据是否和修改的一样,如果一样则测试通过。
注意:如果mysql1服务重新启动,则mysql1的db351353为从数据库,不会重新变为主数据库。

5.4.5           测试mycat节点容错测试目的:mycat1和mycat2单个节点宕掉,不影响客户机使用数据库。
测试方法:客户机navicat使用keepalived连接,能正常查询和增删改数据。在mycat1上执行#mycat stop;客户机keepalived连接仍能正常使用。mycat1上执行#mycat console,mycat2上执行#mycat stop,客户机keepalived连接能正常使用。mycat2上执行#mycat console,客户机keepalived连接能正常使用,且数据请求路由和keepalived所配lb_algo策略相同。
[url]http://www.beautyorange.com/2015/05/%E3%80%90%E8%BD%AC%E8%BD%BD%E3%80%91lvsmycat%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BBmysql%E4%B8%BB%E5%A4%87%E5%90%8C%E6%AD%A5%E9%83%A8%E7%BD%B2%E6%89%8B%E5%86%8C%EF%BC%88%E9%82%A2%E9%94%8B%EF%BC%89/

LVS+MYCAT+读写分离+MYSQL主备同步部署手册

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博账号登陆

x
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表