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

时间:2022-09-21 18:51:44
分类: MySQL 架构设计 2013-05-08 01:40
5361人阅读 评论(8)
收藏
举报

㈠ 实战环境

服务器名· 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

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

在EVEN:

   

     大部分都和 ODD 一样、只有 2 处:

   

     ● state BACKUP

   

     ● priority 150

⑹ ODD EVEN 的 realsever 配置

   

     在 ODD EVEN 上

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

  1. 停止前:
  2. [root@odd keepalived]# ipvsadm -ln
  3. IP Virtual Server version 1.2.1 (size=4096)
  4. Prot LocalAddress:Port Scheduler Flags
  5. -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  6. TCP  192.168.1.128:3306 rr persistent 20
  7. -> 192.168.1.116:3306           Local   3      0          0
  8. 停止:
  9. [mysql@odd ~]$ mysqladmin shutdown
  10. 130508 00:53:50 mysqld_safe mysqld from pid file /home/mysql/mysql/data/odd.example.com.pid ended
  11. [1]+  Done                    mysqld_safe
  12. 停止后:
  13. [root@odd keepalived]# ipvsadm -ln
  14. IP Virtual Server version 1.2.1 (size=4096)
  15. Prot LocalAddress:Port Scheduler Flags
  16. -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  17. TCP  192.168.1.128:3306 rr persistent 20
  18. -> 192.168.1.115:3306           Route   1      0          0
  19. 成功!!

5
0
主题推荐
架构
mysql 数据库服务器 负载均衡 数据库
猜你在找
LINUX EVAL命令
SLF4J 简单日志门面 介绍和使用
在mysql的replicatin环境中masterslave常用参数
mysq的主从复制备份还原
利用Haffman 算法实现对ascii字符文件的压缩
discuz X3数据库表结构
set global sql_slave_skip_counter1
GlusterFS RAID1+RAID0方式的搭建replicate与unify混用
mysql做主从复制成功配置案例
varnish配置