Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)
系统环境: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、前往官网https://www.haproxy.org/ 下载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:
# descrition: haproxy loadbalancer DAEMON=haproxy
PROG_DIR=/usr/local/HAproxy2.0.8
RETVAL= success() { #跟朋友的探讨,使用shell本身来实现;当然也可以使用for的遍历循环,
总之方法有很多种
for ((i=;i<=;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=
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=
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=
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 # 最大连接数 # 作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen
defaults
log global #启动每个实例日志记录事件和流量
mode http #默认的模式mode {tcp|http|health},tcp是四层,http是七层,health只会返回ok
retries #对server的connection失败后,重试的次数
option redispatch #启用或禁止在连接故障情况下的会话重新分配
maxconn #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:
default_backend mysql backend mysql
balance leastconn #算法:最少连接数
server mysql1 172.17.0.2: check port maxconn
server mysql2 172.17.0.3: check port maxconn
复制一份配置文件到该目录:
cp -a /etc/haproxy/haproxy.conf /usr/local/HAproxy2.0.8/conf/haproxy.cfg
来启动haproxyd服务
/etc/init.d/haproxy start

显示服务启动成功,端口也在
二、安装Keepalived
1、前往官网下载所需版本https://www.keepalived.org/
同样解压,进入目录,查看安装说明文档(此处忽略)
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秒检测一次
fall #失败判断3次
# weight - #失败后权重-
}
vrrp_instance VI_1 {
state MASTER #状态,只有MASTER或BACKUP
interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称
virtual_router_id #虚拟路由id,是虚拟路由的mac最后两位
priority #优先级
advert_int #通告间隔时间
authentication { #认证
auth_type PASS
auth_pass
}
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 ]];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秒检测一次
fall #失败判断3次
# weight - #失败后权重-
}
vrrp_instance VI_1 {
state BACKUP #状态,只有MASTER或BACKUP
interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称
virtual_router_id #虚拟路由id,是虚拟路由的mac最后两位
priority #优先级
advert_int #通告间隔时间
authentication { #认证
auth_type PASS
auth_pass
}
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主主复制或有共享存储服务器。
如有转载请标明出处
Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)的更多相关文章
- mysql复制(高可用架构方案的基础)
mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ...
- 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...
- Keepalived+MySQL实现高可用
MySQL的高可用方案有很多,比如Cluster,MMM,MHA,DRBD等,这些都比较复杂,我前面的文章也有介绍.最近Oracle官方也推出了Fabric.有时我们不需要这么复杂的环境,这些方案各有 ...
- mysql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- 利用Keepalived+mysql构建高可用MySQL双主自动切转
转载:http://www.it300.com/index.php/article-15266.html 关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储, ...
- mysql mha高可用架构的安装
MMM无法全然地保证数据的一致性,所以MMM适用于对数据的一致性要求不是非常高.可是又想最大程度的保证业务可用性的场景对于那些对数据一致性要求非常高的业务,非常不建议採用MMM的这样的高可用性架构.那 ...
- Keepalived+MySQL实现高可用(转)
http://www.cnblogs.com/wingsless/p/4033093.html MHA高可用 http://www.cnblogs.com/gomysql/p/3856484.ht ...
- centos6.6部署mysql mmm高可用架构
一.环境简述 1.工作逻辑图 2.MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是 ...
- mysql mmm高可用架构设计
项目概述:搭建主从,双主,安装Perl模块 安装配置mmm软件 测试 硬件环境:4台虚拟PC 软件环境:rehl6.5 MySQL-5.6.26 percona-xtrabackup-2.3.4 ...
随机推荐
- XSS扫盲到漏洞挖掘上手
复习xss ,也总结一下XSS基础的点到进阶的知识 目录 0x01 XSS扫盲入门 0x02 XSS payload构造 0x03 XSS payload变形进阶 0x01 XSS扫盲入门 XS ...
- Hadoop和YARN :map+shuffle+reduce走读
今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...
- PHP 调试时中断了事务
1.错误:Uncaught PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try res ...
- 01 【PMP】组织结构类型
[PMP]组织结构类型 1.简单型 描述:人员并肩工作,所有者/经营者直接做出主要决定并监督执行. PM角色:兼职(协调员) PM权限:极少(无) 项目管理人员:极少(无) 资源可用性:极少(无) ...
- 《Java并发编程实战》读书笔记-第3章 对象的共享
可见性 在没有同步的情况下,编译器.处理器以及运行时都可能做指令重排.执行结果可能会出现错误 volatile变量 编译器与运行时不会进行指令重排,不会进行缓存,使用volatile变量要满足以下条件 ...
- VSCode 配置 Python 开发环境
一.环境准备 首先需要先安装好 Python 和 VSCode, 下载地址如下 VSCode Python 二.安装 Python 扩展 首先在VSCode上安装 Python 扩展,如图: 三.新建 ...
- The All-in-One Note
基础 操作系统 I/O 模型 阻塞式 I/O 模型(blocking I/O) 描述:在阻塞式 I/O 模型中,应用程序在从调用 recvfrom 开始到它返回有数据报准备好这段时间是阻塞的,recv ...
- httprunner-1-linux下搭建hrun(上)
前言 相信不少小伙伴对开源项目 httprunner 都很感兴趣,我们来看下它的有哪些特点吧: 项目管理:新增项目.列表展示及相关操作,支持用例批量上传(标准化的HttpRunner json和yam ...
- LeetCode108——Convert Sorted Array to Binary Search Tree
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- Azure EventHub快速入门和使用心得
Azure Event Hubs(事件中心)是一个大数据流式数据摄取服务平台,每秒接受数百万事件; EventHubs 是一个有数据保留期限的缓冲区,类似分布式日志:可缩放的关键在于[分区消费模型], ...