易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 5328|回复: 0
收起左侧

HAproxy+keepalived+mysql高可用性Linux系统集群

[复制链接]
发表于 2016-10-18 16:16:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x

最近用HAproxy+keepalived+mysql复制测试高可用性Linux系统集群。( w8 g% U8 I# Z! w7 _
  HAProxy是一款免费的提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
& D1 X" n- x8 R6 a6 d  L- l: a  Keepalived主要作用是LoadBalance master和LoadBalance backup之间的健康检查,实现故障转换。
4 d9 P5 F, c, _( v" \  Mysql Replication主要作用是提高mysql并处理数据的能力以及实现容灾备份的作用。

项目拓扑图:


( Z  \* x! J- G4 a7 n9 v                               
登录/注册后可看大图

Haproxy服务器及其IP地址规划:


+ [! C1 \& h, |) U$ M: F                               
登录/注册后可看大图

项目实施:

1.Mysql主从复制配置。

9 ^$ ~. a6 P0 H
1)在master服务器上创建mysql用户(授权复制账户)。grant replication slave on *.* to'rep'@'192.168.1.244'identified by 'rep123';2)编辑master服务器的mysql配置文件my.cnf。server-id= 1 //指定服务器的IDlog-bin = mysql-bin //开启二进制日志binlog-ignore = mysql //忽略mysql和information_schema 数据库binlog-ignore = information_schemabinlog-do-db = blog    //同步数据库,默认同步所有数据库3)查看master状态。mysql> show master status;+---------------+----------+--------------+--------------------------+| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB         |+---------------+----------+--------------+--------------------------+| binlog.022343 |   339244 | blog         | mysql,information_schema |+---------------+----------+--------------+--------------------------+1 row inset(0.00 sec)4)在slave端创建数据库blog,导出master端的blog库,导入到此库,并修改mysql主配置文件my.cnf server-id= 2 重启mysql数据库。mysql> change master to-> master_host='192.168.1.243',-> master_port=3306,-> master_user='rep',-> master_password='rep123',-> master_log_file='binlog.022343',-> master_log_pos=339244;5)mysql主从同步测试,show slave status\G;能看到Slave_IO_Running和Slave_SQL_Running都为YES即可。mysql> show slave status\G;*************************** 1. row ***************************Slave_IO_State: Waiting formaster to send eventMaster_Host: 192.168.1.243Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: binlog.022343Read_Master_Log_Pos: 339110Relay_Log_File: relaylog.005481Relay_Log_Pos: 339244Relay_Master_Log_File: binlog.022343Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB: mysql,test,information_schemaReplicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 339110Relay_Log_Space: 339244Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 01 row inset(0.00 sec)
7 w- e& N" E/ Y* f2 L  i

2.Haproxy安装及其配置,master和backup安装配置都是完全一样的.

( v" H% I9 }9 O: V, H9 U
wget http://haproxy.1wt.eu/download/1 ... 4.24.tar.gztar-zxvf haproxy-1.4.24.tar.gzcdhaproxy-1.4.24makeTARGET=linux26 PREFIX=/usr/local/haproxymakeinstallPREFIX=/usr/local/haproxycd/usr/local/haproxymkdirconf logs   //在此目录下面建立conf,logs目录分别存放HAproxy的配置文件,PID文件和日志文件。vim conf/haproxy.confglobalmaxconn 50000chroot /usr/local/haproxyuid 99gid 99daemonquietnbproc  2pidfile /usr/local/haproxy/logs/haproxy.pid#debugdefaultslog     globalmode    httpoption  httplog   #每次请求完毕后主动关闭http通道option  dontlognull #不记录健康检查的日志信息option forwardforoption redispatchoption abortoncloseretries 3log 127.0.0.1 local3maxconn 20000contimeout      5000clitimeout      50000srvtimeout      50000listen 192.168.1.236bind *:80mode httpstats uri /admin#后端服务器状态查看地址stats auth admin:admin             #状态查看页面登陆帐号密码balance source#调度算法,source是和nginx的ip_hash同理,解决session问题option httpcloseoption forwardforserver web1 192.168.1.248:80 weight 5 check inter 2000 rise 2 fall 5server web2 192.168.1.249:8080 weight 5 check inter 2000 rise 2 fall 5#启动Haproxy服务/usr/local/haproxy/sbin/haproxy-f haproxy.conf#haproxy启动脚本#!/bin/bashBASE_DIR="/usr/local/haproxy"ARGV="$@"start(){echo"START HAPoxy SERVERS"$BASE_DIR/sbin/haproxy-f $BASE_DIR/conf/haproxy.conf}stop(){echo"STOP HAPoxy Listen"kill-TTOU $(cat$BASE_DIR/logs/haproxy.pid)echo"STOP HAPoxy process"kill-USR1 $(cat$BASE_DIR/logs/haproxy.pid)}case$ARGV instart)startERROR=$?;;stop)stopERROR=$?;;restart)stopstartERROR=$?;;*)echo"hactl.sh [start|restart|stop]"esacexit$ERROR) j1 m. ?4 ?$ k+ j* j6 X% w

3.Haproxy开启系统日志支持。


2 t7 t% R- z+ s: d+ Xvim /etc/syslog.conf#添加:local3.*        /var/log/haproxy.loglocal0.*        /var/log/haproxy.logvim /etc/sysconfig/syslog#修改:SYSLOGD_OPTIONS="-r -m 0"#重新启动syslog服务/etc/init.d/syslogrestart( B( j: e7 f' [' x

4.Keepalived的安装配置。


" ]5 u) u- f; a6 h, P( }8 O2 Qwget http://www.keepalived.org/software/keepalived-1.2.5.tar.gzln-s /usr/src/kernels/2.6.18-164.el5-x86_64/ /usr/src/linuxtar-zxvf keepalived-1.2.5.tar.gzcdkeepalived-1.2.5./configure--prefix=/usr/local/keepalivedmake&& makeinstallcpkeepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalivedchmod+x /etc/init.d/keepalivedcpkeepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalivedchkconfig --add keepalivedchkconfig --level 35 keepalived oncp/usr/local/keepalived/sbin/keepalived/bin/mkdir-p /etc/keepalivedcp/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/#Haproxy master配置文件vim /etc/keepalived/keepalived.conf! Configuration File forkeepalivedglobal_defs {notification_email {shifeng_zhang88@163.com}notification_email_from shifeng_zhang88@163.comsmtp_server smtp.163.comsmtp_connect_timeout 30router_id LVS_Master}vrrp_script chk_http_port {script  "/etc/keepalived/check_haproxy.sh"interval        5       #脚本执行间隔weight         -5       #执行脚本后优先级变更:5表示优先级+5;-5则表示优先级-5}vrrp_instance VI_A {state MASTERinterface eth0virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_pass sfzhang1109}track_script {chk_http_port}virtual_ipaddress {192.168.1.236    #haproxy虚拟IP}}#Haproxy backup配置文件只需改变state和priority的值state BACKUPpriority 50#启动keepalived服务/etc/init.d/keepalivedstart- y* n& c/ H1 S' K- m0 o; }2 `: g

5.编辑check_haproxy.sh脚本,需要将haproxy启动脚本放到/etc/init.d/里面。


/ H' w; ]- k) ?2 O, S( bvim /etc/keepalived/check_haproxy.sh#!/bin/bashA=`ps-C haproxy --no-header |wc-l`if[ $A -eq0 ];then/etc/init.d/haproxyrestartecho"Start haproxy"&> /dev/nullsleep3if[ `ps-C haproxy --no-header |wc-l` -eq0 ];then/etc/init.d/keepalivedstopecho"Stop keepalived"&> /dev/nullfifi#chomd +x /etc/keepalived/check_haproxy.sh/ h4 w8 p% \4 @& r& T

6.Haproxy+Keepalived高可用性测试。

1)Haproxy+Keepalived 高可用测试。
7 l- c8 S" [) c4 O) B3 d/ S- ?

  测试方法:停止master的keepalived服务,查看备用的keepalived的日志发现当主节点宕机时,备用节点角色会立即变为主节点,启用VIPS协议,并把VIP地址立刻绑定到eth0网卡上面,当主节点恢复时则做相反的工作。

: J' o! ~1 L9 W' K7 d; k1 ]
                               
