docker mysql高可用_Docker下Ubuntu系统编译安装HAprox+Keepalived+MySQL负载高可用架构

本文详细介绍了如何在Docker的Ubuntu容器中搭建MySQL高可用架构,包括使用HAProxy进行负载均衡和Keepalived实现故障转移。涉及的步骤包括安装和配置HAProxy,创建服务启动脚本,编写haproxy.conf配置文件,安装并配置Keepalived,以及设置健康检查脚本。最后,通过测试验证了系统的高可用性。
摘要由CSDN通过智能技术生成

系统环境: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两台都要装)

解压,进入haproxy-2.0.8目录

vim INSTALL;查看安装说明

ef1379a3447600cc14377573a59e412b.png

2、编译安装HAproxy

(1)编译

报错1:bash: make: command not found

8fc5c0333252e41a82f82126d9dc0a97.png

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

apt-get -y install make

make -j 2 TARGET=generic USE_GZIP=1

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

d16cda41a2f28eda601b66331aa97913.png

未安装gcc,安装gcc:

apt-get -y install gcc

然后再执行:

make -j 2 TARGET=generic USE_GZIP=1

暂时未报错:

a16d8f06208df728af8c1e85c5daea9e.png

(2)安装

直接执行:

make install PREFIX=/usr/local/HAproxy2.0.8

4ec11e63db85b93f7703de932ad04568.png

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

7fb2176a8afd2fa3163c1edadb228b1e.png

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

vim /etc/init.d/haproxy

#!/bin/bash

#

# chkconfig:2345 85 15# descrition: haproxy loadbalancer

DAEMON=haproxy

PROG_DIR=/usr/local/HAproxy2.0.8RETVAL=0success() { #跟朋友的探讨,使用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}.cfgecho -ne Starting ${DAEMON}......\t\t\t" &&successecho -e \e[32m[OK]\e[0m"

else

echo $DAEMON is already running"65

fi}

stop ()

{

PROG_STAT=$(netstat -tlnp | if [ -n then

stopping ${DAEMON}......\t\t\tsuccess

PROG_PID=$(cat $PROG_DIR/run/${DAEMON}.pid)kill$PROG_PID"

$DAEMON is already stopped66

}

restart()

{restarting ${DAEMON}......\t\t\t" &&success

PROG_PID=$(${DAEMON}.pid)

$PROG_DIR/sbin/$DAEMON -f $PROG_DIR/conf/${DAEMON}.cfg -st $PROG_PID}

status ()

{

PROG_STAT=$(netstat -tlnp | ${DAEMON} stopped${DAEMON} running}case $1" instart)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;*)Usage /etc/init.d/$DAEMON {start | stop | restart | status}67

esacexit $RETVAL

赋予执行权限:

chmod +x /etc/init.d/haproxy

4、添加haproxy.conf配置文件

先创建haproxy用户与组:

c59edbb4f7811bc719c9fe25cd5c4040.png

再创建配置文件:

mkdir -p /etc/haproxy

vim /etc/haproxy/haproxy.conf

global

log127.0.0.1 local2 info# 设置日志文件输出定向,info为日志级别chroot /usr/local/HAproxy2.# 改变当前工作目录

pidfile/usr/local/HAproxy2.0.8/run/haproxy.pid #PID文件位置

user haproxy # 用户与用户组

group haproxy

daemon # 守护进程启动,运维方式为后台工作

maxconn4000# 最大连接数

# 作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen

defaults

log global #启动每个实例日志记录事件和流量

mode http #默认的模式mode {tcp|http|health},tcp是四层,http是七层,health只会返回ok

retries3#对server的connection失败后,重试的次数

option redispatch #启用或禁止在连接故障情况下的会话重新分配

maxconn4096#maxconn每个进程可用的最大连接数

timeout http-request 10s

timeout queue 1m

timeout connect 10s

timeout client 1m

timeout server 1m

timeout http-keep-alive 10s

frontend main

bind0.0.0.0:3307default_backend MysqL

backend MysqL

balance leastconn #算法:最少连接数

server MysqL1172.17.0.2:3306 check port 3306 maxconn 300server MysqL20.3:300

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

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

来启动haproxyd服务

/etc/init.d/haproxy start

f1eef2cfef7c709486f0bab5ca0e6221.png

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

二、安装Keepalived

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

2、编译扮装

(1)检查环境

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

报错1:Can not include OpenSSL headers files

7b4eaa3473fcfa72f848d27be425ef5d.png

没有openssl,执行:

apt-get -y install openssl libssl-dev

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

再重新检查环境~

918186df33ee550944700b3c8d418809.png

ok,每问题,警告忽视

(2)编译、编译安装

make && make install

ce8a3a0ac56739d67a16c001576babd7.png

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 forkeepalived

global_defs {

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

}

vrrp_script chk_haproxy { #定义检查脚本

script/etc/keepalived/chk_haproxy.sh#脚本位置

interval#每3秒检测一次

fall#失败判断3次

# weight-2 #失败后权重-2}

vrrp_instance VI_1 {

state MASTER #状态,只有MASTER或BACKUP

interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称

virtual_router_id53#虚拟路由id,是虚拟路由的mac最后两位

priority100#优先级

advert_int1#通告间隔时间

authentication { #认证

auth_type PASS

auth_pass1111}

track_script { #执行以上脚本

chk_haproxy

}

virtual_ipaddress { #VIP地址,同网段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 stopfi

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

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

4、启动keepalived服务

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

b087e2bbef61d2da223ed7d58c0ecbb4.png

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

a4b84afeb7a71dfd3bfc215b4a52a5bb.png

执行:ip addr

8475a5a5c2ef977d043b0622c4b15b1e.png

5、配置BACKUP机

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

Keepalived/BACKUP机配置文件:

! Configuration File keepalived

global_defs {

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

}

vrrp_script chk_haproxy { #定义检查脚本

script/etc/keepalived.chk_haproxy.sh}

vrrp_instance VI_1 {

state BACKUP #状态,只有MASTER或BACKUP

interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称

virtual_router_id99#优先级

advert_int}

track_script {

chk_haproxy

}

virtual_ipaddress { #VIP地址,同网段#当 当前节点出现故障时,执行的任务

}

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

6、测试将MASTER机的haproxy服务stop,会不会自动将keepalived服务关掉,将VIP转移到BAKUP机

下图所示VIP到BACKUP机就说明配置ok

ca3680840b84c5c8736d4708066ed0a8.png

7、负载均衡高可用配置完毕,不过此架构适用于MysqL主主复制或有共享存储服务器。

如有转载请标明出处

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值