`

Cent OS 6.2 LVS+keepalived 搭建

 
阅读更多

OS: Cent OS 6.2

 

(1)  下载、安装 ipvsadm

        网址:   http://www.linuxvirtualserver.org/software/ipvs.html

        make 的时候出现错误,缺少 "netlink\netlink.h".从网上查找资料后,找到原因是没有安装 libnl-devel 包,那就安装吧。

        yum install -y libnl* popt* kernel-headers kernel-devel

        之后,make。 OK!

 

(2)下载、安装 keepalived

        网址:   http://www.keepalived.org/download.html

        首先  ./configure  但是两个关键项是NO

        Use IPVS Framework       : No
        IPVS sync daemon support : No

        解决办法:  没有指定linux源码的路径

        ./configure --with-kernel-dir=/usr/src/kernels/2.6.xx     //根据自己的实际路径替换

        之后一切正常会看到:

        Use IPVS Framework       : Yes
        IPVS sync daemon support : Yes

        之后,make && make install

(3)写配置文件

       最简单的实验环境是3台server

       master:  192.168.1.61

       web1: 192.168.1.62

       web2: 192.168.1.63

       vip:      192.168.1.100

 

       master:

       mycp_install.sh

#! /bin/bash 

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/
cp /usr/local/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig --level 2345 keepalived on


# create the config file of the keepalived 

VIP=192.168.1.100
WEB1=192.168.1.62
WEB2=192.168.1.63
LB_ETH=eth0

cat << EOF > /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_1 {
	state MASTER # if this is a backup LB, then replace it with BACKUP
	interface $LB_ETH
	virtual_router_id 51
	priority 100 # the backup's priority should be little than this
	adver_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		$VIP # if there are many ips ,then write each for one line
	} 
}

virtual_server $VIP 80 {
	delay_loop 6 # every 6 seconds querys the realserver's status
	lb_algo wrr # LVS algorithm
	lb_kind DR # LVS work mode , Direct Routing
	persistence_timeout 60  # the same ip link in 60 seconds will be send to the same server
	protocol TCP # use TCP protocol checking the realserver's status

	real_server $WEB1 80 {
		weight 3 
		TCP_CHECK {
			connect_timeout 10 # 10 secs no response will be recognised with timeout
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	} 

	real_server $WEB2 80 {
		weight 3 
		TCP_CHECK {
			connect_timeout 10 # 10 secs no response will be recognised with timeout
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	} 
}
EOF

       在master上运行此脚本,为啥?因为keepalived的install只给安装到了/usr/local中,并没有放到/etc下面的配置文件中。只能自己移动了,为了以后方便,写一个脚本,以后再配置,就直接运行就OK了!

 

       两个realserver上运行的脚本:

       lvs_real

 

#! /bin/bash

#Configuration File for real server
VIP=192.168.110.100
. /etc/rc.d/init.d/functions

case "$1" in
start)
	ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
	/sbin/route add -host $VIP dev lo:0
	echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
	echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
	sysctl -p > /dev/null 2>&1
	echo "RealServer Start OK"
	;;
stop)
	ifconfig lo:0 down
	route del $VIP > /dev/null 2>&1
	echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
	echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
	echo "RealServer Stoped"
	;;
*)
	echo "Usage: $0 {start|stop}"
	exit 1
esac

exit 0 

    这里解释一下arp_ignore和arp_announce:

 

   1> arp_ignore

         arp_ignore 是linux中应答arp的策略,基本的值有3个,0,1,2 可以到8,8是拒绝应答也就是关闭。

         0 是默认值,就是对于任何请求,不管问的是哪个网口,只要本地所有的ip里有一个是匹配的,这个网口就会回答arp请求。

         1 是如果我这个网口有这个ip,那么我就回应你。就是是我的活我就干

         2 这个条件就更苛刻一点了,不光是我的活,你还得有资格问我,就是请求arp包的ip地址必须在同一个网段。

         这里我们设置成了1,也就是对于real server上,不会回应vip对应的arp请求包,因为我们对外是一个整天啊,只有负载均衡器master有这个权利啊,大家不能抢功劳不是,不然就乱套了。外界只会找到master的 mac地址

    2> arp_announce

         arp_annouce是linux中发送arp请求包的策略。也就是用哪个ip,哪个mac来请求的问题。基本3个值0,1,2

         0  使用本地网卡上任何一个ip地址和mac都可以

         1  尽量使用对应网口上的网段的ip地址和设备的mac

         2  使用对应网卡上的最好的适合请求arp包的ip地址和设备mac

         lvs_announce 设置成2 的原因就是 在客户请求完80端口的数据包发送时需要走出内网,就要找网关,但是此时如果使用vip去发送arp请求,显然网关要糊涂了,一会是master是mac对应vip,一会是real server的mac对应vip,也就是所谓的arp欺骗了。所以为了避免这样的情况,就配置成使用网口的ip地址和mac来发送arp请求包。

    为了方便呢,将这个脚本放到/usr/bin/下方便以后使用:

 

mv lvs_real /usr/bin
chmod +x /usr/bin/lvs_real

    (4)测试

          1> WEB1和WEB2要求安装一个http服务器,一般centos会自动安上,但是没有启动,如果没有安装的话,安装一下并开启:

 

yum install -y httpd
/etc/init.d/httpd start

cat <<EOF > /var/www/html/index.html
<html>
<head><title>LVS Test Page</title></head>
<body>
<center>    LVS worked!    The real server's ip is : 自己填成web1的,另一个写成web2的,以便观察 
</center>
</body>
</html>
EOF
 

         2> MASTER上要执行的:

 

#service keepalived start    #启动配置对应的lvs侧率,并检查真实的server
#ipvsadm -ln    //查看lvs的情况,用了什么算法,有几台真实服务器在线等等
 

        之后分别在WEB1和WEB2上分别执行lvs_real: 

 

#lvs_real    

           一切正常的话找一个浏览器,键入: http://192.168.1.100 就会看到lvs分配到对应的页面了,根据上面的配置文件,一分钟内的链接都会被分配到同一台real server上,如果总是看到同一台real server的内容,不要灰心啊,找另一台机器在开一个浏览器很快就可以看到,当然可以在配置的时候选择不同的均衡算法和链接保持时间来进行快速查看两台real server是不是都好使。

 

           说一下我配置的过程中遇到的问题,在最后一步总是MASTER不转发包,这个是由于centos防火墙把本机没开启的80端口的服务相关的数据包都拒绝掉了,所以,总是看不到应该访问的页面,于是直接关了防火墙,应该是给iptables加一个规则,也就是80端口的数据包可以通过。不关闭的话,添加下面的规则也是可以的:

 

iptables -I INPUT -p tcp -dport 80 -j ACCEPT

           关闭防火墙的方法:

          /etc/init.d/iptables status

         /etc/init.d/iptables stop

         还有一个 /etc/sysctl.conf 中

         net.ipv4.ip_forward = 1

         Ok!基本成功了,下一步是看源代码了。。。。苦逼和兴奋的日子还在后面,因为源码面前没有秘密。

 

参考资料: 

arp_ignore && arp_announce  【http://apps.hi.baidu.com/share/detail/14756745】

keepalived configure时错误       【http://blog.sina.com.cn/s/blog_8317516b0100weom.html】

lvs+keepalived 的脚本等基本配置【http://www.xtgly.com/2010/12/17/centos-5-5-lvskeepalived-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.htm】

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    CentOS 6.0 配置LVS(DR)+KeepAlived+nginx

    主要实现双机热备和lvs虚拟化,使用KeepAlived+nginx。

    application(Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程)

    在Cent OS系统上安装和部署MongoDB,可以分为几个关键步骤:安装Cent OS、安装MongoDB、配置单节点、设置副本集以及部署分片集群。下面将详细讲解这些过程。 **1. 安装Cent OS** 首先,确保你的计算机上已经安装了...

    lamp搭建实验文档(VMWare+Cent Os7+Mariabd+PHP).docx

    【LAMP环境搭建详解】 LAMP(Linux + Apache + MariaDB + PHP)是Web开发领域常用的服务器环境,尤其适用于PHP编程。本实验将通过VMware虚拟机在CentOS7操作系统上搭建这一环境,以下是详细步骤: 1. **安装VMware...

    Cent OS上配置Apache2 + SVN

    Cent OS上配置Apache2 + SVN Cent OS上配置Apache2 + SVN

    solusvm+xen 搭建教程

    solusvm+xen 搭建教程,在cent os 5.8 32bit 环境下

    cent os

    cent os cent os

    简单记录Cent OS服务器配置JDK+Tomcat+MySQL

    【知识点详解】 在本文中,我们将探讨如何在CentOS服务器上配置JDK、Tomcat以及MySQL,这是一个典型的Java Web应用程序部署流程。 1. **连接服务器**: 首先,你需要通过SSH(Secure Shell)连接到你的CentOS...

    cent os 6.5 编译hadoop2.6.0源码

    在本文中,我们将深入探讨如何在Cent OS 6.5操作系统上编译Hadoop 2.6.0的源码,以及如何利用编译生成的lib包目录替换官方下载资源中的对应目录。这个过程对于那些希望自定义Hadoop配置、优化性能或解决特定环境下的...

    虚拟机上安装Cent-OS全过程,44张截图

    虚拟机上安装 Cent-OS 全过程 本文将指导您在虚拟机上安装 Cent-OS 操作系统,总共包含 44 张截图,涵盖安装的每一个步骤。通过这篇文章,您将了解如何在虚拟机上安装 Cent-OS 操作系统,并掌握相应的安装步骤。 ...

    申延超 Cent OS 5 Linux NFS 服务 安装

    申延超 Cent OS 5 Linux NFS 服务 安装

    CentOS系统中安装配置Apache+PHP+MySQL环境.docx

    ... Apache安装和配置 在CentOS系统中安装Apache需要下载Apache的源代码,使用wget命令下载...本文档提供了在CentOS系统中安装配置Apache、PHP和MySQL环境的详细步骤和配置参数,旨在帮助用户快速搭建Web开发环境。

    Cent5的 Postfix+Extmail

    本文档旨在详细介绍如何在CentOS 5操作系统上安装和配置Postfix与Extmail来搭建邮件服务器。Postfix是一款开源的MTA(邮件传输代理),以其高效稳定而闻名,被广泛应用于企业级邮件服务。Extmail则是一款基于Web的...

    Cent OS上 Redis的安装部署(最新详细教程)application

    在本教程中,我们将深入探讨如何在Cent OS操作系统上安装并部署Redis,这是一个高效、开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。Redis以其高速性能和丰富的数据结构支持而备受青睐。以下是详细...

    Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程 MARKDOWN文档

    # CentOS安装 + MongoDB安装部署(单节点+副本集+分片)详细教程 ## 一、CentOS系统安装 在开始MongoDB的安装之前,首先需要确保你有一台运行CentOS的操作系统。以下是如何在CentOS上进行安装的步骤: ...

    Cent OS 下安装oracle 10

    **6.2 修改 `/etc/profile` 文件** - 在 `/etc/profile` 文件末尾加入以下内容。 ``` if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/bash" ]; then . $HOME/.bash_profile fi fi ``` #### 七、启动安装...

    Cent OS 7、Nginx 1.6、PHP 5.6、MySQL 5.6开发环境搭建,源码编译安装_v

    Cent OS 7、Nginx 1.6、PHP 5.6、MySQL 5.6开发环境搭建,源码编译安装_vagrant-lnmp

    Cent OS6.5 安装nodeJS(分分钟搞定)

    ### Cent OS6.5安装Node.js详解 #### 标题:Cent OS6.5 安装nodeJS(分分钟搞定) #### 描述:本文将详细介绍如何在Cent OS6.5系统上快速安装Node.js。 #### 标签:node npm #### 内容概述 在本文中,我们将...

    cent0S下php环境搭建

    ### CentOS7 下 PHP7 + NGINX + MySQL 环境搭建详解 #### 一、CentOS7 的安装与配置 ##### 基本安装流程 - **进入安装界面**:选择 "Install CentOS 7"。 - **选择安装语言**:推荐选择简体中文。 - **软件选择**...

    Cent OS 配置日志服务器和配置详解.docx

    【Cent OS 配置日志服务器和配置详解】 在IT管理中,日志服务器的配置是至关重要的,它能够集中收集、存储和分析来自不同系统的日志信息,从而提高故障排查效率,确保网络安全和合规性。本文将详细介绍如何在Cent ...

Global site tag (gtag.js) - Google Analytics