服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Centos - haproxy+keepalived负载均衡之主备切换(centos)

haproxy+keepalived负载均衡之主备切换(centos)

2019-10-08 15:53centos教程网 Centos

本文介绍haproxy+keepalived双机热备负载均衡,在centos5.4上调试通过

VIP: 192.168.1.100 
Master: 192.168.1.238 
Slave: 192.168.1.239 
真实IP: 
RIP1: 192.168.1.235 
RIP2: 192.168.1.236 

以下为安装步骤 
第一步:安装haproxy 
下载http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.18.tar.gz 
#tar zxvf haproxy-1.4.18.tar.gz 
#make TARGET=linux26 
#make install 
第二步:安装ipvs 
根据ipvs官网介绍,不同版本内核适用的ipvs版本不一样。http://www.linuxvirtualserver.org/software/ipvs.html 
2.6.18 适用于1.24的各个版本 
ipvsadm-1.24-6.src.rpm (for kernel between 2.6.10 and 2.6.27.4) - December 10, 2005 
ipvsadm-1.24-5.src.rpm (for 1.2.0 or later) - October 27, 2004 
ipvsadm-1.24-4.src.rpm (for 1.1.8 or later) - January 10, 2004 
ipvsadm-1.24-3.src.rpm (for 1.1.8 or later) - December 20, 2003 
ipvsadm-1.24.tar.gz - December 10, 2005 
安装之前,软连接系统内核目录 
ln -s /usr/src/kernels/2.6.18-194.11.3.el5-i686/ /usr/src/linux 
查看系统当前的内核版本: 
uname -r 
2.6.18-164.el5 

有时你找不到这个内核的路径,系统安装后并没有kernerls的目录 
解决方法:yum install kernel-devel 
接下来在进行连接 编译 就ok了! 

我们使用最新的 ipvsadm-1.24.tar.gz,下载安装。 
tar zxvf ipvsadm-1.24.tar.gz 
cd ipvsadm-1.24 
make 
make install 

第三步,安装keepalived 
从http://www.keepalived.org上下载最新的keepalived-1.2.2.tar.gz。 
tar zxvf keepalived-1.2.2.tar.gz 
cd keepalived-1.2.2 
./configure 
make 
make install 
安装完毕。配置 
(1): 
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 
mkdir /etc/keepalived 
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 
ln -s /usr/local/sbin/keepalived /usr/sbin/ 
service keepalived start 
如果安装时的编译参数为: ./configure --prefix=/usr/local/keepalived 
则操作步骤如下: 
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
mkdir /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ 
service keepalived start 

以下为详细的配置文件 

二、haproxy 
(1)、haproxy配置文件 haproxy.cfg 
global 
daemon 
chroot /usr/local/haproxy 
maxconn 256 
user haproxy 
group haproxy 
log-send-hostname xiaokk.com 
log-tag my_xiaokk 
nbproc 1 
pidfile /var/run/haproxy.pid 
log 127.0.0.1 local0 info 
defaults 
maxconn 256 
mode http 
timeout connect 5000ms 
timeout client 50000ms 
timeout server 50000ms 
timeout check 2000 
retries 3 
option httpclose 
option httplog 
option dontlognull 
option forwardfor 
option redispatch 
option abortonclose 
frontend http-www 
bind 192.168.1.100:80 
acl ha_policy hdr_reg(host) -i ^(www.test-haproxy.com|test-haproxy.com|demo.test-haproxy.com|www.hellobaby.com) 
acl ha_baby hdr_dom(host) -i hellobaby.com 
use_backend ha_www if ha_policy 
use_backend ha_www if ha_baby 
log 127.0.0.1 local0 info 
listen admin_status 
bind 192.168.1.100:1080 
mode http 
log 127.0.0.1 local0 info 
stats uri /admin?status 
stats refresh 30s 
stats realm Haproxy\ Admin\ Center 
stats auth admin:admin 
stats hide-version 
backend ha_www 
mode http 
balance source 
cookie SERVERID 
option httpchk HEAD /index.html 
server w1 192.168.1.235:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1 
server w2 192.168.1.236:85 cookie 1 check inter 1500 rise 3 fall 3 weight 2 
(2)、haproxy启却脚本 haproxy.sh 

#!/bin/sh 

# chkconfig: - 85 15 
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly \ 
# suited for high availability environments. 

# processname: haproxy 
# config: /usr/local/haproxy/conf/haproxy.cfg 
# pidfile: /var/run/haproyx.pid 


