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

[经验分享] keepalived + haproxy + mysql 构建高可用数据库

[复制链接]

尚未签到

发表于 2018-9-27 11:08:43 | 显示全部楼层 |阅读模式
  keepalived + haproxy + mysql 构建高可用
  1、keepalived 的高可用是主备,有一台作为备用
  2、keepalived + haproxy 搭建的高可用是可以两台都会调度的高可用
  拓扑图:
DSC0000.jpg

  keepalived:负责抢占虚拟ip,使用vrrp协议
  haproxy:负责做访问调度,减轻单点压力,单独监听一个端口,这里用23306
  1.安装mysql
  分别在两台机器上面搭建mysql,并做主从配置,这里不做介绍
  2.搭建haproxy
  1、download 源码包,下载地址:http://www.haproxy.org/#down
  2、在81.128和81.129解压缩安装
  tar xf haproxy-1.8.4.tar.gz
  cd haproxy-1.8.4
  yum install -y gcc
  make TARGET=linux310 ARCH=x86_64       # uname -a查看主机信息填写
  make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/
  3、提供启动脚本
  

#!/bin/sh  
#
  
# haproxy
  
#
  
# chkconfig:   - 85 15

  
# description:  HAProxy is a free, very fast and>  
#               offering high availability, load balancing, and \
  
#               proxying for TCP and  HTTP-based applications
  
# processname: haproxy
  
# config:      /etc/haproxy/haproxy.cfg
  
# pidfile:     /var/run/haproxy.pid
  

  
# Source function library.
  
. /etc/rc.d/init.d/functions
  

  
# Source networking configuration.
  
. /etc/sysconfig/network
  

  
# Check that networking is up.
  
[ "$NETWORKING" = "no" ] && exit 0
  

  
exec="/usr/sbin/haproxy"
  
prog=$(basename $exec)
  

  
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
  

  
cfgfile=/etc/haproxy/haproxy.cfg
  
pidfile=/var/run/haproxy.pid
  
lockfile=/var/lock/subsys/haproxy
  

  
check() {
  $exec -c -V -f $cfgfile $OPTIONS
  
}
  

  
start() {
  $exec -c -q -f $cfgfile $OPTIONS
  if [ $? -ne 0 ]; then
  echo "Errors in configuration file, check with $prog check."
  return 1
  fi
  

  echo -n $"Starting $prog: "
  # start it up here, usually something like "daemon $exec"
  daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
  return $retval
  
}
  

  
stop() {
  echo -n $"Stopping $prog: "
  # stop it here, often "killproc $prog"
  killproc $prog
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
  return $retval
  
}
  

  
restart() {
  $exec -c -q -f $cfgfile $OPTIONS
  if [ $? -ne 0 ]; then
  echo "Errors in configuration file, check with $prog check."
  return 1
  fi
  stop
  start
  
}
  

  
reload() {
  $exec -c -q -f $cfgfile $OPTIONS
  if [ $? -ne 0 ]; then
  echo "Errors in configuration file, check with $prog check."
  return 1
  fi
  echo -n $"Reloading $prog: "
  $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
  retval=$?
  echo
  return $retval
  
}
  

  
force_reload() {
  restart
  
}
  

  
fdr_status() {
  status $prog
  
}
  

  
case "$1" in
  start|stop|restart|reload)
  $1
  ;;
  force-reload)
  force_reload
  ;;
  check)
  check
  ;;
  status)
  fdr_status
  ;;
  condrestart|try-restart)
  [ ! -f $lockfile ] || restart
  ;;
  *)
  echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
  exit 2
  
esac
  

  4、提供配置文件
  mkdir /etc/haproxy
  mkdir /var/lib/haproxy
  useradd -r haproxy
  vim /etc/haproxy/haproxy.cfg
  

global  

  log         127.0.0.1 local2
  

  chroot      /var/lib/haproxy
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  user        haproxy
  group       haproxy
  daemon
  

  stats socket /var/lib/haproxy/stats
  

  
defaults
  mode                    tcp
  log                     global
  option                  dontlognull
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 600
  

  
listen stats
  mode http
  bind :6677
  stats enable
  stats hide-version
  stats uri     /haproxyadmin?stats
  stats realm   Haproxy\ Statistics
  stats auth    admin:admin
  stats admin if TRUE
  

  
frontend  main
  bind  *:23306
  default_backend             mysql
  

  
backend mysql
  balance     leastconn
  server m1 192.168.81.128:3306 check port 3306 maxconn 300
  server m2 192.168.81.129:3306 check port 3306 maxconn 300
  

  

  5、修改日志系统
  ###Provides UDP syslog reception                //去掉下面两行注释,开启UDP监听
  $ModLoad imudp
  $UDPServerRun 514
  local2.*             /var/log/haproxy.log      //添加此行
  service rsyslog restart
  6、启动测试haproxy
  service haproxy start
  chkconfig --add haproxy
  chkconfig haproxy on
  netstat -tnlp
  mysql -P23306 -uroot -p123456 -h192.168.81.129  # 查看server_id,判断是否成功
  3.搭建keepalived
  1、download 源码包,下载地址:http://www.keepalived.org/download.html
  2、在81.128和81.129解压缩安装
  tar xf keepalived-1.2.7.tar.gz
  cd keepalived-1.2.7
  ./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/
  make && make install
  chkconfig --add keepalived
  chkconfig keepalived on
  3、提供配置文件
  vim /etc/keepalived/keepalived.conf # 两个机器配置文件不同
  

! Configuration File for keepalived  

  
global_defs {
  
notification_email {          # 忽略
  acassen@firewall.loc
  failover@firewall.loc
  sysadmin@firewall.loc
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 192.168.200.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  
}
  

  
vrrp_script chk_haproxy {
  script "/etc/keepalived/chk.sh"     # 检查haproxy的脚本
  interval 2                          # 每两秒检查一次
  
}
  

  
vrrp_instance VI_1 {
  state BACKUP                        # 定义为BACKUP节点
  nopreempt                           # 开启不抢占,另一个不写
  interface ens33
  virtual_router_id 51
  priority 100                        # 开启了不抢占,所以此处优先级必须高于另一台,另一个写99
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass abcd
  }
  virtual_ipaddress {
  192.168.81.150                  # 配置VIP
  }
  track_script {
  chk_haproxy                     # 调用检查脚本
  }
  

  notify_backup "/etc/init.d/haproxy restart"
  notify_fault "/etc/init.d/haproxy stop"
  
}
  

  

  4、创建check文件
  vim /etc/keepalived/chk.sh
  

#!/bin/bash  

  
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  /etc/init.d/keepalived stop
  
fi
  

  chmod +x /etc/keepalived/chk.sh
  service keepalived start
  5、测试
  ip addr # 查看是否绑定了虚ip
  tcpdump -nn -i ens33 vrrp   # 抓包查看
  http://192.168.81.128:6677/haproxyadmin?stats       # 通过haproxy查看状态



运维网声明 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-602736-1-1.html 上篇帖子: Mysql 5.7.17 编译安装 下篇帖子: MySQL主主互备结合keepalived实现高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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