当前位置: 移动技术网 > 科技>操作系统>Linux > Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)

Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)

2019年11月18日  | 移动技术网科技  | 我要评论

chengrendianshitai,雾里看花演员表,夏妍的秋天片尾曲

系统环境:ubuntu16.04(docker容器)

架构环境:

keepalived/haproxy master: 172.17.0.4

keepalived/haproxy backup: 172.17.0.6

mysql master: 172.17.0.2

mysql slave: 172.17.0.3

haproxy版本:haproxy-2.0.8.tar.gz

keepalived版本:keepalived-2.0.19.tar.gz

 

一、安装haproxy(master/backup两台都要装)

1、前往官网 下载haproxy

解压,进入haproxy-2.0.8目录

vim install;查看安装说明

 

 

2、编译安装haproxy

1)编译

报错1:bash: make: command not found

 

我直接用docker容易,make命令没安装,安装一下:

apt-get -y install make

然后执行:

make -j 2 target=generic use_gzip=1

 

报错2:/bin/sh: 1: gcc: not found

 

未安装gcc,安装gcc:

apt-get -y install gcc

然后再执行:

make -j 2 target=generic use_gzip=1

 

暂时未报错:

 

 

 

 

2)安装

直接执行:

make install prefix=/usr/local/haproxy2.0.8

 

 

3)复制命令至/usr/local/sbin/下

 

 

3、添加服务启动脚本文件

 vim /etc/init.d/haproxy

#!/bin/bash
#
# chkconfig: 2345 85 15
# descrition: haproxy loadbalancer
 
daemon=haproxy
prog_dir=/usr/local/haproxy2.0.8
retval=0
 
success() {                       #跟朋友的探讨,使用shell本身来实现;当然也可以使用for的遍历循环, 
                                    总之方法有很多种
for ((i=0;i<=5;i++))
do
sleep 0.2
echo -n "."
done
}
 
start ()
{
    prog_stat=$(netstat -tlnp | grep ${daemon})
    if [ -z "$prog_stat" ]; then
  $prog_dir/sbin/$daemon -f $prog_dir/conf/${daemon}.cfg
        echo -ne "starting ${daemon}......\t\t\t"  && success
  echo -e "\e[32m[ok]\e[0m" 
    else
        echo "$daemon is already running"
retval=65
    fi
}
 
stop ()
{
    prog_stat=$(netstat -tlnp | grep ${daemon})
    if [ -n "$prog_stat" ]; then
        echo -ne "stopping ${daemon}......\t\t\t"  && success
        prog_pid=$(cat $prog_dir/run/${daemon}.pid)
        kill $prog_pid
        echo -e "\e[32m[ok]\e[0m"
    else
        echo "$daemon is already stopped"
retval=66
    fi
}
 
restart()
{
    echo -ne "restarting ${daemon}......\t\t\t"   && success
    prog_pid=$(cat $prog_dir/run/${daemon}.pid)
    $prog_dir/sbin/$daemon -f $prog_dir/conf/${daemon}.cfg -st $prog_pid
    echo -e "\e[32m[ok]\e[0m"
}
 
status ()
{
    prog_stat=$(netstat -tlnp | grep ${daemon})
    if [ -z "$prog_stat" ]; then
        echo "${daemon} stopped"
    else
        echo "${daemon} running"
    fi
}
 
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo "usage /etc/init.d/$daemon {start | stop | restart | status}"
retval=67
esac
exit $retval

赋予执行权限:

chmod +x /etc/init.d/haproxy

 

4、添加haproxy.conf配置文件

先创建haproxy用户与组:

 

 

再创建配置文件:

mkdir -p /etc/haproxy

vim /etc/haproxy/haproxy.conf

global
    log 127.0.0.1 local2 info    # 设置日志文件输出定向,info为日志级别
    chroot /usr/local/haproxy2.0.8    # 改变当前工作目录
    pidfile /usr/local/haproxy2.0.8/run/haproxy.pid    #pid文件位置
    user haproxy    # 用户与用户组
    group haproxy
    daemon    # 守护进程启动,运维方式为后台工作
    maxconn 4000    # 最大连接数

# 作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen
defaults
        log global      #启动每个实例日志记录事件和流量
        mode http       #默认的模式mode {tcp|http|health},tcp是四层,http是七层,health只会返回ok
        retries 3       #对server的connection失败后,重试的次数
        option redispatch       #启用或禁止在连接故障情况下的会话重新分配
        maxconn 4096    #maxconn每个进程可用的最大连接数
        timeout http-request    10s
        timeout queue   1m
        timeout connect 10s
        timeout client 1m
        timeout server 1m
        timeout http-keep-alive 10s

frontend main
        bind 0.0.0.0:3307
        default_backend mysql

backend mysql
        balance leastconn    #算法:最少连接数
        server mysql1 172.17.0.2:3306 check port 3306 maxconn 300
        server mysql2 172.17.0.3:3306 check port 3306 maxconn 300

复制一份配置文件到该目录:

cp -a /etc/haproxy/haproxy.conf /usr/local/haproxy2.0.8/conf/haproxy.cfg

来启动haproxyd服务

/etc/init.d/haproxy start

 

显示服务启动成功,端口也在

 

二、安装keepalived

1、前往官网下载所需版本

同样解压,进入目录,查看安装说明文档(此处忽略)

 

2、编译扮装

1)检查环境

