当前位置:   article > 正文

负载均衡_用户将请求发送给负载均衡

用户将请求发送给负载均衡

负载均衡

原理:

用户将请求发送到负载均衡服务器,负载均衡服务器将请求分发到后面的集群

  1. nginx负载均衡一种实现方式

原理

两种模式:

1,作内容服务器的替身

保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器。内容服务器在防火墙内部受到安全保护。

通过防火墙中的特定通路,将请求发送到内容服务器。内容服务器再通过该通道将结果回传给代理服务器。代理服务器将检索到的信息发送给客户机,如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。

2,作为内容服务器的负载均衡器

可以在一个组织内使用多个代理服务器来平衡各 Web 服务器间的网络负载。在此模型中,可以利用代理服务器的高速缓存特性,创建一个用于负载平衡的服务器池。如果 Web 服务器每天都会接收大量的请求,则可以使用代理服务器分担 Web 服务器的负载并提高网络访问效率。

对于客户机发往真正服务器的请求,代理服务器起着中间调停者的作用。代理服务器会将所请求的文档存入高速缓存。如有多个代理服务器,DNS 可采用“循环复用法”选择其 IP 地址随机选择路由。

可以使用多个代理服务器来处理对一个高用量内容服务器的请求,可提高负载和效率。在初始启动期间,代理服务器首次从内容服务器检索文档,此后,对内容服务器的请求数会大大下降。


Nginx特点:

1.工作在7层,可以对做正则规则处理;(如:针对域名、目录进行分流)

2.配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测;

3.抗高并发,采用epoll网络模型处理客户请求;

4.只支持HTTP和EMail,应用范围比较少;

5.nginx主要是HTTP和反向代理服务器,低系统资源消耗。

反向代理五种算法:

  1. 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    2、weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    3、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    4、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    5、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

DEMO说明:

Yum分开安装的nginx如果不自定义安装路径,配置文件在/etc/nginx/conf.d/default.conf,集成的环境默认路径/usr/local/

1、轮询:

当有请求到www.test2.com 请求会被分发到对应的upstream设置的服务器列表上test2的每一次请求分发的服务器都是随机的

upstream lunxun {
    server 172.16.0.21:8066;
    server 192.168.76.98:8066;
}


