阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑
最近,公司项目搭建了一套后端数据库架构,不是在RDS,是在阿里云的ECS服务器上搭建keepalived、mha、mysql5.6、gtid、一主两从架构,目前还没有实现读写分离,以后架构升级,可能代码里会实现读写分离,或者加入入mycat等中间件,也可能进行分库分表;架构不是最新,很多工具大家都见过,只是在不同的环境,不同的情况下,遇上的问题不同,也踩了很多坑,如有些可能没在阿里云上,有的可能数据库版本不一样等,所以更大家分享一下经验。
遇到的问题较多,主要问题是:
1、mha必须是0.56版本才支持GTID
2、阿里云ECS不支持浮动IP
3、阿里云服务器上keepalived只能设置单播
4、keepalived配置文件里加脚本判断mysql是否启动需要首尾写好配置文件
5、注意keepalived的配置文件,以防主库恢复后IP漂移回去
大概架构:

1、在三台服务器上安装mysql主从复制
主从复制一主两从,用GTID特性,半同步复制能保证一致性好点,和主从复制方便点。
a、配置每个节点配置文件my.cnf
添加如下
log-bin=mysql-bin
server-id=
gtid_mode=ON
log_slave_updates
enforce_gtid_consistency
(注:除了server-id每个节点不一样,其它都一样,也必须加,以一般主从复制区别,多了下面的3个参数)
b、主节点添加复制账号
grant replication slave on *.* to 'backup'@'192.168.10.%'identified by'backup';
c、从节点执行
change master to master_host='192.168.10.142', master_user='backup', master_password='backup',master_port=,master_auto_position=;
start slave;
2、在三台服务器上安装mha node 在第三台服务器上安装mha master
下载链接:链接:http://pan.baidu.com/s/1c2lKbOs 密码:bfqd
安装方式参照:http://www.cnblogs.com/galengao/p/5764163.html
3、在主库和备库上面安装keepalived
安装方式参照:http://www.cnblogs.com/galengao/p/5764163.html
可以选择安装最新版本
安装依赖包
yum install popt-static kernel-devel make gcc openssl-devel lftp libnl* popt* 安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
tar zxvf keepalived-1.2..tar.gz
cd keepalived-1.2.
./configure --prefix=/usr/local/keepalived
make
make install 将keepalived做成启动服务,方便管理
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ service keepalived start
踩到的问题处理
1、mha必须是0.56版本才支持GTID
从我给的链接下载0.56的版本,或者网上找的来安装
2、阿里云ECS不支持浮动IP
要注意:阿里云的上ECS服务器跟我们自己的虚拟机不一样,它不支持浮动IP的
a、阿里云上提工单,让其开通havip,高可用虚拟ip

b、到专有VPC网络的高可用虚拟IP,点击创建高可用虚拟IP出现如下图

如何在出现的虚拟ip点管理,把你要漂移的那两台服务器绑定在上面:

3、阿里云服务器上keepalived只能设置单播
按照上面模式做了keepalived还是不能正常运行,因为在阿里云私有网络里只能设置单播,如下配置文件里的红字,画了的是IP地址,从哪台飘到哪台,另外一台的配置IP是相反的:

4、keepalived配置文件里加脚本判断mysql是否启动需要首尾写好配置文件
因为我们不但是服务器死了进行IP漂移,还要即使数据库死了也要漂移,所以只能写脚本去判断,脚本在配置文件里要注意格式:末尾还有一个模块,那个模块是在vrrp_instance VI_1的模块里的,及check_mysql和后面的花括号有一个空格:

