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,一下感觉逼格少了很多,等忙完这阵再来看一下。先贴出…

机器学习之 sklearn.preprocessing 模块

sklearn.preprocessing.PolynomialFeatures 多项式扩展。 它是使用多项式的方法来进行的,如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2),这个多项式的形式是使用poly的效果。 api class s…

Python 面试题

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

周鸿祎,高司令

还是感到有必要将自己的一些想法快速记下来。 首先是对周鸿祎新员工演讲的看法。 就说实话这一点来说,周鸿祎比很多人强。所以我比较喜欢引用他的话,确实比较实在,不装逼。 至于一个公司招人的风格,是公司自己定的,别人…

JDBC与JNDI应用比较

JNDI用了多年但是一直没去弄懂其和JDBC的区别,今天在网上搜了下,发下些资料说明的还不错记录下。 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专…

bzoj1038500AC!

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

机器学习接口代码之 Ridge、Lasso、Elasitc Net

目录 Ridge Regression (岭回归) Lasso Regression Elasitc Net(弹性网络) 案例:葡萄酒质量预测 官网地址https://scikit-learn.org/stable/modules/linear_model.html Ridge Regression (岭回归&…

公司技术管理角度看C++游戏程序员发展

公司技术管理角度看C游戏程序员发展 H3D 这是我多年来招聘培训游戏程序员的一点想法。一直想汇总一下。主要目的是为了更好的对公司新进C程序员进行培训,并且建立起游戏程序员培训,发展,成才,成为核心骨干,管理层&am…

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…

salt

安装服务端和客户端服务端(marster)yum install salt-master -y客户端(slave)yum install salt-minion -ymarster192.168.11.17/etc/init.d/salt-master start配置文件: vi /etc/salt/mastercat master|egrep -v ;|#|^$auto_accept:True #设置自动接受日志: /var/log/salt/mas…

python | 查看pip支持的文件名和版本

python | 查看pip支持的文件名和版本win下查询大哥推荐已经解决win下查询 import pip._internalprint(pip._internal.pep425tags.get_supported())64位的需要在pip后面加个_internal 如果不行试试下边的 大哥推荐已经解决 import wheel.pep425tags as w print(w.get_suppor…

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

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

set IDENTITY_INSERT on 和 off 的设置

批量插入记录时,对有标识列的字段要设置 set IDENTITY_INSERT 表名 on,然后再执行插入记录操作;插入完毕后恢复为 off 设置 转载于:https://www.cnblogs.com/TTonly/p/10349931.html

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

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

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

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

什么是程序员正确的职场心态?

(本文为《程序员羊皮卷》最新公布的第七章的一部分,下载地址:http://download.csdn.net/source/1868065 或者http://zhaopinpro.com/wordpress/wp-content/uploads/2009/12/《程序员羊皮卷》第7章-程序员职场心态.doc 欢迎大家购买作者签名…

git第一次提交代码至远程仓库步骤

git第一次提交代码至远程仓库步骤在将要提交的文件目录下打开Git Bash Here1.git init git add . 提交该目录下的所有文件 3.git commit -am “qiantai”(提交到本地仓库) 4.git remote add origin *** (***git地址) 5.git push -u -f origin master(提交到远程仓库&#x…

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

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

liunx -bash:ls:command not found,执行命令总是报找不到

解决办法: 使用绝对命令vi打开profile /bin/vi /etc/profile 添加: export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 简便方法: 直接执行 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin export PA…

Nginx的Web管理界面收集

Nginx实在是太强大了!灰度发布、金丝雀发布、负载均衡就只需要简单的几行配置就可以实现,这些特性嗾使微软无法比拟的。 原来Nginx除了使用ngx_http_stub_status_module模块(http://127.0.0.1/ngx_status)实现Web页面上的监控外&a…