MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障。然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换。前面介绍了Mysql+Keepalived双主热备高可用方案记录,那篇文档里没有使用到LVS(实现负载均衡),而下面要介绍的就是如何通过Keepalived+LVS方式来是实现MySQL的高可用性,利用LVS实现MySQL的读写负载均衡,Keepalived避免节点出现单点故障,同时解决以上问题。
Keepalived是一个基于VRRP(虚拟路由冗余协议)可用来实现服务高可用性的软件方案,避免出现单点故障。Keepalived一般用来实现轻量级高可用性,且不需要共享存储,一般用于两个节点之间,常见有LVS+Keepalived、Nginx+Keepalived组合。
LVS(Linux Virtual Server)是一个高可用性虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的*软件项目之一。LVS主要用于多服务器的负载均衡,作用于网络层。LVS构建的服务器集群系统中,前端的负载均衡层被称为Director Server;后端提供服务的服务器组层被称为Real Server。通过下图可以大致了解LVS的基础架构。
LVS有三种工作模式,分别是:
1)DR(Direct Routing 直接路由)模式。 DR可以支持相当多的Real Server,但需要保证Director Server(分发器)虚拟网卡与物理网卡在同一网段,并且后端Real Server的vip要建立在本地回环口lo设备上,这样做是为了防止ip冲突;DR模式的好处是进站流量经过Director Server,出站流量不经过Director Server,减轻了Director Server的负载压力。
2)NAT(Network Address Translation 网络地址转换)模式。NAT扩展性有限,无法支持更多的Real Server,因为所有的请求包和应答包都需要Director Server进行解析再生,这样就很影响效率。
3)TUN(Tunneling IP隧道)模式。TUN模式能够支持更多的Real Server,但需要所有服务器支持IP隧道协议;
LVS负载均衡有10中调度算法,分别是:rr(轮询)、wrr(加权轮询)、lc、wlc、lblc、lblcr、dh、sh、sed、nq
以下详细记录了Mysql在主主同步环境下,利用LVS实现Mysql的读写负责均衡以及使用Keepalived心跳测试避免节点出现单点故障,实现故障转移的高可用。
1)高可用方案的环境准备
1 2 3 4 5 6 7 8 9 10 11 |
|
2)环境部署记录如下
a)Mysql主主热备环境部署
MySQL1 Real Server1和MySQL2 Real Server的主主热备可以参考Mysql+Keepalived双主热备高可用操作记录中对应部分。
b)Keepalived安装
LVS_Master和LVS_Backup的keepalived安装,也可以参考Mysql+Keepalived双主热备高可用操作记录中对应部分。
c)LVS安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
d)编写LVS启动脚本/etc/init.d/realserver
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
|
e)配置iptables防火墙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
3)接着配置LVS+Keepalived配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
|
此时LVS+Keepalived+MySQL主主复制已经搭建完成。
4)最后进行测试验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
|
总结几点:
1)MySQL主主复制是集群的基础,组成Server Array,其中每个节点作为Real Server。
2)LVS服务器提供了负载均衡的作用,将用户请求分发到Real Server,一台Real Server故障并不会影响整个集群的。
3)Keepalived搭建主备LVS服务器,避免了LVS服务器的单点故障,出现故障时可以自动切换到正常的节点。
4)VRRP虚拟IP地址和接口实际IP必须在同一个网段内,VRRP两个实际接口不在同一网段,是不能形成主备关系的。因为:
1 2 |
|
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************