mysql+haproxy+keepalive实现读在salve的负载均衡

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wll_1017/article/details/83652761

 

Keepalive 安装

下载地址:http://www.keepalived.org/download.html

(1)解压缩软件

[root@plvskygis01 tmp]# tar zxf keepalived-2.0.6.tar.gz

[root@plvskygis01 tmp]# cd keepalived-2.0.6

[root@plvskygis01 keepalived-2.0.8]# pwd

/tmp/keepalived-2.0.6

(2)依赖包的安装

[root@plvskygis01 keepalived-2.0.6]#  yum install openssl openssl-devel

[root@plvskygis01 keepalived-2.0.6]# yum install -y libnfnetlink-devel

[root@plvskygis01 keepalived-2.0.6]# yum install gcc libnl3-devel net-snmp-devel

 

(3)安装keepalive软件

[root@plvskygis01]#./configure --with-init=SYSV --prefix=/usr/local/keepalived

[root@plvskygis01]#make &make install

(4)整理管理文件:

 [root@plvskygis01]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

[root@plvskygis01]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

[root@plvskygis01]#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

[root@plvskygis01]#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d

[root@phapxykdgis01 haproxy]# chmod +x /etc/init.d/keepalived

[root@plvskygis01 ]# chkconfig  keepalived on

[root@plvskygis01 ]# mkdir /etc/keepalived

[root@plvskygis01]#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

 

(5)修改配置文件

keepalive 主节点配置文件

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
!   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_haproxy {
  script "/etc/keepalived/check_haproxy.sh"
  interval 5
  weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 220
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
      unicast_peer {
    172.17.117.13
    172.17.117.14
  }
    virtual_ipaddress {
        172.17.117.31
    }
track_script {
     check_haproxy
    }
  notify "/etc/keepalived/notify.sh"

}

keepalive备节点配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
!   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_script check_haproxy {
  script "/etc/keepalived/check_haproxy.sh"
  interval 5
  weight 2

}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 220
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
       unicast_peer {
    172.17.117.13
    172.17.117.14
  }
    virtual_ipaddress {
        172.17.117.31
    }


track_script {
     check_haproxy
    }
    notify_master "/etc/keepalived/notify.sh"  
}
 

 cat check_haproxy.sh 
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ]
        then service haproxy start
        sleep 3
        if [ `ps -C haproxy --no-header | wc -l ` -eq 0 ]
                then service keepalived stop
        fi
fi


cat notify.sh 
#!/bin/bash

# for ANY state transition.
# "notify" script is called AFTER the
# notify_* script(s) and is executed
# with 3 arguments provided by keepalived
# (ie don't include parameters in the notify line).
# arguments
# $1 = "GROUP"|"INSTANCE"
# $2 = name of group or instance
# $3 = target state of transition
#     ("MASTER"|"BACKUP"|"FAULT")

TYPE=$1
NAME=$2
STATE=$3

case $STATE in
        "MASTER") echo "I'm the MASTER! Whup whup." > /usr/local/keepalived/log/keepalive.log 
                  exit 0
                  ;;
        "BACKUP") echo "Ok, i'm just a backup, great." > /usr/local/keepalived/log/keepalive.log
                  exit 0
                  ;;
        "FAULT")  echo "Fault, what ?" > /usr/local/keepalived/log/keepalive.log
                  exit 0
                  ;;
        *)        echo "Unknown state" > /usr/local/keepalived/log/keepalive.log
                  exit 1
                  ;;
esac

(6)Keepalive 日志的配置

修改日志存放的位置

cat /etc/rsyslog.conf

添加

local0.*                                             /usr/local/keepalived/log/keepalive.log

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D"

改为

KEEPALIVED_OPTIONS="-D -S 0"

(7)启动keepalive

[root@plvskygis01 keepalived]# service keepalived start       

Starting keepalived:                                       [  OK  ]

 

 

 

Hapoxy 安装

(1)安装haproxy 软件

[root@plvskygis01 haproxy-1.8.14]# uname -a

Linux plvskygis01 2.6.32-642.el6.x86_64 #1 SMP Wed Apr 13 00:51:26 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

(2)编译软件

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy

其中TARGET表示OS的内核版本,ARCH表示OS的位数,PREFIX表示haprxoy的安装路径。