登录/注册后可看大图

1 J; H8 w5 {# }% d* k# R. c1 D

7 y: w  K8 k0 M

2)Haproxy+Keepalived负载均衡测试

  测试方法:当客户端访问VIP的时候,haproxy根据设置的调度算法和权重把访问请求分发到后端的WEB服务器上面,从而实现了负载均衡的功能。

3)Haproxy+Keepalived 故障转移测试

2 g$ C& v  e3 P2 D! U3 |
6 A' a' W" j$ W6 r+ w+ w

  测试方法:当后端的WEB服务器down机时,haproxy会自动检测到并把请求发送到正常的服务器上面,通过haproxy监控页面(http://192.168.1.235/admin)可以查看。

& {  |6 |* a0 h8 q" [  R2 B
                               
登录/注册后可看大图

   说明:(希望大家提出宝贵的意见)

     1)拓扑图只是项目的一个雏形,后期还要添加监控服务器和邮件等服务器。

     2)Mysql主库负责用户数据的写入,slave负责用户数据的读取和数据的备份等,除了要监控mysql主从外还要监控Seconds_Behind_Master选项,以免产生主从数据不同步或者延时。

     3)当WEB的负载很大的时候,可以在haproxy添加多台物理机即可,并考虑把项目的图片分离出来做成单独的图片服务器。

  T3 V' i: A) `! u4 D  h
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:34 , Processed in 0.046084 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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