server {
    listen 80;
    server_name www.test2.com;

    location /{
        proxy_pass http://lunxun;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


2、weight

当有请求到www.weight.com 请求会被分发到对应的upstream设置的服务器列表上weight的每一次请求分发的服务器都是按照比例分配的

upstream lunxun {
    server 172.16.0.21:8066 weight=1;
    server 192.168.76.98:8066 weight=2;
}


server {
    listen 80;
    server_name www. weight.com;

    location /{
        proxy_pass http://lunxun;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}




3、Ip_hash

当有请求到www.test1.com 时test1刚是根据来访问ip的hashid来分发到指定的服务器,也就是说该IP的请求都是转到这个指定的服务器上
upstream hash{
    ip_hash;
    server 172.16.125.76:8066 weight=10;
    server 172.16.125.76:8077 down;
    server 172.16.0.18:8066 max_fails=3 fail_timeout=30s;
    server 172.16.0.18:8077 backup;




server {
    listen 80;
    server_name www.test1.com;

    location /{
        proxy_pass http://hash;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4、url_hash(第三方插件)

需要安装PCER与Nginx_upstream_hash

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库,用pcre来解决C语言中使用正则表达式的问题。

Nginx_upstream_hashupstream采用一致性hash


upstream test {

server squidIP1:3128;

servse squidIP2:3128;

           hash  $request_uri;

           hash_method  crc32;

        }


5fair(第三方插件)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

配置文件:

upstream test {

server 192.168.109.5:81;

servse 192.168.109.3:80;

fair;

}


根据服务器的本身的性能差别及职能,可以设置不同的参数控制。

down 表示负载过重或者不参与负载

weight 权重过大代表承担的负载就越大

backup 其它服务器时down时才会请求backup服务器

max_fails 失败超过指定次数会暂停或请求转往其它服务器

fail_timeout 失败超过指定次数后暂停时间

二、LVS实现负载均衡的一种方式

LVS工作原理

LVS的三种工作模式

一、NAT模式(VS-NAT)

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS(认证服务器)的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

二、IP隧道模式(VS-TUN)

原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

三、直接路由模式(VS-DR)

原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。


LVS特点:

   1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;

   2.稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)

   3.应用范围比较广,可以对所有应用做负载均衡;

   4.不支持正则处理,不能做动静分离。


常用四种算法:

   1.rr:轮叫,轮流分配到后端服务器;

   2.wrr:权重轮叫,根据后端服务器负载情况来分配;

   3.lc:最小连接,分配已建立连接最少的服务器上;

   4.wlc:权重最小连接,根据后端服务器处理能力来分配。

1、lvs(nat模式配置)

我的服务器:

LVS-server  IP:192.168.1.101(lvs服务器、调度器)

Real-Server1 IP: 192.168.1.80(需要真实工作web服务器)

Real-Server2 IP: 121.199.28.128 (需要真实工作web服务器)


(1)安装ipvsadm(ip虚拟服务器):yum -y install ipvsadm* 

(2)然后执行:[root@localhost ~]#ipvsadm –C(清除内核虚拟服务器表中的所有记录。)

(3)

(4)ipvsadm –L(显示内核虚拟服务器表)

第一行是添加一条新的虚拟IP记录。这个新的IP是192.168.1.101。第二、三行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为net模式。

(rr是轮叫算法 ,-m代表net模式

还有一些其他参数:http://zh.linuxvirtualserver.org/node/5

配置成功,当你访问192.168.1.101是会跳转到两台rs上

            Session共享解决方案

  1. 为什么要使用Session共享?

1、负载均衡:通过前面的负载均衡,可以知道我们做负载,是将用户的请求分发到不同的服务器上。而我们存session默认会存到本地,那我们在其他服务器上是读取不到session的,这样造成的结果就是,你已经在A服务器上登录了,当你再下一步操作时,将你的请求发送给了B服务器,那你仍然处在未登录状态。。

2、单点登录:因为同一台电脑上,每个浏览器请求服务器生成的sessionid不同,这样你在A浏览器登录了,到B的时候还是需要登录,但是这样会很麻烦,换个浏览器就要重新登录。如果要实现两个浏览器同时处在登录状态,那就需要session共享

  1. 了解session工作原理

在解决问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 session_id() 获取/设置)。SESSION ID 可以通过两种方式保留在客户端,使得请求不同的页面时,PHP 程序可以获知客户端的 SESSION ID;一种是将 SESSION ID 自动加入到 GET 的 URL 中                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ,或者 POST 的表单中,默认情况下,变量名为 PHPSESSID;另一种是通过 COOKIE,将 SESSION ID 保存在 COOKIE 中,默认情况下,这个 COOKIE 的名字为 PHPSESSID。这里我们主要以 COOKIE 方式进行说明,因为应用比较广泛。

服务端通过客户端传递的session_id区分用户,用来标记用户的登录状态。



用户再次发送请求的时候,把服务端返回的session_id通过cookie[或者URL传参]的形式传递到服务端,这样服务端就可以区分出来具体操作的用户。


  1. 如何解决负载均衡之后的session共享问题?

    1. 不使用session,换作cookie

把session改成cookie,就能避开session的一些弊端。【安全性较低】

浏览器对session存在大小不同,Safari 4097字节 (苹果浏览器)包括名,值和等号

Firefox 4097

O允许cookies最大长度 4096字节

IE允许cookies最大长度 4095字节

谷歌允许cookies最大长度

    1. 数据库记录session信息

使用数据库记录session信息,session的使用频率比较高,如果存在数据库中,频繁的读取会对数据库产生较大的压力,网站性能瓶颈一般都存在数据库,

    1. 负载均衡的时候使用ip_hash算法进行分发

    使用ip_hash可能会导致某一台服务器负载较大。如果某段时间内服务器进入了很多固定IP代理的请求[翻墙,代理] ,如果代理IP的负载过高就会导致ip_hash对应的服务器负载压力过大,这样ip_hash就失去了负载均衡的作用了。

    1. 对session文件进行同步。

    使用同步工具对session文件进行同步,保证负载服务器的session文件都是一致的,这种做法虽然可以解决session共享的问题,同样的内容会存在多个服务器上,而且部分服务器存在的session文件可能从开始到结束完全没有使用到,浪费了服务器的资源。 【rsync,inotify-tools等】

    1. 使用memcache或者redis保存session信息 [建议]

    相比文件取信息,从内存取数据速度要快很多,而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。其缺点是 session 数据都保存在 memory 中,一旦宕机,数据将会丢失。但对 session 数据来说并不是严重的问题。

实现:

  1. session存cookies(setcookie(1,2,3,4,5,6))

利用cookies跨域,跨域是cookies中比较热门的问题。如果是同一个主域比较简单,可以通过setsession中的domain参数,设置一个主域,一下的子级域名都可以用

  1. session入库

原理:我们要实现在一台服务器1存session在另一台服务器2也可以得到session值,因为服务器2没有session存储的文件,所以可以将它入库。服务器1将数据存到数据库,服务器也连接同一个数据库,这样服务器2就可以取到它的值。

步骤:首先要改变session的存储方式,可以在php.ini中将session.save_handler = user,也可以用ini_set('session.save_handler','user')来修改。Session入库需要一个函数session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');

其中open方法是会用到,read方法读取是用一些其他方法,也和它的名字对应,方法名可以随意。注意在每一个需要session的页面都要加载session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');这个函数,所以将它写在单独的文件里,直接incude()包含它

  1. session存入redis或memcache

session存入redis,同样的需要修改存储机制,也是两种方法第一个该配置文件,第二个则是利用函数

ini_set('session.save_handler','redis');

设置存储方式为redis

ini_set('session.save_path','tcp://192.168.1.19:6379');

存储路径为redis服务器的ip,后面是端口号

取值的时候也是一样的设置

Memcache同理

4、session文件进行同步

使用文件同步rsync

Rsync文件同步工具

一、概念

rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。

特点:

1、可以镜像保存整个目录树和文件系统。
 2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
 3、无须特殊权限即可安装。
 4、优化的流程,文件传输效率高。
 5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
 6、支持匿名传输。

  1. 原理

Rsync 使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。


  1. Rsync两种工作方式

1) 传输本地文件

2)传输服服务端和客户端之间的数据

  1. 安装配置服务器端(服务器与客户端)

  1. yum install rsync(yum安装)

  2. 更改rsync的配置文件vi /etc/rsyncd.conf(如果rsync.conf不存在,则自己创建)

#全局参数

*uid = root  #该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是“nobody”

*gid = root  #该选项指定当该模块传输文件时守护进程应该具有的gid,默认值是“nobody”

log file = /var/log/rsyncd.log  #指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。

*use chroot = no

*max connections = 4

*lock file = /var/run/rsync.lock  #指定支持 max connections 参数的锁文件。

pid file = /var/run/rsyncd.pid #rsync 的守护进程将其 PID 写入指定的文件。

#模块参数

[test]

comment = this is test  #给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户

path = /rsync  #指定当前模块在rsync服务器上的同步路径,该参数是必须指定的。

ignore errors = yes   # 指定 在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。

read only = no  #指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。

list = yes   #指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。

auth users = root # 认证的用户名,rsync的用户

secrets file = /etc/rsyncd.secrets  # 密码存放文件(与上面的用户名匹配)

hosts allow=192.168.1.24  # 允许哪些主机访问  *表示都可以 (hosts deny = *  # 禁止哪些主机访问

参数说明(易懂):http://blog.chinaunix.net/uid-20794164-id-1840726.html

参数、命令(易懂):http://blog.sina.com.cn/s/blog_4128ae07010113r5.html

参数、命令说明(全面):http://www.cnblogs.com/hbycool/articles/2159392.html

配置好rsyncd.conf,要创建认证的用户名:密码文件rsyncd.secrets

格式(用户名:密码  例如  root:666)

chmod 600 /etc/rsyncd.secrets(要将权限改为600,不然报错)

启动rsync

rsync -–daemon –config=/etc/rsyncd.conf

可能报错(failed to create pid file /var/run/rsyncd.pid: File exists):这是个认证pid的文件,因为要写入,可能是冲突了,所以删除重建

删除这个文件:rm -rf /var/run/rsyncd.pid

然后再次启动

查看进程:

ps -ef | grep rsync 

root      3387  0.0  0.0 114640   552 ?        Ss   17:12   0:00 /usr/bin/rsync --daemon

root      3423  0.0  0.0 112656   980 pts/0    S+   17:14   0:00 grep --color=auto rsync

这就是启动了,然后设置客户端

  1. 客户端(服务器与客户端)

  1. 安装rsync

  2. 同样要创建一个认证密码文件,同样要修改为666权限,内容格式为: password,只需要写密码就可以

  3. rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd.secrets root@192.168.1.101::test   /rsync(从服务端拉取文件)

  4. rsync -vzrtopg --progress --password-file=/etc/rsyncd.secrets /rsync/* root@192.168.1.101::test(向服务器上传文件)

  -v表示verbose(详细)
    -z表示zip(压缩)
    -r表示recursive(递归目录)
    -topg是保持文件原有属性如o=owner(属主)、t=times(时间)、p=perms(权限)、 g=group(组)的参数
    -H表示保持硬连接
    -l:保留软链结
    -u:表示只更新源文件比目标时间新的文件
    --progress是指显示出详细的进度情况
    --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。

--password-file :认证密码的文件

root@192.168.1.101::test我的认证用户为root,192.168.1.101是我的服务端ip,test是我服务器配置的模块

/rsync  这是我将服务器上共享的内容,放在客户端的这个文件

-这就完成了基本的文件共享

这是我出现的错误:

  1. 前用的服务器与Linux配置的,但是总是报错不成功,最后改为两个虚拟机

  2. @ERROR: auth failed on test   这是rsync的test模块配置出问题了,我是认证用户名出错了

  3. @ERROR: access denied to test from unknown (192.168.1.24) 是连接的出错了

  4. rsync: failed to connect to 192.168.1.42 (192.168.1.42): No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(122) [sender=3.0.9]

需要关闭防火墙或者让防火墙允许,不然报错

  1. 还有给文件权限

  1. 服务端与客户端双向时时同步

一、原理:

Rsync 是基于rsync算法校验源(SRC)与目标(DEST)之间的差异实现数据同步的。也就是说,当使用rsync工具同步数据时候,只复制源(SRC)发生改变的文件,到目标(DEST),这类似于增量备份。所以rsync同步数据的速度是很快的。但是rsync的传输性能有点差,在海量小文件需要同步时,表现很差劲。因为rsync是基于文件同步的(不是块级别的),在传输之前还要进行校验。

   Rsync的工作模式有多中,使用rsync的服务模式来构建:主/从服务器的数据同步。此时rsync工作为守护进程监听在:TCP/873, 能接收客户端的数据同步请求。

二、配置与实现方法:

1、http://blog.csdn.net/adparking/article/details/7636617

2、http://9528du.blog.51cto.com/8979089/1545880/

3、http://blog.sina.com.cn/s/blog_9f4962b10102vqua.html

            Keepalived高可用

  1. 简介

Keepalived实现一个双机热备高可用功能,检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

  1. Keepalived的工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

Vrrp详解:

VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。[1]  一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协


议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA 坏掉时,本网段内所有以RouterA 为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP 就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。

缺省路由:通常用相同的处理方式把报文指向另一个路由器。如果有其他路由匹配,则按照该路由规则转发相应的报文,否则该报文将被转发到该路由器的缺省路由。这个过程不断重复,直到一个数据包被传递到目的地。设备的缺省路由通常被也称为默认网关,它经常提供如数据包过滤,防火墙或代理服务器等功能。

路由下一跳:路由的下一个点。如果路由器没有直接连接到目的网络,它会有一个提供下一跳路由的邻居路由器,用来传递数据到目的地。

VRRP的工作过程如下:

  1. 路由器开启VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为主用路由器,优先级低的成为备用路由器。主用路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;备用路由器则启动定时器等待通告报文的到来。

  2. VRRP在不同的主用抢占方式下,主用角色的替换方式不同:

l在抢占方式下,当主用路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为主用路由器;否则将保持备用状态。

l在非抢占方式下,只要主用路由器没有出现故障,备份组中的路由器始终保持主用或备用状态,备份组中的路由器即使随后被配置了更高的优先级也不会成为主用路由器。

  1. 如果备用路由器的定时器超时后仍未收到主用路由器发送来的VRRP通告报文,则认为主用路由器已经无法正常工作,此时备用路由器会认为自己是主用路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出主用路由器,承担报文的转发功能。


  1. 配置keepalived

1.准备两台服务器

主服务器:192.168.1.101

从服务器:192.168.1.24

虚拟ip:192.168.1.254

两台机器安装keepalived

2.安装keepalived需要的依赖包

yum install openssl-devel(openssl分成了几个部分openssl-devel这个是包含了头文件,头文件参考,某些库文件等跟开发相关的东西
yum install popt-devel(popt解析命令行选项的一些开发软件的包)
yum install ipvsadm(ip虚拟服务器
yum install libnl*

3.下载安装keepalived

yum install keepalived

4.修改主服务器配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

#指定keepalived在发生切换时需要发送email到的对象,一行一个,没有服务器配置邮箱可将其注释掉

  notification_email {

#acassen@firewall.loc    

#sysadmin@firewall.loc

   }

  #notification_email_from Alexandre.Cassen@firewall.loc #指定发件人

   #smtp_server192.168.200.1 #指定smtp服务器地址

  #smtp_connect_timeout 30 #指定smtp连接超时时间

   router_id  192.168.1.101  #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。

}

}

 

vrrp_instance VI_1 {

    state MASTER #指定那个为master,那个为slave

    interface eno16777736  #设置实例绑定的网卡

   virtual_router_id 51# VPID标记和slave一样

priority 100  #主机高于slave,优先级

    advert_int 1 #检测服务器状态间隔时间

    authentication{#验证类型和密码

        auth_typePASS

        auth_pass 1111

    }

   virtual_ipaddress {

        192.168.1.254#虚拟IP地址,可以为多个

    }

}

其他配置详解:http://www.cnblogs.com/linuxliu/p/5825108.html

            http://blog.csdn.net/jibcy/article/details/7826158

开启服务

systemctl start keepalived

5.修改slave配置

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

 #notification_email {

  #  644856452@qq.com

  #}

 #notification_email_from Alexandre.Cassen@firewall.loc

  #smtp_server127.0.0.1

 #smtp_connect_timeout 30

  router_id 192.168.1.24 #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。

}

 

vrrp_instance VI_1 {

   state SLAVE  #slave配置

  interface eno16777736

  virtual_router_id 51

   priority 99#低于主服务器100

#nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高


   advert_int 1

   authentication {

       auth_typePASS

       auth_pass1111#验证密码,两台机器保持一致

   }

 

  virtual_ipaddress {

      192.168.1.254

   }

}

开启服务

systemctl start keepalived

测试:

6.在两台服务器web根目录下建立一个index.php文件,写上本机ip地址

7.在两台机器上使用 "ip add" 查看虚拟 IP 信息

可以看到,虚拟Ip此时绑定在主机上

在浏览器中输入虚拟ip192.168.1.254(虚拟的ip地址)此时将看到,你在master服务器中的index.php中写的内容

8、将matser服务器的keepalived关掉


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号