设为首页 收藏本站
查看: 1866|回复: 0

[经验分享] mysql Lvs+Keepalived+Mysql单点写入主主同步

[复制链接]

尚未签到

发表于 2015-11-20 09:38:43 | 显示全部楼层 |阅读模式
    Lvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案
  1.1  方案简介
  Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入,本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求,读负载均衡通过lvs实现,读能自由的实现负载均衡和故障切换。本方案实现的功能是当网络有问题、mysql有问题、服务器宕机、keepalived服务停止后,服务器能自动跳转到备用机,当主服务器服务启动起来后会自动切换回来。
  1.2  方案架构图
DSC0000.jpg
  1.3  方案优缺点
  优点:
  ü  实现方便,高可用效率好,可以根据服务与系统的可用性多方面进行切换。
  ü  可以将写VIP和读VIP分别进行设置,为读写分离做准备。
  ü  扩展很方便。可以在后面添加多个从服务器,并做到负载均衡。
  缺点:
  ü  在启动或者恢复后会立即替换掉定义的sorry_server,因此如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改mysql的端口等。
  ü  安装配置比单写入稍微复杂,需要另外一个VIP。管理比单写入复杂。
  ü  主切换后从需要手工切换。
  ü  切换需要1s左右的时间。
  
  1.4  适用场景
  这个方案适用于只有两台数据库服务器(后端有多个从服务器也是可以的,只是要手工切换从服务器比较麻烦,后面会介绍的MMM能将从服务器自动切换)并且还能实现数据库的读写分离的情况,这样backup机器也能用起来,提高系统资源的利用率,减少master端的负载。应用中读数据库配置读VIP,写数据库配置写VIP。这个方案也能够很方便的进行单台数据库的管理维护以及切换工作。比如进行大表的表结构更改、数据库的升级等都是非常方便的。
  1.5  方案实战
  1.5.1 实战环境介绍
  服务器名
  IP
  VIP
  系统
  Mysql
  Master
  10.1.1.113
  10.1.1.176
10.1.1.177
  Centos 5.5 64bit
  5.1.63
  Backup
  10.1.1.75
  10.1.1.176
10.1.1.177
  Centos 5.5 64bit
  5.1.63
  
  1.5.2 Mysql的安装和配置
  Mysql的安装和配置相对来讲非常简单,这里就不做介绍,有兴趣的朋友可以查看我博客中关于mysql 5.1.63版本自动安装的文章http://blog.iyunv.com/uid-20639775-id-3168737.html
  1.5.3 Mysql的主主同步配置
  Mysql的主主同步这里也不做介绍了,有兴趣的话可以看一下我博文中关于mysql主从同步管理的介绍,主主同步和主从同步差不多,只是互为主从而已,链接如下:http://blog.iyunv.com/uid-20639775-id-3254611.html
  1.5.4 Lvs的安装
  在master、backup服务器都进行安装:
  wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux
  tar zxvf ipvsadm-1.24.tar.gz
  cd ipvsadm-1.24
  make && make install
  1.5.5 Keepalived的安装
  在master、backup服务器都进行安装:
  wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