./configure --prefix=/usr/local/keepalived-2.0.19

 

报错1:can not include openssl headers files

 

没有openssl,执行:

apt-get -y install openssl libssl-dev

注意:redhat和centos中是需要安装openssl和openssl-devel的,在ubuntu中,openssl-devel被libssl-dev所代替,安装libssl-dev即可

再重新检查环境~

 

ok,每问题,警告忽视

 

2)编译、编译安装

make && make install

 

ok,编译安装完成

 

3、编辑配置文件

cp /usr/local/keepalived-2.0.19/etc/keepalived/keepalived.conf /etc/keepalived/  #复制配置文件

cp /usr/local/keepalived-2.0.19/sbin/keepalived /usr/local/sbin/

cp /usr/local/keepalived-2.0.19/etc/rc.d/init.d/keepalived /etc/init.d/  #复制服务启动文件

chmod +x /etc/init.d/keepalived

 

vim /etc/keepalived/keepalived.conf(master机)

! configuration file for keepalived

global_defs {
   router_id r1         #虚拟路由名称,master和backup不能一致
}

vrrp_script chk_haproxy {       #定义检查脚本
        script "/etc/keepalived/chk_haproxy.sh"         #脚本位置
        interval 3      #每3秒检测一次
        fall 3          #失败判断3次
#       weight  -2      #失败后权重-2
}

vrrp_instance vi_1 {
    state master        #状态,只有master或backup
    interface eth0      #网卡名称,注意一定要是自己正在使用的网卡名称
    virtual_router_id 53        #虚拟路由id,是虚拟路由的mac最后两位
    priority 100                #优先级
    advert_int 1                #通告间隔时间
    authentication {            #认证
        auth_type pass
        auth_pass 1111
    }

    track_script {     #执行以上脚本
        chk_haproxy
    }

    virtual_ipaddress {         #vip地址,同网段
        172.17.0.253
    }
#   notify_master "/etc/init.d/haproxy start"   #当 当前节点成为master时,执行的任务
#   notify_backup "/etc/init.d/haproxy restart" #当 当前节点成为backup时,执行的任务
#   notify_fault  "/etc/init.d/haproxy stop"    #当 当前节点出现故障时,执行的任务    
}

ok,创建健康检查脚本文件

vim /etc/keepalived/chk_haproxy.sh

#/bin/bash

stat=`ps -c haproxy --no-header | wc -l`

if [[ ! "$stat" -eq 1  ]];then
        /etc/init.d/keepalived stop
fi

如果进程未在,直接关闭keepalived

chmod +x chk_haproxy.sh #给个执行权限

 

4、启动keepalived服务

启动文件中某些文件不存在,需要手动链接一下(ubuntu就是麻烦):

 

ln -s /lib/lsb/init-functions /etc/init.d/functions

mkdir /etc/rc.d

ln -s /etc/init.d /etc/rc.d/

cp /src/keepalived-2.0.19/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

 

然后安装daemon命令:

apt-get -y install daemon

注意图中,daemon -- keepalived 之前是 daemon keepalived,加了两条横杠

这个命令是有问题的,其中的-d本来是给keepalived用的,但这样组合后被认为是daemon命令的参数。这会导致服务不能启动。  如果不修改,会提示启动失败,但却不输出具体信息。

 

注意,由于我是使用docker容器安装的keepalived,所以我需要将此容器保存成镜像,然后再重新docker run,要加上--privileged这个参数,才能显示keepalived的vip(不是用容器安装的可以忽略)

docker run -dit --privileged --name ha_keep  -p 3308:3307 ha_keep

 

下边启动服务:

/etc/init.d/keepalived start

 

执行:ip addr

 

 

5、配置backup机

haproxy服务于master机一致,keepalived服务主要修改主配置文件

keepalived/backup机配置文件:

! configuration file for keepalived

global_defs {
   router_id r2         #虚拟路由名称,master和backup不能一致
}

vrrp_script chk_haproxy {       #定义检查脚本
        script "/etc/keepalived.chk_haproxy.sh"         #脚本位置
        interval 3      #每3秒检测一次
        fall 3          #失败判断3次
#       weight  -2      #失败后权重-2
}

vrrp_instance vi_1 {
    state backup        #状态,只有master或backup
    interface eth0      #网卡名称,注意一定要是自己正在使用的网卡名称
    virtual_router_id 53        #虚拟路由id,是虚拟路由的mac最后两位
    priority 99                 #优先级
    advert_int 1                #通告间隔时间
    authentication {            #认证
        auth_type pass
        auth_pass 1111
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {         #vip地址,同网段
        172.17.0.253
    }
#   notify_master "/etc/init.d/haproxy start"   #当 当前节点成为master时,执行的任务
#   notify_backup "/etc/init.d/haproxy restart" #当 当前节点成为backup时,执行的任务
#   notify_fault  "/etc/init.d/haproxy stop"    #当 当前节点出现故障时,执行的任务
} 

其他配置相同,然后启动keepalived

 

6、测试将master机的haproxy服务stop,会不会自动将keepalived服务关掉,将vip转移到bakup机

下图所示vip到backup机就说明配置ok

 

 

7、负载均衡高可用配置完毕,不过此架构适用于mysql主主复制或有共享存储服务器,个人感觉mysql主主容易产生问题,不太推荐,个人看法。

 

如有转载请标明出处

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网