天天看点

LVS+Keepalived实现高可用性集群

LVS+Keepalived 实现高可用性集群 一、lvs+keepalived集群基本架构 Lvs

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);

十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

下面是在网上参考的典型的系统架构图

LVS+Keepalived实现高可用性集群

针对我们服务器放在IDC机房的特点,我参考上面的架构做了一些修改

LVS+Keepalived实现高可用性集群

这个方案中,负载均衡层采用两台服务器做DR,架构lvs+keepalived,其中master DR调度工作,把用户的请求分配到web服务器上,当master DR故障时,backup DR自动切换状态到master,完成负载均衡的工作,mater DR恢复后backup DR又自动切换状态到backup。如果出于经济考虑,可以暂时只用一台服务器做DR。

Web服务器层是真正处理用户请求的,这里初步计划两台real server,DR按照一定的规则把用户的请求分配到real server上,要保证不同的real server有着一致的数据库和web目录。数据库的一致常见的有集群和复制技术,综合考虑,在两台real server之间采用mysql的双主复制来现在real server 可以同时读取和写入数据库,并保证数据库的一致。

这里的共享存储区采用一台NFS服务器,建立共享输出目录,然后两台real server 挂载这个输出目录,实现web目录文件的一致。

这样,则需要5台服务器,再加上VIP地址,则需要6个公网IP地址,对于www.faxingw.cn,VIP是122.224.6.84,用户在浏览器上输入域名,经过DNS服务器解析成122.224.6.84,经过负载均衡调度器,将用户请求分配到real server上,这里计划采用基于直接路由的负载均衡(VS/DR,即Virtual Server via Direct Routing)技术,VS/DR通过改写请求报文的MAC地址,将请求发送到real server,而real server将响应直接返回给客户,是3种负载调度方式中性能最好的,但要求director server与real server必须由一块网卡连在同一物理网段上。

按照上面改过的架构方案在虚拟机上安装测试,给出下面的地址规划

Director server1:192.168.1.198

Director server2:192.168.1.196

Real server1:192.168.1.199

Real server2:192.168.1.197

NFS server1:192.168.1.201

NFS server2:192.168.1.202

VIP:192.168.1.200

二、安装LVS+keepalived软件

LVS是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,主要用于完成用户的请求到达负载调度器后,如何将请求发送到每个real server节点,real server节点如何返回数据给用户。这里我们的操作系统采用centos5.5,该版本内核默认支持LVS功能,也可以通过如下命令检查kernel是否已经支持LVS的IPVS模块:

#modprobe –l |grep ipvs

这里选择安装ipvsadm-1.24版本,我在虚拟机上安装时出错,OpenSSL is not properly installed on your system,系统缺少openssl-devel软件包,我通过配置yum本地源安装,然后yum install openssl-devel,问题解决了,装好了可以通过ipvsadm –help检查安装是否成功,两台director server 都要安装。详细的安装步骤这里就不详细说明了。

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据layer3,4,5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而当故障节点恢复正常后,Keepalived又可以自动将此服务器节点重新加入到服务器集群中。这些工作全部自动完成。

这里选择安装的是keepalived-1.1.17.tar.gz,安装过程没有遇到问题,就不介绍了。

同样,安装完成后,可以执行命令:keepalived –help 检查是否安装成功。

三、ipvsadm和keepalived的配置

在direct server上,这里用shell脚本来实现ipvsadm命令行配置

# vi lvsdr.sh

#!/bin/bash

VIP=192.168.1.200

RIP1=192.168.1.199

RIP2=192.168.1.197

/etc/rc.d/init.d/functions

case "$1" in

start)

       echo "start LVS of DirectorServer"

       /sbin/ipvsadm -C

       /sbin/ipvsadm -A -t $VIP:80 -s rr

       /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -m -w 1

       /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -m -w 1

       /sbin/ipvsadm

;;

stop)

echo "Close LVS Directorserver"

/sbin/ifconfig eth0:1 down

/sbin/ipvsadm -C

*)

echo "Usage0{start|stop}"

exit 1

esac

在两台Director server上,这个脚本是一样的,给脚本添加开机启动

下面在Director server上配置keepalived,根据安装路径,keepalived的配置文件是/etc/keepalived/keepalived.conf,

! Configuration File for keepalived

global_defs {

   router_id LVS_MASTER

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

auth_type

PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.200

virtual_server 192.168.1.200 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    persistence_timeout 50

    protocol TCP

    real_server 192.168.1.199 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

        }

   real_server 192.168.1.197 80 {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

   }