tar zxvf 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
  1.5.6 Keepalived的配置
  1.5.6.1   Master的keepalived的配置
  Master和backup不一样的地方已经标记为红色
  vim /etc/keepalived/keepalived.conf
  global_defs {
  
  notification_email {
  zhangxy@test.com
  }
  notification_email_from jiankong@test.com
  smtp_server mail.test.com
  smtp_connect_timeout 30
  router_id LVS1
  }
  
  vrrp_sync_group test {
  group {
  loadbalance
  }
  }
  
  vrrp_instance loadbalance {
   state MASTER
  interface eth0
  lvs_sync_daemon_inteface eth0
  virtual_router_id 51
  priority 180
  advert_int 1
  
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  
  virtual_ipaddress {
  10.1.1.176 dev eth0 label eth0:1
  10.1.1.177 dev eth0 label eth0:2
  }
  }
  
  virtual_server 10.1.1.176 3306 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  persistence_timeout 20
  protocol TCP
  sorry_server 10.1.1.75 3306
  real_server 10.1.1.113 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
  
  virtual_server 10.1.1.177 3306 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  #persistence_timeout 20
  protocol TCP
  real_server 10.1.1.113 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  real_server 10.1.1.75 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
  1.5.6.2   Backup的keepalived的配置
  Master和backup不一样的地方已经标记为红色
  vim /etc/keepalived/keepalived.conf
  global_defs {
  
  notification_email {
  zhangxy@test.com
  }
  notification_email_from jiankong@test.com
  smtp_server mail.test.com
  smtp_connect_timeout 30
  router_id LVS1
  }
  
  vrrp_sync_group test {
  group {
  loadbalance
  }
  }
  
  vrrp_instance loadbalance {
  state BACKUP
  interface eth0
  lvs_sync_daemon_inteface eth0
  virtual_router_id 51
   priority 150
  advert_int 1
  
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  
  virtual_ipaddress {
  10.1.1.176 dev eth0 label eth0:1
  10.1.1.177 dev eth0 label eth0:2
  }
  }
  
  virtual_server 10.1.1.176 3306 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  persistence_timeout 20
  protocol TCP
  sorry_server 10.1.1.75 3306
  real_server 10.1.1.113 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
  
  virtual_server 10.1.1.177 3306 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  persistence_timeout 20
  protocol TCP
  real_server 10.1.1.113 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  real_server 10.1.1.75 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
  1.5.7 Master和backup的realserver的配置
  对于realserver的配置master和backup是一致的,脚本内容如下:
  vim /etc/rc.d/init.d/realserver.sh
  #!/bin/bash
  # description: Config realserver lo and apply noarp
  
  SNS_VIP=10.1.1.176
  SNS_VIP2=10.1.1.177
  /etc/rc.d/init.d/functions
  case "$1" in
  
  start)
  ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  ifconfig lo:1 $SNS_VIP2 netmask 255.255.255.255 broadcast $SNS_VIP2
  /sbin/route add -host $SNS_VIP dev lo:0
  /sbin/route add -host $SNS_VIP2 dev lo:1
  echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p >/dev/null 2>&1
  echo "RealServer Start OK"
  ;;
  
  stop)
  ifconfig lo:0 down
  ifconfig lo:1 down
  route del $SNS_VIP >/dev/null 2>&1
  route del $SNS_VIP2 >/dev/null 2>&1
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "RealServer Stoped"
  ;;
  
  *)
  
  echo "Usage: $0 {start|stop}"
  exit 1
  esac
  exit 0
  1.5.8 Master和backup的启动
  启动master和backup的mysql以后,再在master和backup执行如下命令启动keepalived和realserver脚本:
  /etc/rc.d/init.d/realserver.sh start
  /etc/rc.d/init.d/keepalived start
  并将keepalived和realserver的启动脚本加入到rc.local自启动中:
  echo “/etc/rc.d/init.d/realserver.sh start” >> /etc/rc.local
  echo “/etc/rc.d/init.d/keepalived start” >> /etc/rc.local
  1.5.9 高可用方案测试
  方案搭建好以后就要进行全方位的可靠性测试了,看看是否达到了我们的预期效果,大致测试步骤如下:
  ü  停掉master上的mysql,看看能写IP否自动切换到sorry_server,看看读IP是否去掉了master的mysql,使用如下命令查看:ipvsadm –ln。
  ü  停掉master上的keepalived,看读写VIP是否会迁移到backup上。
  ü  启动master上的mysql,看是否能切换回master。
  ü  启动master上的keepalived,看VIP是否会迁移回master上。
  ü  重启master的系统,看看切换过程是否OK

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141377-1-1.html 上篇帖子: 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡 下篇帖子: [高可用]Ubuntu下Haproxy + Keepalived 实现SuperMap iServer高可用负载均衡实现(1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表