高并发项目中我们时长会进行读写分离,多主多从的数据库架构设计,通过mycat中间件进行分库分表的操作,那么在生产环境中为了避免mycat服务的单点故障,所以mycat也需要进行高可用的集群搭建。
一、mycat高可用架构拓扑图
客户端请求keepalived对外暴露出的虚拟ip地址,两个haproxy负载均衡组件,哪一个抢占到了虚拟ip就会把请求转发到对应的haproxy中,进而再将请求转发到后续的mycat中间件,该架构模式同事确保了haproxy负载均衡组件的高可用和mycat的高可用。
当其中一台haproxy宕机,keepalived 通过 vrrp 进行通信,后续的请求通过vip(虚拟ip)会被转发到正常的haproxy中。
二、服务器准备
三、mysql主从复制配置
1. 在主库master数据库的配置文件 /usr/my.cnf 中,配置如下内容
2.在slave节点mysql数据库的my.cnf 配置如下
3、分别重启master、slave节点mysql数据库
service mysql restart
4、在master主节点创建同步数据的账户,并且进行授权操作
登录mysql , mysql -u root -p 123456
5.查看master节点mysql数据的状态
此处需要记住File 字段和 Position字段的值,后面执行主从复制命令时需要用到
6、在slave节点mysql服务器上执行如下命令
如果报以下错误,需要先停止主从复制关系,再次执行上面的主从复制的命令。
7、slave节点开启同步操作
start slave
show slave status
可以看到 slave io running 和 slave sql running 都是 yes 则说明主从复制配置成功。
8、测试验证主从配置是否成功
在主节点创建数据库和表,并向表中插入一些数据。
四、mycat的配置
修改schema.xml 中的配置,根据实际情况配置分库分表规则以及数据库读写分离项。
两台mycat 配置 一模一样,配置好了之后,分别启动两个mycat。
启动完成之后,分别连接两个mycat,验证mycat是否启动成功
mysql -h 192.168.192.157 -P 8066 -u root -p
五、HAProxy的安装及配置
1.上传haproxy包分别到192...159 服务器和 192...160服务器
2.解压,编译,安装haproxy包
使用 uname -r 查看系统内核版本及系统位数
编译完成,之后进行安装
安装完成之后,需要创建一个haproxy的数据存放目录
3.以第一台159服务器为例子,配置haproxy,创建haproxy 的配置文件
haproxy.conf 配置文件的内容如下:
第一台159服务器的haproxy配置完成之后,在第二台160 服务器进行同样的haproxy安装及配置操作,haproxy.conf 文件中只需要修改 global 下的 node属性和description 属性接口,例如改为
mysql-haproxy-02
备注:haproxy.conf 配置文件解析如下:
haproxy 的负载均衡策略:
4.启动159服务器和160服务器上的haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
查看haproxy是否启动成功
最后根据配置文件访问haproxy的管理界面
192.168.192.159:8888/admin
输入用户名密码:
admin/123
登录成功,看到如下界面:
5.此时可以通过 haproxy 访问 mycat 了
可以连接第一个haproxy来访问haproxy代理的两个mycat
mysql -h 192.168.192.159 -P 48066 -u root -p
或者也可以连接第二个haproxy来访问haproxy代理的两个mycat
mysql -h 192.168.192.159 -P 48066 -u root -p
当其中一个mycat挂掉了之后,haproxy会把所有的请求都转发到正常的mycat节点上。
六、keepalived 安装及配置
每个keepalived会一直check自己服务器上面的haproxy,当发现自己服务器上的haproxy挂掉了之后,就也会把自身给杀掉,这样第二台机器上面的keepalived就无法收到第一台机器上的keepalived发送过来的心跳包,那么之后的虚拟ip都会只绑定第二台服务器。这样就利用keepalived确保了haproxy的高可用。
1.keepalived 的安装,配置
修改配置文件 /etc/keepalived/keepalived.conf
Master keepalived配置:
还需要加上这个这个配置,用来检查haproxy服务是否存活
编写检测haproxy是否存活的haproxy_check.sh校验脚本
判断haproxy 进程是否存活,进程存在是 wc -l 返回1 ,如果返回0,则重启haproxy,再判断haproxy 的进程 wc -l 的值是否是1,如果还是0,则停止keepalived 服务。
最后 赋予 haproxy_check.sh脚本文件777权限
chmod 777 haproxy_check.sh
slave keepalived 的配置和master keepalived配置类似:
需要修改以下几个地方:
分别修改标识,以及state,以及优先级
3.分别启动两台机器的keepalived
最终通过访问 vip(虚拟ip)来访问mycat。
此处的192.168.192.200就是上面keepalived暴露出来的虚拟ip地址
可以通过
arp -a host 的命令查看当前虚拟ip 192.168.192.200的mac地址和哪个真是host地址的mac一样,图中可以看出虚拟ip地址绑定的是159服务器。
至此全部搭建完成,我们再项目里面就可以直接将keepalived暴露出来的虚拟地址作为数据库连接地址进行连接使用了。