keeplived+mycat+mysql高可用读写分离水平分表(谁看谁都会)
一:环境准备:
应用 | 主机 |
---|---|
mysql-master | 192.168.205.184 |
mysql-slave | 192.168.205.185 |
mycat-01,keeplived,jdk | 192.168.205.182 |
mycat-02,keeplived,jdk | 192.168.205.183 |
mysql主从环境(略)
二: 主机(192.168.205.183,192.168.205.182)上安装jdk,mycat,keeplived
以192.168.205.183主机为例,另外一台主机配置与183主机一致:
1.安装jdk
上传jdk安装包解压安装到/usr/local/jdk
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile
2.官网下载安装mycat
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
mv mycat/ /opt/
3.修改配置文件
cd /opt/mycat/conf
vim server.xml
vim schema.xml
4.启动mycat服务
cd /opt/mycat/bin
./mycat start
mycat启动后会有2个端口8066(数据连接端口),9066(管理端口)
ss -ntupl
5.通过mysql客户端连接8066(我们在mysql-master节点登录mycat试下)
mysql -ulilong -p111111 -P8066 -h 192.168.205.183
6.查看mycat里数据库信息
7.进入TSDB创建表city
crate table city(id int,name varchar(8),area float(5,2),people_num int);
查看数据库中是否创建成功
show tables;
在2台数据库节点看是否已存在此表(由于做了读写分离在创建表时走了写节点也就是主库,从库也同步过来了)
8.通过mysql客户端连接9066可以查看到相关dataNode信息
mysql -ulilong -p111111 -P9066 -h 192.168.205.183
show @@dataNode;
在2台mycat节点上安装keepalived并单独配置日志文件(默认在/var/log/messages日志查看不方便)
192.168.205.182:
yum -y install keepalived
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
vim /etc/rsyslog.conf
local0.* /var/log/keepalived.log
systemctl restart rsyslog
vim /etc/keepalived/keepalived.conf
192.168.205.183:
yum -y install keepalived
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
vim /etc/rsyslog.conf
local0.* /var/log/keepalived.log
systemctl restart rsyslog
vim /etc/keepalived/keepalived.conf
分别启动2节点keepalived
192.168.205.182:
systemctl start keepalived
可以看到vip接口在182节点上
192.168.205.183:
systemctl start keepalived
在mysql节点上我们通过vip接口登录试下
mysql -ulilong -p111111 -P8066 -h 192.168.205.250
下图我们看到已经登录成功
我们停用192.168.205.182的keepalived试下看是否转移到192.168.205.183上
可以看到182节点vip接口不在了
在看下183节点vip接口已飘逸到此节点上
我们再次启动主节点上keepalived发现vip接口已经飘逸回来,默认情况下keepalived是抢占模式所以主节点恢复后会直接抢占回来
到此为止基本完成配置,可仔细想想如果是所在keepalived的master节点mycat服务有问题那它还会切换到备用节点吗。答案肯定是否定的。这就需要在keepalived 配置脚本来检测mycat服务状态如果所在节点master的mycat服务挂掉了, 那就主动结束所在master节点的keepalived进程切换至备用节点继续提供服务
2节点分别创建存放脚本的文件
mkdir -p /etc/keepalived/scripts
vim /etc/keepalived/scripts/chk_mycat.sh
#!/bin/bash
MYCAT_PORT=ss -ntupl | egrep '8066|9066' | wc -l
if [ $MYCAT_PORT -ne 2 ];then
pkill keepalived
fi
在 /etc/keepalived/keepalived.conf配置文件中将以下内容加入到相应位置
vrrp_script chk_mycat {
script "/etc/keepalived/scripts/chk_mycat.sh"
interval 2
weight -50
fall 3
rise 3
timeout 3
}
track_script {
chk_mycat
}
重新启动keepalived服务
systemctl restart keepalived
验证检测脚本是否生效:
将master节点上mycat服务手动停掉
cd /opt/mycat/bin && ./mycat stop
此时master节点keepalived服务已经停止了
在看下backup节点,发现vip已经飘移到此节点上
从mysql客户端访问正常
配置MASTER<-->slave 相互切换时邮件通知
2个keepalived节点安装postfix邮件服务(默认已安装)和 发送邮件插件mailx
yum -y install mailx
vim /etc/mail.rc
set from=test@hzs.com.cn
set smtp=smtp.exmail.qq.com
set smtp-auth-user=test@hzs.com.cn
set smtp-auth-password=***
smtp-auth=login
将以下配置加入下面相应位置(2台做同样操作)
MASTER,BACKUP,FAULT(大小写均可)
vim /etc/keepalived/keepalived.conf
notify_master "/etc/keepalived/scripts/notify.sh MASTER"
notify_backup "/etc/keepalived/scripts/notify.sh BACKUP"
notify_fault "/etc/keepalived/scripts/notify.sh FAULT"
创建相应脚本文件(2台做同样操作)
cd /etc/keepalived/scripts
vim notify.sh
#!/bin/bash
SEND_to_MAIL='1550789579@qq.com'
notify() {
MAIL_SUBJECT="$(hostname) to be $1, vip 转移"
MAIL_TEXT="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$MAIL_TEXT" | mail -s "$MAIL_SUBJECT" $SEND_to_MAIL
}
case $1 in
MASTER)
notify MASTER
;;
BACKUP)
notify BACKUP
;;
FAULT)
notify FAULT
;;
*)
echo "Usage: $(basename $0) {MASTER|BACKUP|FAULT}"
exit 1
;;
esac
更改脚本执行权限
chmod +x notify
重新启动keepalived服务
systemctl restart keepalived
已可以看到vip已转移到备用节点上
-------------------------------------------------------------------------------------------------------------------------------------
mycat分表
1.我们以2个dataNode节点为例子在mysql-master库上新建cs1_db,mysql-slave会同步cs1_db库,之前已建过cs_db库,在2个库里分别新建表'wuhan'
2.mycat节点(2台分表做以下配置)
vim schema.xml
vim rule.xml
3.重启mycat服务
cd /opt/mycat/bin && ./mycat restart
4.通过VIP接口连接mycat服务,插入数据
mysql -ulilong -p111111 -P8066 -h 192.168.205.250
insert into wuhan(id,address) values(7,'xx'),(8,'xg'),(9,'lx'),(10,'ob'),(11,'kx'),(12,'hx');
5.查看2个数据库wuhan表中数据,发现数据已经分表插入到了2个数据库中同一表里
6.可以看下mysql-slave库也同步了
到此所有配置已结束
keeplived+mycat+mysql高可用读写分离水平分表(谁看谁都会)的更多相关文章
- MySQL高可用读写分离方案预研
目前公司有需求做MySQL高可用读写分离,网上搜集了不少方案,都不尽人意,下面是我结合现有组件拼凑的实现方案,亲测已满足要求,希望各位多提建议 :) 一. 网上方案整理(搜集地址不详...) 1 ...
- DRBD+Heartbeat+Mysql高可用读写分离架构
声明:本案例仅为评估测试版本 注意:所有服务器之间必须做好时间同步 架构拓扑 IP信息: Heartbeat安装部署 1.安装heartbeat(主备节点同时安装) [root@master1 ~]# ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...
- mysql使用MRG_MyISAM(MERGE)实现水平分表
在MySQL中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基本的优化信息,也可以让你在自己的程序开发中受益匪浅.当然数据库的优化有很 ...
- 应用集成mycat,实现mycat的高可用与mysql的读写分离
前言 开心一刻 一个女人自朋友圈写道:我家老公昨天和别人家的老婆出去旅游,迄今未归,我则被别人家的老公折腾了一天,好累哦! 圈子下面,评论无数,老公在下面评论到:能不能好好说话,我只不过陪女儿去毕业旅 ...
- Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)
Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) 2 ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...
随机推荐
- java IO教程《四》
properties使用 什么是Properties? Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置 ...
- CENTOS7 安装 SYNCTHING
本地电脑需要同步远程数据,安装syncthing 测试 1:下载 wget https://github.com/syncthing/syncthing/releases/download/v1.5. ...
- 练习(time.tick定时器监控数据库)
设立个定时器,监控数据库里fb_state(发布状态),并将数据库中一条记录的开始时间与截止时间和当前时间进行比对.若当前时间在开始时间与结束时间之间,则将发布状态设为1,否则为0. 同时,将此段代码 ...
- 02:HTML
HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5 ...
- 「题解」黑暗塔 wizard
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题意简述 给定 \(y\),求 \(\varphi(x)=y\) 中 \(x\) 的个数和最大值. \(1\leq y\leq 10 ...
- Spring Boot WebFlux-01——WebFlux 快速入门实践
第01课:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ...
- asp.net core配合vue实现后端验证码逻辑
概述 网上的前端验证码逻辑总感觉不安全,验证码建议还是使用后端配合验证. 如果产品确定可以上网的话,就可以使用腾讯,百度等第三方验证,对接方便.但是产品可能内网部署,就必须自己写了. 本文章就是基于这 ...
- 【复习】Listening and Reading Comprehension
短对话 M: Why do you declare the news that you're pregnant on your blog directly? W: I'm so excited tha ...
- 一个排序引发的BUG
你好呀,我是why. 前两天在 Git 上闲逛的时候又不知不觉逛到 Dubbo 那里去了. 看了一下最近一个月的数据,社区活跃度还是很高的: 然后看了一下最新的 issue,大家提问都很积极. 其中看 ...
- 使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误
当看到这个错误的时候有点莫名奇妙的感觉,随后的第一反应是: 这跟我前些天安装的java的jre 1.8 有没有关联性.修改了设定,方法如下 "运行" -> "外部工 ...