MySQL + KeepAlived + LVS 单点写入主主同步高可用架构

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: <p style="line-height:23.8px; font-family:Arial; font-size:14px; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="font-size:24px"><strong><a target="_blank" h

MySQL + KeepAlived + LVS 单点写入主主同步高可用架构



㈠ 实战环境


   

服务器名· IP OS MySQL
odd.example.com 192.168.1.116 RHEL-5.8 5.5.16
even.example.com 192.168.1.115 RHEL-5.8 5.5.16

   ㈡ 方案优缺点
      
      优点
      
      ● 安装配置简单, 实现方便,高可用效率好,可以根据服务与系统的可用性多方面进行切换
      ● 可以将写 VIP 和读 VIP 分别进行设置,为读写分离做准备
      ● 可以在后面添加多个从服务器,并做到负载均衡
      
      缺点
      
      ● 在启动或者恢复后会立即替换掉定义的 sorry_server
         因此如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改MySQL的端口等
      ● 扩展不是很方便
      ● 切换需要 1s 左右的时间


      
   
㈢ 方案适用场景
      
      这个方案适用于只有两台数据库服务器并且还没有实现数据库的读写分离的情况、读和写都配置 VIP
      这个方案能够便于单台数据库的管理维护以及切换工作
      比如进行大表的表结构更改、数据库的升级等都是非常方便的


      
   
㈣ 方案架构图


        



   ㈤ 部署步骤
   
   ⑴ MySQL 安装
   
      请查阅我之前的一篇文章:MySQL 5.5 三大安装方式:【二进制、源代码编译 和 RPM 包】 安装步骤及优缺点比较


   ⑵ MySQL主主同步配置
      
      这也请查阅我之前的文章哈:MySQL 主主同步配置


   ⑶ LVS 安装
   
     在ODD EVEN:
      
       # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
       # ln -s /usr/src/kernels/2.6.18-308.el5xen-i686/  /usr/src/linux
       # tar -zxv -f ipvsadm-1.24.tar.gz
       # cd ipvsadm-1.24
       # make
       # make install
   
   ⑷ KeepAlived安装
   
      在ODD EVEN:
   
       # wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
       # tar -zxv -f keepalived-1.1.19.tar.gz
       # cd keepalived-1.1.19
       # ./configure --prefix=/usr/local/keepalived
       # make
       # make install
       # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
       # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
       # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
       # mkdir /etc/keepalived
       
       
   ⑸ KeepAlived配置
   
     在 ODD


[plain]  view plain copy print ?
  1. global_defs {  
  2.    
  3. notification_email {  
  4.                linwaterbin@gmail.com  
  5.         }  
  6.         notification_email_from bychjzh@gmail.com  
  7.         smtp_server smtp.gmail.com  
  8.         smtp_connect_timeout 30  
  9.         router_id LVS1  
  10. }  
  11.    
  12. vrrp_sync_group test {  
  13. group {  
  14.         loadbalance  
  15. }  
  16. }  
  17.    
  18. vrrp_instance loadbalance {  
  19.         state BACKUP  
  20.         interface eth0  
  21.         lvs_sync_daemon_inteface eth0  
  22.         virtual_router_id 51  
  23.         priority 150  
  24.         advert_int 1  
  25.    
  26. authentication {  
  27.         auth_type PASS  
  28.         auth_pass 1111  
  29. }  
  30.    
  31. virtual_ipaddress {  
  32.         192.168.1.128 dev eth0 label eth0:1  
  33. }  
  34. }  
  35.    
  36. virtual_server 192.168.1.128 3306 {  
  37.         delay_loop 6  
  38.         lb_algo rr  
  39.         lb_kind DR  
  40.         persistence_timeout 20  
  41.         protocol TCP  
  42.         sorry_server 192.168.1.115 3306  
  43.         real_server 192.168.1.116 3306 {  
  44.         weight 3  
  45.         TCP_CHECK {  
  46.         connect_timeout 3  
  47.         nb_get_retry 3  
  48.         delay_before_retry 3  
  49.         connect_port 3306  
  50. }  
  51. }  
  52. }  
  53.       


     在EVEN:
   
     大部分都和 ODD 一样、只有 2 处:
   
     ● state BACKUP
   
     ● priority 150


   
   ⑹ ODD EVEN 的 realsever 配置
   
     在 ODD EVEN 上


[plain]  view plain copy print ?
  1. #!/bin/bash  
  2. # description: Config realserver lo and apply noarp  
  3.    
  4. SNS_VIP=192.168.1.128  
  5. /etc/rc.d/init.d/functions  
  6. case "$1" in  
  7.    
  8. start)  
  9.        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP  
  10.        /sbin/route add -host $SNS_VIP dev lo:0  
  11.        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  12.        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  13.        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  14.        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
  15.        sysctl -p >/dev/null 2>&1  
  16.        echo "RealServer Start OK"  
  17.        ;;  
  18.    
  19. stop)  
  20.        ifconfig lo:0 down  
  21.        route del $SNS_VIP >/dev/null 2>&1  
  22.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  23.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  24.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  25.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
  26.        echo "RealServer Stoped"  
  27.        ;;  
  28.    
  29. *)  
  30.    
  31.        echo "Usage: $0 {start|stop}"  
  32.        exit 1  
  33. esac  
  34. exit 0  



   ⑺ 启动 KeepAlived和 realsever
   
      在 ODD EVEN
   
      # /etc/rc.d/init.d/realserver.sh start
      # /etc/rc.d/init.d/keepalived start
      # echo “/etc/rc.d/init.d/realserver.sh start” >> /etc/rc.local
      # echo “/etc/rc.d/init.d/keepalived start” >> /etc/rc.local
     
   配置到这边大概都已经差不多了、接下来看看测试
   
   
   
   
㈥ 简单测试
   
      停掉ODD MySQL Server 、看看能否自动却换到 sorry_server


[plain]  view plain copy print ?
  1. 停止前:  
  2.   
  3. [root@odd keepalived]# ipvsadm -ln  
  4. IP Virtual Server version 1.2.1 (size=4096)  
  5. Prot LocalAddress:Port Scheduler Flags  
  6.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  7. TCP  192.168.1.128:3306 rr persistent 20  
  8.   -> 192.168.1.116:3306           Local   3      0          0         
  9.     
  10. 停止:  
  11.   
  12. [mysql@odd ~]$ mysqladmin shutdown  
  13. 130508 00:53:50 mysqld_safe mysqld from pid file /home/mysql/mysql/data/odd.example.com.pid ended  
  14. [1]+  Done                    mysqld_safe  
  15.   
  16. 停止后:  
  17.   
  18. [root@odd keepalived]# ipvsadm -ln  
  19. IP Virtual Server version 1.2.1 (size=4096)  
  20. Prot LocalAddress:Port Scheduler Flags  
  21.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  22. TCP  192.168.1.128:3306 rr persistent 20  
  23.   -> 192.168.1.115:3306           Route   1      0          0          
  24.     
  25. 成功!!  
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
4月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
398 3
Mysql高可用架构方案
|
2天前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
11 3
|
2天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
23天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
3月前
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
428 4
|
4月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
218 2
【赵渝强老师】MySQL的体系架构
|
3月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
4月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
217 3
|
4天前
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
LVS,软负载均衡