make install PREFIX=/usr/local/haproxy

(3)编译完后,会在/usr/local/haproxy下产生文件

[root@plvskygis01 haproxy]# ll

total 12

drwxr-xr-x 3 root root 4096 Oct 26 15:08 doc

drwxr-xr-x 2 root root 4096 Oct 26 15:08 sbin

drwxr-xr-x 3 root root 4096 Oct 26 15:08 share

(4)创建用户

[root@plvskygis01 haproxy]# useradd haproxy

(5)haproxy 参数文件配置

 cat /etc/haproxy/haproxy.cfg

global

    log         127.0.0.1 local2

    chroot        /usr/local/haproxy

    pidfile         /var/run/haproxy.pid

    maxconn      4000

    user           haproxy

    group         haproxy

    daemon

    stats socket /usr/local/haproxy/stats

defaults

    mode                    tcp

    log                     global

    log                    127.0.0.1 local2

   option                  dontlognull

    option                  redispatch

    option                  abortonclose

    retries                 3

    timeout http-request    10s

    timeout queue           1m

    timeout connect         10s

    timeout client          20m

    timeout server          20m

    timeout http-keep-alive 10s

    timeout check           10s

    maxconn                 600

listen stats

    mode http

    bind  *:8080

    stats enable

    stats hide-version

    stats uri /haproxy-stats

    stats realm Haproxy\ Statistics

    stats auth admin:admin

    stats admin if TRUE

    stats refresh 30s

    option forwardfor

#    default_backend             mysql  

listen mysql

    bind  172.17.103.20:11856

    mode tcp

    balance roundrobin

    #balance     leastconn             

     server ss2 172.17.103.27:3306 check port 3306 maxconn 500 rise 3 fall 3

     server ss3 172.17.103.28:3306 check port 3306 maxconn 500  rise 3 fall 3

     server ss4 172.17.103.29:3306 check port 3306 maxconn 500  rise 3 fall 3

option forwardfor              
#如果后端服务器需要获得客户端真实ip需要配置的参数,必须要放在listen模块下 mode必须是mode http

检测文件内容是否正常

 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg  -c     

Configuration file is valid

(6)启动服务

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

(7)设置启动服务

[root@plvskygis01 examples]# cp haproxy.init  /etc/rc.d/init.d/

[root@plvskygis01 examples]#mv /etc/init.d/haproxy.init /etc/init.d/haproxy

[root@plvskygis02 examples]# chmod +x /etc/rc.d/init.d/haproxy

[root@plvskygis01 ]#vi  /etc/init.d/haproxy

改成

BIN=/usr/local/haproxy/sbin/$BASENAME

或者cp /usr/local/haproxy/sbin/haproxy  /usr/sbin/haproxy

(8)设置参数

[root@phapxykygis01 ~]# cat /etc/sysctl.conf

net.ipv4.ip_forward = 1
开启IP转发功能

net.ipv4.ip_nonlocal_bind = 1
开启允许绑定非本机的IP

(8)Haproxy 日志配置

vi haproxy.conf(在default处添加如下信息)
defaults
log global
option httplog
log 127.0.0.1 local2

vi /etc/rsyslog.conf(添加如下内容)

#由于haproxy的日志是用udp传输的,所以要启用rsyslogudp监听

$ModLoad imudp

$UDPServerRun 514
local2.*                                                /usr/local/haproxy/log/haproxy.log

vi /etc/sysconfig/rsyslog

把SYSLOGD_OPTIONS="-m 0"
改成 SYSLOGD_OPTIONS="-r -m 0 -c 2"

 

相关解释说明:
-r:打开接受外来日志消息的功能,其监控514 UDP端口;
-x:关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
-m:修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次"--MARK--"信息;
-h:默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有
接受到的信息都可根据syslog.conf中定义的@主机转发过去

配置完毕后重启rsyslogd和haproxy即可.

###重启服务

systemctl restart haproxy

service rsyslog restart

 

测试mysql代理转发功能

/mysql/mysql5635/bin/mysql  -uchecksums -pchecksums -h172.17.103.20 -P11851 -e' select @@port';

猜你喜欢

转载自blog.csdn.net/wll_1017/article/details/83652761
今日推荐