5、注意keepalived的配置文件,以防主库恢复后IP漂移回去
我在配置文件里改成非抢占模式nopreempt 和主备的state都改成BACKUP,这样当主库挂了,IP漂移过去后重新启动主库,但数据库还没修复时不会漂移过来,如果需要漂移过来需要手动先关闭备库的keepalived,让其漂移过来。
问题形形色色,不同环境不同需求会遇上不同问题,慢慢摸索慢慢发掘。
阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑的更多相关文章
- 阿里云ECS服务器环境搭建——ubuntu16.04图形界面的安装
阿里云ECS服务器环境搭建——ubuntu16.04图形界面的安装 最近琢磨着想在服务器上搭建一个hexo博客,于是就在阿里云上买了一个云服务器ECS,远程接入后默认给的是一个命令窗口,没有图形界面, ...
- 阿里云ECS服务器环境搭建(1) —— ubuntu 16.04 图形界面的安装
阿里云ECS服务器环境搭建(1) —— ubuntu 16.04 图形界面的安装1. 背景在我们购买阿里云ECS服务器之后,默认的系统环境是很干净的,我购买的是ubuntu16.04,远程登录进入之后 ...
- 使用Navicat远程连接阿里云ECS服务器上的MySQL数据库
一.必须给服务器的安全组规则设置端口放行规则,在管理控制台中设置: 之后填写配置,授权对象是授权的IP,其中0.0.0.0/0为所有IP授权,之后保存; 二.Navicat使用的配置 在编辑连接处,要 ...
- 使用Navicat连接阿里云ECS服务器上的MySQL数据库
一.首先要mysql授权 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的mysql数据库密码' WITH GR ...
- 用Navicat连接阿里云ECS服务器上的MySQL数据库
今天用navtive连接阿里云服务器(Linux)的数据库时,老是连接不上,并且报10060错误,要通过以下两个步骤解决: 1.先进入linux连接数据库并输入密码: mysql -uroot -p ...
- 用Navicat连接阿里云ECS服务器上的MySQL数据库,连接不上,并且报10060错误
设置远程访问(使用root密码): grant all privileges on . to 'root' @'%' identified by '123456'; flush privileges; ...
- 阿里云ECS服务器环境搭建 ubuntu 16.04 图形界面的安装
https://blog.csdn.net/zwq912318834/article/details/80528374
- 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建
准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...
- 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...
随机推荐
- Lytro 光场相机重对焦C++实现以及CUDA实现
前面有几篇博客主要介绍了光场和光场相机相关知识,以及重对焦效果和多视角效果的展示.算是自己学习光场过程的一种总结. 这次贴上自己用OpenCV/C++编写的重对焦算法实现(包含CPU版和CUDA GP ...
- bootstrap-multiselect 的简单使用,样式修改,动态创建option
1.bootstrap-multiselect 顾名思义基于bootstrap,bootstrap基于jquery,所以第一步,引入文件 bootstrap.css/ juery.js /bootst ...
- Java数据持久层框架 MyBatis之API学习一(简介)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- servlet入门学习之生命周期
一. 什么是Servlet Servlet是用Java语言编写的服务器端小程序,驻留在web服务器中,并在其中运行,扩展了web服务器的动态处理功能. 用java语言编写的java类 在web容器中运 ...
- 使用layui-tree美化左侧菜单,点击生成tab选项
layui-tree美化左侧菜单 html <div class="layui-side layui-bg-black"> <div class="la ...
- 【fail2ban】使用fail2ban进行攻击防范
使用fail2ban进行攻击防范 转自:https://kyle.ai/blog/6215.html 最近总有一些无聊的人,会来扫描一下我的服务器,看有没有啥漏洞可以利用的... 可以看到类似这样的4 ...
- linux_磁盘体系
未曾习艺先学礼,未曾学武先习德 当今磁盘都是温室磁盘,原理是一样的,高速转动的的盘,磁头做径向运动 当今磁盘的发展趋势: 体积更小.速度更快.容量更大.使用更安全 速度更快: 主轴转速: 10000/ ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
- C语言学习之交换(冒泡)排序
在学习c语言的过程中,在数组内容中我们总是能学习到对一组数据进行排序,对于排序有许多的方法,像 (交换)冒泡排序.选择排序.(基数)桶排序.(插入)二分法排序等等. 我主要以我个人的理解去分析常见的交 ...
- String.Format 格式化货币的小问题
今天在开发过程中,遇到一件让我觉得比较纳闷的事情:用String.Format 格式化充值金额的时候,我这样处理: String.Format("{0:C2}", dr[" ...