这是director server 1 的配置,在director server2 上我们只有把master 改为 backup,priority改为80就可以了

下面介绍real server上的配置,两台real server 执行下面的脚本

# vi lvsrs.sh

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/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

#end

配置好了之后,配置这些脚本开机启动 例如echo “./root/lvsrs.sh” >>/etc/rc.local

这样配置基本完成。

四、搭建和配置NFS服务器

NFS是Network File System的简写,即网络文件系统,NFS允许一个系统在网络上与他人共享目录和文件,通过NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

在CentOS系统中,默认情况下已经安装NFS文件系统,只要用chkconfig配置开机启动即可。

NFS 服务器服务器端配置

登陆到NFS服务器,在虚拟机上我设的IP地址是192.168.1.201,修改NFS系统配置文件。

# vi /etc/exports

在文件里添加如下内容

/home/www 192.168.1.*(rw,sync,no_root_squash)

然后保存提出,添加的内容表示:允许IP地址范围在192.168.1.*的计算机以读写的权限来访问/home/www 目录。

接着执行如下命令,启动端口映射:

# /etc/rc.d/init.d/portmap start

最后执行如下命令启动NFS服务,此时NFS会激活守护进程,然后开始监听client端的请求。配置好了之后,先在NFS服务器上回环测试

# mount –t NFS 192.168.1.201:/home/www /mnt

如果正常,在/mnt目录下应该可以看到/home/www共享目录中的内容。

客户端配置

这里两台real server作为客户端,只需做些简单配置即可

#mkdir /mnt/www     建立共享目录挂载点

#mount -t nfs 192.168.1.201:/home/www /mnt/nfs -o nolock    挂载共享目录到本地

两台real server的配置都一样,这里的共享目录作为web主目录,两台real server可以同时读写该目录和文件,并保持目录和文件一致。在nginx配置文件里修改web主目录的路径,修改fastcgi_param SCRIPT_FILENAME 路径。

下面配置开机自动挂载,可以配置/etc/fstab来实现,也可以设置开机自动运行脚本来实现,如用脚本

#vi /root/mntnfs.sh

mount -t nfs 192.168.1.201:/home/www /mnt/www -o nolock

保存退出,然后添加开机启动

#echo “./root/mntnfs.sh ” >>/etc/rc.local

NFS配置就完成了。

注:存储区的的两台NFS Server间用inotify+rsync来实现实时备份

五、配置MySQL双主复制

在两台real server间设置mysql双主复制,这里先设置主从复制。

   主机:192.168.1.199

从机:192.168.1.197

主机设置

在主机中登陆mysql

#/usr/local/mysql/bin/mysql –u root

赋予从机权限

mysql>grant replication slave on *.* to ‘backup’@’192.168.1.197’ identified by ‘573514’

打开主机/etc/my.cnf文件

#vi /etc/my.cnf

在[mysqld]中输入

binlog-do-db=test      #需要备份的数据,多个写多行

binlog-ignore-de=mysql  #不需要备份的数据库,多个写多行

从机配置

配置从机的/etc/my.cnf,

server-id的值改为2

在[mysqld]下输入

master-host=192.168.1.199

master-user=backup

master-pass=573514

master-port=3306

replicate-do-db=test  #只复制某个库

replicate-ignore-db=mysql  #不复制某个库

重启数据库,验证配置

在主机中,mysql>show master status;

在从机中,mysql>show slave status;

可以在主机上建立数据库测试,这样主从复制配置好了,接着继续配置双主复制。

配置当前从服务器

为原始服务器建立一个slave 账号

mysql>grant replication slave on *.* to ‘backup2’@’192.168.1.199’ identified by ‘123456’;

重启mysql服务,查看状态

mysql>show master status;

配置原始主服务器,编辑my.cnf并在[mysqld]下面输入

master-host=192.168.1.197

master-user=backup2

master-pass=123456

然后重启mysql,登录mysql配置master文件设置

mysql>stop slave;

mysql>change master to master_log_file=’[file written down]’,master_log_pos=[position];

mysql>start slave;

mysql>show slave status;

最后创建或修改数据库测试配置是否成功。

注:这里只是在服务器池有两台机器时有效,只是权宜之计,如果可以,建议给数据库服务也建个集群。

到这里配置基本结束了,以上配置均在虚拟机下实验并通过。