Docker下Ubuntu系统编译安装HAprox+Keepalived+MySQL负载高可用
系统环境: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: 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}......ttt" && success echo -e e[32m[OK]e[0m" else echo $DAEMON is already running"65 fi } stop () { PROG_STAT=$(netstat -tlnp | if [ -n then stopping ${DAEMON}......ttt success PROG_PID=$(cat $PROG_DIR/run/${DAEMON}.pid) kill $PROG_PID " $DAEMON is already stopped66 } restart() { restarting ${DAEMON}......ttt" && 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" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) Usage /etc/init.d/$DAEMON {start | stop | restart | status}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. # 改变当前工作目录 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 0.3:300 复制一份配置文件到该目录: 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 -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地址,同网段 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 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_id 99 #优先级 advert_int } track_script { chk_haproxy } virtual_ipaddress { #VIP地址,同网段 #当 当前节点出现故障时,执行的任务 } 其他配置相同,然后启动keepalived ? 6、测试将MASTER机的haproxy服务stop,会不会自动将keepalived服务关掉,将VIP转移到BAKUP机 下图所示VIP到BACKUP机就说明配置ok ? ? 7、负载均衡高可用配置完毕,不过此架构适用于mysql主主复制或有共享存储服务器。 ? 如有转载请标明出处 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |