热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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 + KeepAlived + LVS 单点写入主主同步高可用架构



   ㈤ 部署步骤
   
   ⑴ 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 plaincopyprint?
  1. global_defs {  
  2.    
  3. notification_email {  
  4.                [email protected]  
  5.         }  
  6.         notification_email_from [email protected]  
  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 plaincopyprint?
  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 plaincopyprint?
  1. 停止前:  
  2.   
  3. [[email protected] 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. [[email protected] ~]$ 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. [[email protected] 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. 成功!!  

推荐阅读
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
author-avatar
攸攸慢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有