HaProxy+Keepalived+Mycat高可用群集配置

概述  

本章节主要介绍配置HaProxy+Keepalived高可用群集,Mycat的配置就不在这里做介绍,可以参考我前面写的几篇关于Mycat的文章。

 部署图:

 

配置  

 HaProxy安装

181和179两台服务器安装haproxy的步骤一致

--创建haproxy用户
useradd haproxy--解压完后进入haproxy目录
cd haproxy-1.4.25/--编译安装
make TARGET=linux26 PREFIX=/usr/local/haproxy ARCH=x86_64make install PREFIX=/usr/local/haproxy

HaProxy配置

 

cd /usr/local/haproxytouch haproxy.cfgvim haproxy.cfg


global
log 127.0.0.1 local0 ##记日志的功能
maxconn 4096
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
defaults
log global
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen admin_stats 192.168.57.180:48800 ##统计页面
stats uri /admin-status 
stats auth admin:admin
mode http
option httplog
listen mycat_service 192.168.57.180:18066 ##客户端就是通过这个ip和端口进行连接,这个vip和端口绑定的是mycat8066端口
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_181 192.168.57.181:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_179 192.168.57.179:8066 check port 48700 inter 5s rise 2 fall 3
srvtimeout 20000

listen mycat_admin 192.168.57.180:19066 ##客户端就是通过这个ip和端口进行连接,这个vip和端口绑定的是mycat9066端口
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_181 192.168.57.181:9066 check port 48700 inter 5s rise 2 fall 3
server mycat_179 192.168.57.179:9066 check port 48700 inter 5s rise 2 fall 3
srvtimeout 20000

配置haproxy记录日志功能

yum –y install rsyslogmkdir /etc/rsyslog.dcd /etc/rsyslog.d/touch haproxy.confvim haproxy.conf

$ModLoad imudp
$UDPServerRun 514local0.* /var/log/haproxy.log

vim /etc/rsyslog.conf

在#### RULES ####上面一行加入以下内容

# Include all config files in /etc/rsyslog.d/$IncludeConfig /etc/rsyslog.d/*.conf

在local7.* /var/log/boot.log下面加入以下内容

local0.* /var/log/haproxy.log

 重启rsyslog服务

service rsyslog restart

将rsyslog加入自动启动服务

chkconfig --add rsyslogchkconfig --level 2345 rsyslog on

 

配置监听mycat是否存活

安装xinetd插件

yum install xinetd -y
cd etc

service mycat_status
{
flags = REUSE
socket_type = stream
port = 48700wait = nouser = nobody
server =/usr/local/bin/mycat_status
log_on_failure += USERID
disable = no
}

创建xinetd启动服务脚本

vim /usr/local/bin/mycat_status

#!/bin/bash
#/usr/local/bin/mycat_status.sh
# This script checks if a mycat server is healthy running on localhost. It will
# return:
#
# "HTTP/1.x 200 OK\r" (if mycat is running smoothly)
#
# "HTTP/1.x 503 Internal Server Error\r" (else)
mycat=`/usr/local/mycat/bin/mycat status |grep 'not running'| wc -l`if [ "$mycat" = "0" ];then/bin/echo -e "HTTP/1.1 200 OK\r\n"else/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
fi

修改脚本文件权限

我就是在这里被坑了很久,根据权威指南上面mycat_status这个脚本里面的内容也有很多问题,好几个地方没有空格.

chmod 777 /usr/local/bin/mycat_status
chmod 777 /etc/xinetd.d/mycat_status

 

将启动脚本加入服务

vim /etc/services

在末尾加入

mycat_status 48700/tcp # mycat_status

重启xinetd服务

service xinetd restart

将xinetd加入自启动服务

chkconfig --add xinetdchkconfig --level 2345 xinetd on

 

页面测试

http://192.168.57.180:48800/admin-status

由于179还没有安装好,所以这里179显示连接失败

创建haproxy启停脚本

启动脚本

touch /usr/local/haproxy/sbin/start
chmod +x /usr/local/haproxy/sbin/start
vim  /usr/local/haproxy/sbin/start
#!/bin/sh/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg &

关闭脚本

touch /usr/local/haproxy/sbin/stop
chmod +x /usr/local/haproxy/sbin/stop
vim /usr/local/haproxy/sbin/stop
#!/bin/sh
ps -ef | grep sbin/haproxy | grep -v grep |awk '{print $2}'|xargs kill -s 9

授权

chown -R haproxy.haproxy /usr/local/haproxy/*

Keepalived安装步骤

keepalived的安装步骤过程在两台服务器上除了keepalived.conf配置文件稍微有点区别外其他的地方都一致。

openssl安装

./config --prefix=/usr/local/openssl./config -t
make depend
make
make test
make install
ln -s /usr/local/openssl /usr/local/sslvim /etc/ld.so.conf

在文件末尾加入以下内容

/usr/local/openssl/lib

修改环境变量

vim /etc/profile

在文件末尾加入以下内容

export OPENSSL=/usr/local/openssl/bin
export PATH=$PATH:$OPENSSL

使环境变量立刻生效

source /etc/profile

安装openssl-devel

yum install openssl-devel -y

 

测试

ldd /usr/local/openssl/bin/openssl
vdso.so.  ( lib64libdl.so. ( lib64libc.so. (lib64ldlinuxx86.so. (
which openssl
/usr/bin/openssl
openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

keepalived安装

./configure --prefix=/usr/local/keepalivedmake
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/mkdir /etc/keepalived
cd /etc/keepalived/cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
mkdir -p  /usr/local/keepalived/var/log

 

创建配置文件和脚本

mkdir etckeepalivedscriptscd /etc/keepalived/scripts

vim /etc/keepalived/keepalived.conf

master

! Configuration Fileforkeepalived
vrrp_script chk_http_port {
script"/etc/keepalived/scripts/check_haproxy.sh"
interval 2weight 2}
vrrp_instance VI_1 {
state MASTER #192.168.57.179上改为BACKUP
interface eth0 #对外提供服务的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 150 #数值愈大,优先级越高,backup上改为120
advert_int 1 #同步通知间隔
authentication { #包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题
auth_type PASS
auth_pass 1111}
track_script {
chk_http_port #调用脚本check_haproxy.sh检查haproxy是否存活
}
virtual_ipaddress { #vip地址,haproxy配置的使用的就是这里配置的VIP192.168.57.180 dev eth0 scope global
}
notify_master /etc/keepalived/scripts/haproxy_master.sh
notify_backup /etc/keepalived/scripts/haproxy_backup.sh
notify_fault /etc/keepalived/scripts/haproxy_fault.sh
notify_stop /etc/keepalived/scripts/haproxy_stop.sh
}

backup

! Configuration Fileforkeepalived
vrrp_script chk_http_port {
script"/etc/keepalived/scripts/check_haproxy.sh"
interval 2weight 2}
vrrp_instance VI_1 {
state BACKUP #192.168.57.179上改为BACKUP
interface eth0 #对外提供服务的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 120 #数值愈大,优先级越高,backup上改为120
advert_int 1 #同步通知间隔
authentication { #包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题
auth_type PASS
auth_pass 1111}
track_script {
chk_http_port #调用脚本check_haproxy.sh检查haproxy是否存活
}
virtual_ipaddress { #vip地址192.168.57.180 dev eth0 scope global
}
notify_master /etc/keepalived/scripts/haproxy_master.sh
notify_backup /etc/keepalived/scripts/haproxy_backup.sh
notify_fault /etc/keepalived/scripts/haproxy_fault.sh
notify_stop /etc/keepalived/scripts/haproxy_stop.sh
}

vim /etc/keepalived/scripts/check_haproxy.sh

#!/bin/bash
STARTHAPROXY="/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg"
STOPKEEPALIVED="/etc/init.d/keepalived stop"
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A=`ps -C haproxy --no-header |wc -l`echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILEif [ $A -eq 0 ];thenecho $STARTHAPROXY >> $LOGFILE
$STARTHAPROXY >> $LOGFILE 2>&1sleep 5
fiif [ `ps -C haproxy --no-header |wc -l` -eq 0 ];thenexit 0elseexit 1fi

vim /etc/keepalived/scripts/haproxy_master.sh

#!bin`usrlocalhaproxysbinhaproxy f usrlocalhaproxy"usrlocalkeepalivedkeepalivedhaproxystate."  $LOGFILE  $LOGFILE  $LOGFILE  $LOGFILE  $LOGFILE  $LOGFILE

vim /etc/keepalived/scripts/haproxy_backup.sh

#!/bin/bash
STARTHAPROXY=`/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg`
STOPHAPROXY=`ps -ef | grep sbin/haproxy | grep -v grep | awk '{print $2}'| xargs kill -s 9`
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being backup...." >> $LOGFILE 2>&1echo "stop haproxy...." >> $LOGFILE 2>&1$STOPHAPROXY >> $LOGFILE 2>&1echo "start haproxy...." >> $LOGFILE 2>&1$STARTHAPROXY >> $LOGFILE 2>&1echo "haproxy stared ..." >> $LOGFILE

vim /etc/keepalived/scripts/haproxy_fault.sh

#!/bin/bash
LOGFILE=/usr/local/keepalived/var/log/keepalived-haproxy-state.logecho "[fault]" >> $LOGFILE
date >> $LOGFILE

vim /etc/keepalived/scripts/haproxy_stop.sh

#!/bin/bash
LOGFILE=/usr/local/keepalived/var/log/keepalived-haproxy-state.logecho "[stop]" >> $LOGFILE
date >> $LOGFILE

 赋予脚本可执行权限

chmod 777 /etc/keepalived/scripts/*

将keepalived加入自启动服务

chkconfig --add keepalivedchkconfig --level 2345 keepalived on--启动服务service keepalived start

 

 

总结  

权威指南上面代码部分好多处都存在问题,几乎每一块代码都存在问题,有时候往往一个空格需要花很长的时间去找这个问题,所以在代码方面要细心;特别是复制别人的代码不要原本照抄最好是检查一下,除了代码本身的问题权限有时候也是容易忽略的错误,特别是可执行文件要注意是否有可执行权限。

 



本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/2073257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错

本来打算用一下atom但是导出pdf报错,可是在预览的情况下就没有问题,顺便吐槽一下谷歌浏览器自己的markdown在线预览插件无法适配,用搜狗搭载谷歌的插件才能导出pdf,一下感觉逼格少了很多,等忙完这阵再来看一下。先贴出…

Python 面试题

Python面试315道题第一部 Python面试题基础篇(80道)1、为什么学习Python?2、通过什么途径学习的Python?3、Python和Java、PHP、C、C#、C等其他语言的对比?PHPjavacc#c4、简述解释型和编译型编程语言?编译型…

bzoj1038500AC!

序列dp 先开始想了一个类似区间dp的东西...少了一维 然后发现似乎不太对,因为女生的最大差和男生的最大差并不相等 dp[i][j][x][y]表示当前有i个人,j个男生,男生和女生的后缀最大差是x,女生和男生最大差是y,x,y>0,转…

android生命周期_Android开发 View的生命周期结合代码详解

咱们以TextView控件为例:/*** Created by SunshineBoy on 2020/9/23.*/public class TestTextView extends android.support.v7.widget.AppCompatTextView {public TestTextView(Context context) {super(context);Log.e("TestTextView","TestTextVi…

机器学习算法之支持向量机 SVM

距离知识 点到直线/平面的距离公式: 1、假定点p(x0,y0),平面方程为f(x,y)AxByC,那么点p到平面f(x)的距离为: 2、从三维空间扩展到多维空间中,如果存在一个超平面f(X)θXb; 那么某一个点X0到这个超平面的距离为: 参考…

VMware Horizon虚拟桌面工具箱2.0-审计,远程协助,控制台,电源

各位朋友,大家好,VMware Horizon 虚拟桌面工具箱2.0版本,已经面世啦!在2.0 版本中我们添加了vSphere虚拟机控制台访问、开机策略和图形化安装这三个新功能,并改进了部分老的功能。老版本即1.5版本的相关知识可以参考我的博文VMware Horizon虚拟桌面工具箱之审计与远…

python词云改颜色_一种用Python生成词云

一种用Python生成词云 我们在阅读一篇很长的文章时,总先看看文章的关键词来获知文章的大概内容。今天我们就来制作一个词云程序,将文章中出现次数较多的词语提取出来,生成一张词云图。词云图的生成原理: 程序会将这篇文章中的所有…

机器学习之 朴素贝叶斯、贝叶斯网络

目录 贝叶斯定理 朴素贝叶斯算法 高斯朴素贝叶斯 伯努利朴素贝叶斯 多项式朴素贝叶斯 贝叶斯网络 最简单的贝叶斯网络 全连接贝叶斯网络 一般化的贝叶斯网络 引子 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可…

attention机制_简析Attention机制—优缺点,实现,应用

什么是Attention机制?Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看,往往只会根据需求观察注意特定的一部分。简单来说,就是一种权重参数的分配机制,目标是协助模型捕捉重要信息…

pycharm Debug问题

pycharm Debug问题 参考链接:https://blog.csdn.net/weixin_43472408/article/details/85072640 Debug的调试方式如下所示: 1.show execution point (F10) 显示当前所有断点 2.step over(F8) 单步调试。 若函数A内存在子函数a时,不会进入子函数a内执…

php执行npm命令_npm系列之命令执行

当我想使用vue的脚手架来创建一个项目的时候,我应该怎么做?执行命令 npm install -g vue/cli 全局安装,之后就可以在控制台中使用vue create programName 来创建一个项目。为什么可以直接使用vue命令?这类支持命令的依赖会在项目中…

模拟产品展示 Flash无法展示的追踪过程

鼠标滑过小图时,左侧前四张大图可以,但是最后那张大图无法展示: falsh产品展示需要通过参数传递,把关联产品id的图片get出来,如: http://192.168.8.166:90/category/prod_img.aspx?prodid101 结果&#xf…

c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...

点击上方“大鱼机器人”,选择“置顶/星标公众号”福利干货,第一时间送达!指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所…

SpringSecurity深度解析与实践(3)

这里写自定义目录标题 引言SpringSecurity之授权授权介绍java权限集成 登录失败三次用户上锁 引言 SpringSecurity深度解析与实践(2)的网址 SpringSecurity之授权 授权介绍 Spring Security 中的授权分为两种类型: 基于角色的授权&#…

机器学习之单标签多分类及多标签多分类

单标签二分类算法 Logistic算法 单标签多分类算法 Softmax算法 One-Versus-One(ovo):一对一 One-Versus-All / One-Versus-the-Rest(ova/ovr): 一对多 ovo和ovr的区别 Error Correcting Output code…

cas单点登录-jdbc认证(三)

前言 本节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理)认证策略(jdbc)一、业务需求 不同的公司,需求业务需求或者…

mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)

博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长,文章底部有面试题。入参映射关键字说明图中paramenterTy…

蒋涛作序盛赞Leo新作为“程序员职场实用百科全书”——《程序员羊皮卷》连载(1)

《程序员羊皮卷》当当购买地址:http://product.dangdang.com/product.aspx?product_id20691986 互动购买地址:http://www.china-pub.com/196049 程序员行业从外面看起来有很多绚丽的光环,这里有无数以程序致富的天才,世界首富比…

matlab ones函数_Matlab中相见恨晚的命令(持续更新)

知乎上有个“有哪些让人相见恨晚的Matlab命令”的话题,很多答主提供的命令确实很实用,为了更方便大家的学习,我就知乎上的答案和我自己想到的都综合整理成了一篇文章,把我觉得很实用的指令整理出来。知乎原答案链接dbstop if erro…

机器学习之特征工程

特征工程-概念 特征工程是一个面向十分广的概念,只要是在处理数据就可以认为是在做特征工程。个人理解,真正意义上的特征工程还是数据降维和数据升维的过程。 而前期对数据的处理过程: 需要哪些数据?数据如何存储?数…