keepalived高可用系列~keepalived+mysql

时间:2024-01-19 22:22:56

一 简介:建立读写分离模式

二 keepalived相关配置

vrrp_instance VI_1 {
  state MASTER  // 可修改
  interface eth0
  virtual_router_id //两边必须一样
  priority 100     //主比从高
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 123456
  }
  virtual_ipaddress {
  VIP/24
  }
  }

virtual_server VIP 3306 {
 delay_loop 10
 lb_kind DR
 nat_mask 255.255.255.0
 protocol TCP

real_server REL-IP 3306 {
 weight 1
 TCP_CHECK {
 connect_port 3306
 connect_timeout 10
 nb_get_retry 3
 delay_before_retry 5
 } 
 MISC_CHECK {
 misc_path "/etc/keepalived/check_mysql.sh"//检测脚本
 misc_dynamic
 }
 }

三 mysql监控脚本

实现功能 1 检测mysql down+slave stop

#!/bin/sh

function sql_sqlthread()
  {
  STATUS=`/usr/local/mysql/bin/mysql -S /tmp/mysql.sock -uroot -ppassword -e "show slave status\G"| grep Running`
  IO_env=`echo $STATUS | grep IO | awk -F " " '{print $2}'`
  SQL_env=`echo $STATUS | grep IO | awk -F " " '{print $4}'`
  if [ "$IO_env" == "No" ] || [ "$SQL_env" == "No" ];then
  /etc/init.d/keepalived stop
  exit 1;
  else
  echo "nihao";
  fi
  }
  function mysql_test()
  {
  STATUS=`/usr/local/mysql/bin/mysqladmin -ppassword -S /tmp/mysql.sock ping | awk '{print $3}'`
  if [ "$STATUS" == "alive" ];then
  echo "nihao"
  sql_sqlthread
  else
  /etc/init.d/keepalived stop
  exit 1;
  fi

}
 mysql_test

四 进行测试

五 总结

架构优势

1 节省机器,直接在从库进行高可用读,当MHA进行切换到新主后或者复制进程发生错误时,进行切换

2 采用中间层lvs+keepalived 后端负载mysql从库虽然可以实现负载均衡,但是有一个问题,DR模式需要同一网段,如果数据库机器都在不同网段,那么所需要的lvs专门机器会越来越多

3 采用中间件问题会有2个问题 1 性能损耗 2中间件稳定性

架构缺点

1 只能单台从库读,不能实现负载均衡 原因有几点 1 另一台从库为研发服务和做一些备份工作 2 当MHA切换时 不能把读的压力给新主

2 在从库都发生周期性延迟后不能将读转向主库,但是很遗憾,这种的工作基本只能靠中间件这样的完成,所以我们的读写分离业务目标是可以忍受延迟的业务