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

[经验分享] 通过lvs+heartbeat实现对mysql的负载均衡高可用

[复制链接]

尚未签到

发表于 2019-1-6 07:39:00 | 显示全部楼层 |阅读模式
  1、摘要
  本文主要通过lvs+heartbeat实现对mysql的负载均衡高可用。
  keepalived是基于主机或网络服务的高可用方式,目的是用户service的双机。
  

  2、安装
  1)、软件包准备
  ipvsadm-1.26.tar.gz
  mysql-5.5.28.tar.gz
  cmake-2.8.11.2.tar.gz
  heartbeat-2.0.8.tar.gz
  libnet-1.1.2.1.tar.gz
  

  2)、配置Director Server
  a、检查kernel是否已经支持LVS的ipvs模块
  # modprobe -l |grep ipvs
  kernel/net/netfilter/ipvs/ip_vs.ko
  kernel/net/netfilter/ipvs/ip_vs_rr.ko
  kernel/net/netfilter/ipvs/ip_vs_wrr.ko
  kernel/net/netfilter/ipvs/ip_vs_lc.ko
  kernel/net/netfilter/ipvs/ip_vs_wlc.ko
  kernel/net/netfilter/ipvs/ip_vs_lblc.ko
  kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
  kernel/net/netfilter/ipvs/ip_vs_dh.ko
  kernel/net/netfilter/ipvs/ip_vs_sh.ko
  kernel/net/netfilter/ipvs/ip_vs_sed.ko
  kernel/net/netfilter/ipvs/ip_vs_nq.ko
  kernel/net/netfilter/ipvs/ip_vs_ftp.ko
  kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
  

  b、在Director Server中安装LVS
  # ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux#解决ipvsadm找不到内核
  # yum install -y libnl*
  # yum install -y popt*
  # rpm -ivh popt-static-1.13-7.el6.x86_64.rpm#前三步是解决安装ipvsadm-1.26报错的软件包
  # tar zxvf ipvsadm-1.26.tar.gz
  # cd ipvsadm-1.26
  # make
  # make install
  # ipvsadm --help#出现ipvsadm帮助提示表示ipvsadm已经安装成功
  

  c、在Director Server中配置VIP,route、路由转发等
  vim /etc/init.d/lvsDR
  #!/bin/sh
  # description: Start LVS of Director server
  VIP=10.0.2.200
  chmod 755 /etc/rc.d/init.d/functions
  /etc/rc.d/init.d/functions
  case "$1" in
      start)
  # set the Virtual IP Address and sysctl parameter
  /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev eth0:0
  echo "1" >/proc/sys/net/ipv4/ip_forward
  ;;
      stop)
          echo "0" >/proc/sys/net/ipv4/ip_forward
  /sbin/route del -host $VIP dev eth0:0
          /sbin/ifconfig eth0:0 down
          ;;
      *)
          echo "Usage: $0 {start|stop}"
          exit 1
  esac
  # chmod 755 /etc/init.d/lvsDR
  # /etc/init.d/lvsDR start
  

  d、在Director Server中安装heartbeat
  # tar zxvf libnet-1.1.2.1.tar.gz
  # cd libnet
  # ./configure
  # make && make install
  # yum install -y libxml2 libxml2-devel bzip2-devel glib2-devel libtool-ltdl-devel libxslt-devel ncurses-devel swig
  # groupadd -g 694 haclient
  # useradd -u 694 -g haclient hacluster
  # tar zxvf heartbeat-2.0.8.tar.gz
  # cd heartbeat-2.0.8
  # ./ConfigureMe configure --enable-fatal-warnings=no --disable-swig --disable-snmp-subagent LIBS='/lib/libuuid.so.1' #如果是64为则为LIBS='/lib64/libuuid.so.1'
  # make
  # make install
  # cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
  # cp ldirectord/ldirectord.cf /etc/ha.d/
  # 在编辑安装heartbeat过程中可能出现如下错误
  错误1:
  pils.c:245: warning: initialization from incompatible pointer type
  pils.c:246: warning: initialization from incompatible pointer type
  gmake[2]: *** [pils.lo] Error 1
  gmake[2]: Leaving directory `/usr/local/src/heartbeat-2.0.4/lib/pils'
  gmake[1]: *** [all-recursive] Error 1
  gmake[1]: Leaving directory `/usr/local/src/heartbeat-2.0.4/lib'
  make: *** [all-recursive] Error 1
  参考README里的方法:gmake DESTDIR="$PWD/heartbeat-2.0.4/=inst" distcheck后出现下面的错误
  PIC -o .libs/pils.o
  ../../../lib/pils/pils.c:245: warning: initialization from incompatible pointer type
  ../../../lib/pils/pils.c:246: warning: initialization from incompatible pointer type
  gmake[3]: *** [pils.lo] Error 1
  gmake[3]: Leaving directory `/usr/local/src/heartbeat-2.0.4/heartbeat-2.0.4/_build/lib/pils'
  gmake[2]: *** [all-recursive] Error 1
  gmake[2]: Leaving directory `/usr/local/src/heartbeat-2.0.4/heartbeat-2.0.4/_build/lib'
  gmake[1]: *** [all-recursive] Error 1
  gmake[1]: Leaving directory `/usr/local/src/heartbeat-2.0.4/heartbeat-2.0.4/_build'
  gmake: *** [distcheck] Error 2
  解决办法:
  ./ConfigureMe configure --enable-fatal-warnings=no
  ./ConfigureMe make --enable-fatal-warnings=no
  用这种方法能编译了
  

  错误2:
  cc1: warningsbeing treated as errors
  pils.c:245:error: initialization fromincompatible pointer type
  pils.c:246:error: initialization fromincompatible pointer type
  gmake[2]: ***[pils.lo] Error 1
  gmake[2]:Leaving directory`/root/heartbeat-2.0.7/lib/pils'
  gmake[1]: ***[all-recursive]Error 1
  gmake[1]:Leaving directory`/root/heartbeat-2.0.7/lib'
  make: ***[all-recursive] Error 1
  解决方法将/root/heartbeat-2.0.7/lib/pils里的makefile中的所有-Werror删除
  

  错误3:
  cc1: warningsbeing treated as errors
  client_lib.c:1850:error: 'display_orderQ'defined but not used
  gmake[2]: ***[client_lib.lo]Error 1
  gmake[2]:Leaving directory`/root/heartbeat-2.0.7/lib/hbclient'
  gmake[1]: ***[all-recursive]Error 1
  gmake[1]:Leaving directory`/root/heartbeat-2.0.7/lib'
  make: ***[all-recursive] Error 1
  解决方法将/root/heartbeat-2.0.7/lib/hbclient里的makefile中的所有-Werror删除
  

  

  错误4:
  cc1: warningsbeing treated as errors
  stonith_signal.h:34:error:'stonith_signal_set_simple_handler' defined but not used
  gmake[4]: ***[apcmaster.lo]Error 1
  gmake[4]:Leaving directory`/root/heartbeat-2.0.7/lib/plugins/stonith'
  gmake[3]: ***[all-recursive]Error 1
  gmake[3]:Leaving directory`/root/heartbeat-2.0.7/lib/plugins/stonith'
  gmake[2]: ***[all-recursive]Error 1
  gmake[2]:Leaving directory`/root/heartbeat-2.0.7/lib/plugins'
  gmake[1]: ***[all-recursive]Error 1
  gmake[1]:Leaving directory`/root/heartbeat-2.0.7/lib'
  make: ***[all-recursive] Error 1
  解决方法:
  将/root/heartbeat-2.0.7/lib/plugins/stonith里的makefile中的所有-Werror删除
  

  错误5:
  cc1: warningsbeing treated as errors
  conf_lex.c:1195:Error:‘input’定义后未使用
  gmake[2]: ***[recoverymgrd-conf_lex.o]Error 1
  gmake[2]:Leaving directory`/root/heartbeat-2.0.7/telecom/recoverymgrd'
  gmake[1]: ***[all-recursive]Error 1
  gmake[1]:Leaving directory `/root/heartbeat-2.0.7/telecom'
  make: ***[all-recursive] Error 1
  解决方法:
  将/root/heartbeat-2.0.7/telecom/recoverymgrd里的makefile中的所有-Werror删除
  

  安装成功标志信息:
  结束后出现
  chown hacluster/var/lib/heartbeat/cores/hacluster
  chmod700/var/lib/heartbeat/cores/hacluster
  gmake[2]:Nothing to be done for`install-data-am'.
  gmake[2]:Leaving directory`/root/heartbeat-2.0.7'
  gmake[1]:Leaving directory`/root/heartbeat-2.0.7'
  则证明安装成功
  

  e、在Director Server中配置heartbeat
  # vim /etc/sysconfig/network-scripts/ifcfg-eth1
  DEVICE=eth1
  TYPE=Ethernet
  BOOTPROTO=none
  IPADDR=10.1.1.1
  PREFIX=24
  # service network restart
  

  # 配置主配置文件
  # mv /etc/ha.d/ha.cf /etc/ha.d/ha.cf.bak
  # vim /etc/ha.d/ha.cf
  debugfile /var/log/ha-debug
  logfile /var/log/ha-log#指名heartbeat的日志存放位置
  #crm yes#是否开启Cluster Resource Manager(集群资源管理)功能。
  bcast eth1#指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。
  keepalive 2#指定心跳间隔时间为2秒(即每两秒钟在eth1上发送一次广播)。
  deadtime 30#指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。
  warntime 10#指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
  initdead 120#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
  udpport 694#设置广播通信使用的端口,694为默认使用的端口号。
  baud 19200#设置串行通信的波特率。
  serial /dev/ttyS0#选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
  #ucast eth0 192.168.1.2#采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。
  #mcast eth0 225.0.0.1 694 1 0#采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
  auto_failback on#用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。
  #stonith baytech /etc/ha.d/conf/stonith.baytech# stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。   
  #watchdog /dev/watchdog#该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入"insmod softdog"加载该模块。然后输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc |grep watchdog"(应为130)。最后,生成设备文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能。
  node    node.1#主节点主机名,可以通过命令“uanme –n”查看。
  node    node.2#备用节点主机名。
  ping 10.0.0.254#选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。
  respawn hacluster /usr/lib/heartbeat/ipfail #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动ipfail进程的身份。如果系统为64为,那么路径为/usr/lib64/heartbeat/ipfail
  

  # 配置资源文件
  # mv /etc/ha.d/haresources /etc/ha.d/haresources.bak
  # vim /etc/ha.d/haresources#MASTER和BACKUP此文件内容必须完全一致
  node.1 IPaddr::10.0.2.200/24/eth0:0 ldirectord
  # node.1是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚步,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 10.0.2.200/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为10.0.2.200的地址,此IP为heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0:0,然后启动ldirectord服务。
  
  # 配置认证文件
  # vim /etc/ha.d/authkeys
  auth 1
  1 crc
  #2 sha1 sha1_any_password
  #3 md5 md5_any_password
  # chmod 600 /etc/ha.d/authkeys
  

  # 配置ldirectord.cf
  # mv /etc/ha.d/ldirectord.cf /etc/ha.d/ldirectord.cf.bak
  # vim /etc/ha.d/ldirectord.cf
  # Global Directives
  checktimeout=3#判定real server出错的时间间隔。
  checkinterval=1#指定ldirectord在两次检查之间的间隔时间。
  #fallback=127.0.0.1:80#当所有的real server节点不能工作时,web服务重定向的地址。
  autoreload=yes#是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。
  logfile="/var/log/ldirectord.log"#设定ldirectord日志输出文件路径。
  #logfile="local0"
  #emailalert="admin@x.y.z"
  #emailalertfreq=3600
  #emailalertstatus=all
  quiescent=yes#当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果选择为yes,当某个real server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模板仍然保留在Director上。
  #Sample configuration for a MySQL virtual service.
  virtual = 10.0.2.200:3306 #指定虚拟的IP地址和端口号,注意,在virtual行后面的行必须缩进4个空格或以一个tab字符进行标记。
  real=node.3->node.4:3306 gate 10#指定Real Server服务器地址和端口,同时设定LVS工作模式,用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
  #fallback=127.0.0.1:3306
  service=mysql#指定服务的类型,
  scheduler=rr#指定调度算法
  #persistent=600
  #netmask=255.255.255.255
  protocol=tcp#指定协议的类型
  checkport=3306#指定监控的端口号。
  checktype=connect#指定Ldirectord的检测类型
  login="mysql"
  passwd="123456"
  database="cluster"
  request="SELECT * FROM test"
  

  # 配置BACKUP节点同MASTER一样,并且设置时间同步,参考“搭建配置NTP服务器”一文
  

  # /etc/init.d/heartbeat start
  # ipvsadm #查看real server 和权值不为0
  # ifconfig #查看有没有加载eth0:0 VIP
  

  3)、配置Real Server
  a、mysql的安装以及主从配置参考“MySQL同步复制”一文
  

  b、配置vip和arp
  # vim /etc/init.d/lvsrs
  #!/bin/bash
  #description : Start Real Server
  VIP=10.0.2.200
  /etc/rc.d/init.d/functions
  case "$1" in
  start)
  echo " Start LVS  of  Real Server"
  /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev lo:0
  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
  ;;
  stop)
  /sbin/ifconfig lo:0 down
  /sbin/route del -host $VIP dev lo:0
  echo "close LVS Director server"
  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 "Usage: $0 {start|stop}"
          exit 1
  esac
  # chmod 755 /etc/init.d/lvsrs
  # /etc/init.d/lvsrs start
  

  c、配置mysql,注意要在master数据库中配置
  mysql> use mysql;
  mysql> CREATE USER 'mysql'@'localhost' IDENTIFIED BY '123456';
  mysql> grant all privileges on *.* to mysql@10.0.100.34 identified by '123456';   #允许10.0.100.34的mysql用户访问本数据库
  mysql> flush privileges;
  mysql> create database cluster;
  mysql> use cluster
  mysql> create table test(ename varchar(10));
  

  4)、测试
  略
  





运维网声明 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-659805-1-1.html 上篇帖子: 基于heartbeat v2 和 heartbeat 下篇帖子: 基于LVS+heartbeat的web负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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