# Source function library. 
if [ -f /etc/init.d/functions ]; then 
. /etc/init.d/functions 
elif [ -f /etc/rc.d/init.d/functions ]; then 
. /etc/rc.d/init.d/functions 
else 
exit 0 
fi 

# Source networking configuration. 
. /etc/sysconfig/network 

# Check that networking is up 
[ ${NETWORKING} = "no" ] && exit 0 

[ -f /usr/local/haproxy/conf/haproxy.cfg ] || exit 1 

RETVAL=0 

# start Haproxy 
start() { 
/usr/local/haproxy/sbin/haproxy -c -q -f /usr/local/haproxy/conf/haproxy.cfg 
if [ $? -ne 0 ]; then 
echo "Errors found in configuration file." 
return 1 
fi 

echo -n "Starting Haproxy: " 
daemon /usr/local/haproxy/sbin/haproxy -D -f /usr/local/haproxy/conf/haproxy.cfg -p /var/run/haproxy.pid 
RETVAL=$? 
echo 
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/haproxy 
return $RETVAL 


# stop Haproxy 
stop() { 
echo -n "Shutting down Haproxy: " 
killproc haproxy -USR1 
RETVAL=$? 
echo 
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/haproxy 
[ $RETVAL -eq 0 ] && rm -f /var/run/haproxy.pid 
return $RETVAL 


# restart Haproxy 
restart() { 
/usr/local/haproxy/sbin/haproxy -c -q -f /usr/local/haproxy/conf/haproxy.cfg 
if [ $? -ne 0 ]; then 
echo "ERR found in configuration file, check it with 'haproxy check'." 
return 1 
fi 
stop 
start 


# check haproxy 
check() { 
/usr/local/haproxy/sbin/haproxy -c -q -V -f /usr/local/haproxy/conf/haproxy.cfg 


# rsstatus 
rhstatus() { 
status haproxy 


# condrestart 
condrestart() { 
[ -e /var/lock/subsys/haproxy ] && restart || : 


# See how we were called. 
case "$1" in 
start) 
start 
;; 
stop) 
stop 
;; 
restart) 
restart 
;; 
reload) 
restart 
;; 
condrestart) 
condrestart 
;; 
status) 
rhstatus 
;; 
check) 
check 
;; 
*) 
echo $"Usage: haproxy {start|stop|restart|reload|condrestart|status|check}" 
RETVAL 
esac 

exit $RETVAL 

三、keepalived配置文件 
Master的配置文件: 
! Configuration File for keepalived 
global_defs { 
router_id LVS_1 

vrrp_script chk_haproxy { 
script "/etc/keepalived/check_haproxy.sh" 
interval 2 
weight 2 

vrrp_instance VI_1 { 
state MASTER 
priority 99 
advert_int 1 
virtual_router_id 50 
garp_master_delay 1 
interface eth0 
authentication { 
auth_type PASS 
auth_pass Kxiaokk345Pix 

track_interface { 
eth0 

virtual_ipaddress { 
192.168.1.100 

track_script { 
chk_haproxy 

notify_master "/etc/keepalived/mailnotify.py master" 
notify_backup "/etc/keepalived/mailnotify.py backup" 
notify_fault "/etc/keepalived/mailnotify.py fault" 


Slave的配置文件 
! Configuration File for keepalived 
global_defs { 
router_id LVS_2 

vrrp_script chk_haproxy { 
script "/etc/keepalived/check_haproxy.sh" 
interval 5 
weight 2 

vrrp_instance VI_1 { 
state BACKUP 
priority 96 
advert_int 1 
virtual_router_id 50 
garp_master_delay 1 
interface eth0 
authentication { 
auth_type PASS 
auth_pass Kxiaokk345Pix 

track_interface { 
eth0 

virtual_ipaddress { 
192.168.1.100 


track_script { 
chk_haproxy 

notify_master "/etc/keepalived/mailnotify.py master" 
notify_backup "/etc/keepalived/mailnotify.py backup" 
notify_fault "/etc/keepalived/mailnotify.py fault" 

###### --- haproxy存活状态检测脚本 
#!/bin/bash 

# desc: check haproxy service 

A=`ip address show eth0 | grep 192.168.1.100 | wc -l` 
B=`ps -C haproxy --no-heading | wc -l` 

if [ $A -eq 1 ]; then 
if [ $B -eq 0 ]; then 
/usr/local/haproxy/haproxy.sh start 
sleep 3 
fi 
fi 
######---- 

主备切换时邮件提醒程序(此程序源自litus,有小改动,调试通过) 
#!/usr/bin/python 
#coding: utf-8 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 
from email.MIMEImage import MIMEImage 
from email.Header import Header 
import sys 
import smtplib 

#------------------------------- 
# file: mailnotify.py 
# desc: send notify email 

#------------------------------- 
strFrom = 'toplover@sina.com' 
strTo = 'toplover@126.com' 
smtp_server = 'smtp.sina.com' 
smtp_user = 'toplover' 
smtp_pass = 'xxx***xxx' 

if sys.argv[1] != "master" and sys.argv[1] != "backup" and sys.argv[1] != "fault": 
sys.exit() 
else: 
notify_type = sys.argv[1] 

mail_title = "[crt] Haproxy-notify-info" 
mail_body_plain = notify_type + 'alive,please check it now' 
mail_body_html = '<b><font color=red>' + notify_type + 'alive,please check it now' 

msgRoot = MIMEMultipart('related') 
msgRoot['Subject'] = Header(mail_title,'utf-8') 
msgRoot['From'] = strFrom 
msgRoot['To'] = strTo 

msgAlternative = MIMEMultipart('alternative') 
msgRoot.attach(msgAlternative) 

msgText = MIMEText(mail_body_plain, 'plain', 'utf-8') 
msgAlternative.attach(msgText) 

msgText = MIMEText(mail_body_html, 'html', 'utf-8') 
msgAlternative.attach(msgText) 

smtp = smtplib.SMTP() 
smtp.connect(smtp_server) 
smtp.login(smtp_user,smtp_pass) 
smtp.sendmail(strFrom, strTo, msgRoot.as_string()) 
smtp.quit() 
到此完成了简单的haproxy+keepalived负载均衡主从热备功能。 
不明之处请参阅haproxy官方cofiguration.txt文件及keepalived官方文档。

延伸 · 阅读

精彩推荐
  • CentosCentOS 最新版本git的安装教程

    CentOS 最新版本git的安装教程

    本文主要给大家介绍了CentOS 最新版本git的安装教程,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧...

    CentOS教程网9252021-11-29
  • CentosCentOS7 阿里云的yum源使用详解

    CentOS7 阿里云的yum源使用详解

    这篇文章主要介绍了CentOS7 阿里云的yum源使用详解的相关资料,这里对备份yum源,添加EPEL源,和缓存清理,进行了介绍,需要的朋友可以参考下...

    天王9312020-12-28
  • Centos使用Xshell连接Centos 6.6服务器操作图文教程

    使用Xshell连接Centos 6.6服务器操作图文教程

    这篇文章主要介绍了使用Xshell连接Centos 6.6服务器操作图文教程,本文用详细的操作步骤讲解了如何使用Xshell连接Centos服务器,需要的朋友可以参考下 ...

    脚本之家4032019-09-18
  • CentosCentOS系统下软件包的制作方法和过程详解

    CentOS系统下软件包的制作方法和过程详解

    今天小编将为大家带来的是CentOS系统下软件包的制作方法和过程详解;希望对大家会有帮助,有需要的朋友一起去看看吧...

    CentOS之家4802019-05-30
  • Centoscentos 7中添加一个新用户并授权的步骤详解

    centos 7中添加一个新用户并授权的步骤详解

    这篇文章主要给大家介绍了关于在centos 7中添加一个新用户并授权的步骤,文中将实现的步骤介绍的非常详细,通过文中介绍的步骤可以轻松的创建一个新...

    Ryan.Miao9832022-02-12
  • Centos在CentOS系统上安装Docker的教程

    在CentOS系统上安装Docker的教程

    这篇文章主要介绍了在CentOS系统上安装Docker的教程,Docker是当下人气最为火热的容器类虚拟软件,需要的朋友可以参考下 ...

    开源中文社区3952019-09-17
  • CentosCentOS上SVN服务器端程序的安装与使用教程

    CentOS上SVN服务器端程序的安装与使用教程

    SVN是一款高人气的软件项目版本控制系统,由于其在Windows的客户端的简易操作,在Git的浪潮中仍然保有很多的用户数量,这里我们就来看一下CentOS上SVN服务器端...

    cnblogs3902019-07-16
  • CentosCentOS6.2网卡设置

    CentOS6.2网卡设置

    如果你想让服务器可以更新、让网友访问你的LINUX服务器,那一定要设置LINUX网上给网卡绑定一个IP,下面我们就介绍CentOS6.2网卡设置IP的方法。...

    CentOS教程网10092021-10-03