mysql高可用之LVS + KEEPALIVE + MYSQL
1.架构图
注意
(一) Mysql需要把bind-address的配置去掉,否则无法实现虚拟ip访问
(二) 关闭所有linux防火墙:/sbin/iptables –F(可能没用)
(三) 重启networking:sudo /etc/init.d/networking restart(可能没用)
2. 架构
Mysql:
master<=slave
10.24.6.5:3306(system !System)<=10.24.6.6:3306(system !System)
LB
10.24.6.4 Master
10.24.6.7 BACKUP
VIP:
10.24.6.2
3.LVS负载均衡配置
3.1. Lvs模块检测
Ipvs 具体实现是由ipvsadm 这个程序来完成,因此判断一个系统是否具备ipvs 功能,只需要察看ipvsadm 程序是否被安装。察看ipvsadm 程序最简单的办法就是在任意路径执行命令ipvsadm。表6-1 为安装ipvsadm 及未安装ipvsadm 的输出对比。
执行 ipvsadm 后的输出 |
|
未安装ipvsadm |
bash: /sbin/ipvsadm: 没有那个文件或目录 |
安装ipvsadm |
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn |
|
a) 通过系统命令比较简单:apt-get install ipvsadm
b) 检验ipvsadm 是否被正确安装
i. 执行ipvsadm,看是否有表6-1 第2 栏的输出。
ii. 检查当前加载的内核模块,看是否存在ip_vs 模块。
modprobe -l |grep ipvs
或lsmod | grep ip_vs
Ubuntu9.10已经用了2.6的内核,所以不需要再编译内核了
3.2.配置
LVS默认不需要配置
4.KeepAlived高可用配置
4.1. 安装
4.2. MASTER配置(/etc/keepalived/keepalived.conf)
global_defs {
router_id HaMySQL_1
}
vrrp_instance VI_MYSQL {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.24.6.2
}
}
virtual_server 10.24.6.2 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 10.24.6.5 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 10.24.6.6 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4.3. SLAVE配置(/etc/keepalived/keepalived.conf)
global_defs {
router_id HaMySQL_1
}
vrrp_instance VI_MYSQL {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.24.6.2
}
}
virtual_server 10.24.6.2 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 10.24.6.5 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 10.24.6.6 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4.4. 日志
Ubuntu下面是/var/log/syslog
All daemon messages are logged through the Linux syslog. If you start Keepalived with the “dump
configuration data” option, you should see in your /var/log/messages (on Debian this may be
/var/log/daemon.log depending on your syslog configuration) something like this :
4.5. 负载均衡服务的启用和验证
Lvs 客户端的启用和验证在前面的有过详细的说明,此处略过。前面我们也提过,keepalived 启动过程不会检查配置文件的语法,因此在启动keepalived 以前,需要人工对/etc/keepalived/keepalived.conf 文件做全面的语法检查。一个比较容易犯的错误就是把花括号“}”写漏了,不成对!当lvs 客户端都正常启动并且配置文件经检查无误后(当然有错误也无妨,随时可以修改嘛!),执行命令 /usr/local/keepalived/sbin/keepalived –D ,然后我们查看系统进程,看是否是3 个keepalived 进程。如果配置文件的路径不是/etc/keepalived/keepalived.conf 则需要在启动时用选项-f 指定。
最能反映keepalived 启动情况的地方当属系统日志。手动执行启动操作后,使用命令 tail –f /var/log/syslog 滚动查看输出,就能详细了解其运行情况。图6-3 为某个lvs 环境的keepalived 启动输出:
另外一个反映keepalived 正常运行状态的地方是网络接口vip 的启用。通过执行ip add 即可看见vip 已经被绑定在制定的网络接口(注意:ifconfig 不能显示 vip)。需要注意的是,BACKUP 的vip 暂时不绑定。如下图所示:
4.6. Vip验证
Master
Slave
4.7. IPVSADM验证
Master
Clave
4.8. 测试验证
实体mysql
Vip mysql
4.9. 高可用测试结果
LB:
10.24.6.4 Master关闭以后,10.24.6.7 BACKUP启用接管
MYSQL:
10.24.6.5:3306
10.24.6.6:3306
任意一个mysql异常之后,可连接到其他mysql
5. 遇到问题
5.1. Mysql连接不上(错误码111)分析
1.Mysql连接vip
2.Mysql连接vip的抓包情况
通过抓包可知,10.24.6.2:3306是可以连上的,它有回包,只不过回包的状态为R
3.TCP连接出现RST的情况分析:
@1端口未打开
@2请求超时
@3提前关闭
4.在结合mysql返回值为111可以知道应该是mysql服务提前关闭了,
Google了下mysql111的解决办法:
QT链接Mysql的时候出现QSqlError(2003, "QMYSQL: Unable to connect", "Can't connect to MySQL server on '172.18.186.244' (111)")错误,google之后发现是mysql为了安全,对hostname进行了绑定。
解决办法:修改/etc/mysql/my.cnf(不同Linux发行版位置可能不同,我用的是Ubuntu 11.04,windows是my.ini文件),里面有一句:bind-address = 127.0.0.1用#注释掉,重启mysql服务就OK了。
原文地址:http://stackoverflow.com/questions/1420839/cant-connect-to-mysql-server-error-111
5. 解决方案(去掉bind-address):
修改在10.24.6.5的mysql配置:
修改在10.24.6.6的mysql配置:
6. 总结
- 主mysql和从mysql可以同时存在服务
- Keepalive从可用的服务列表里面选择一个服务访问
- 主mysql和从mysql随机选择
- 适合做负载均衡,主从备份
- share nothing架构
mysql高可用之LVS + KEEPALIVE + MYSQL的更多相关文章
- 集群高可用之lvs+keepalive
集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...
- mysql高可用之DRBD + HEARTBEAT + MYSQL
1. 架构 Mysql: master<=slave 10.24.6.4:3306<=10.24.6.6:3306 VIP: 10.24.6.20 必须使得VIP和mysql处于同一网段, ...
- Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)
当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...
- MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移
系统信息: mysql主库 mysql从库 VIP 192.168.1.150 mysql 主主同步都设置 auto-increment-offset,auto-increment-increment ...
- 涂抹mysql笔记-搭建mysql高可用体系
mysql的高可用体系<>追求更高稳定性的服务体系 可扩展性:横向扩展(增加节点).纵向扩展(增加节点的硬件配置) 高可用性<>Slave+LVS+Keepalived实现高可 ...
- MySQL高可用方案-MySQL InnoDB Cluster
MySQL InnoDB Cluster简介 MySQL InnoDB Cluster 是最新GA的MySQL高可用方案,利用MySQL Group Replication和MySQL Shell.M ...
- Lvs+Keepalived实现MySQL高可用
LVS+Keepalived+MySQL高可用配置 本文所有配置前提是已实现MySQL双主备份(MySQL双主) 安装前的准备: VIP:192.168.0.201 Keepalived: Keepa ...
- 魅族资深DBA:利用MHA构建MySQL高可用平台
龙启东 魅族资深DBA 负责MySQL.Redis.MongoDB以及自动化平台建设 .擅长MySQL高可用方案.SQL性能优化.故障诊断等. 本次分享主要包括以下几方面: 如何利用MHA 改造MHA ...
- 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA
本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL ...
随机推荐
- Socket.IO 1.0 正式发布,快速可靠的实时引擎
Socket.IO 是目前 Web 领域最火的实时引擎,用于实现基于事件的双向实时的通信.它适用于任何平台,浏览器或设备,专注于可靠性和速度.您可以将数据推送到客户端,并获得实时的计数,日志或图表. ...
- VueJs2.0建议学习路线
最近VueJs确实火了一把,自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新手来说,如何高效快速的学习Vue2.0呢. 既然大家会看这篇文章,那么 ...
- 利用 ELK系统分析Nginx日志并对数据进行可视化展示
一.写在前面 结合之前写的一篇文章:Centos7 之安装Logstash ELK stack 日志管理系统,上篇文章主要讲了监控软件的作用以及部署方法.而这篇文章介绍的是单独监控nginx 日志分析 ...
- 测试lua的效率
这几天粗略的测试了一下lua的效率!首先声明这个测试很有针对性,大部分是针对游戏中的使用,而绝非lua的整体性效率(这个测试我不会),lua构建的上层逻辑中,大概使用的语句不太多,for,迭代,调用C ...
- Web性能
使用Web性能测试可以很容易地创建一组可重复的测试,从而帮助我们分析web应用程序的性能,找到性能瓶颈. Web性能测试可以验证一个Web应用程序的行为是否正确.它们会向目标Web应用程序发布一组有序 ...
- 快速幂 --- CSU 1556: Jerry's trouble
Jerry's trouble Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1556 Mean: 略. ana ...
- 怎样计算一个整数的位数&并把每一位上的数字保存下来
用循环来解决~~ M每次除以10, 再用一个变量count来计数,每循环一次 加1,直到这个数除去10后的数小于10 ,count再加1就可以了 实例:整数M=4325, 第一次:4325/10=43 ...
- Python OOP(1):从基础开始
本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...
- Linux命令详解之–cd命令
cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...
- PHP学习笔记:APACHE配置虚拟目录、一个站点使用多域名配置方式
我用的是xmapp lite2016的集成包,配置虚拟目录教程如下: 找到httpd-vhosts.conf这个文件,这个文件一般是在xampp\apache\conf\extra这个路径下面,找不到 ...