Keeplived+LVS

---------------------------------------Linux 下的Cluster 实现---------------------------------------------------------

 

*Cluster( 集群) 是指由一批具备相同或类似功能的物品组成的,提供更大、更强、更稳定功能的这样一种组合;

集群通常可以定义为两台或两台以上相互独立的计算机,对外表现为一个整体系统;就是一组计算机在一起合作为用户提供一组网络资源,而集群组中

 

的单一的计算机就被称为“节点(node)”

 

集群分类可以分为:

●(1)High Available Cluster(高可用性集群)

●(2)High Performance Cluster(高性能集群)

●(3)Load Balancing CLuster(负载均衡集群)

 

计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的;工程中通常用平均无故障时间

 

(MTTF)来度量系统的可靠性而平均维修时间(MTTR)来度量系统的可维护性;

 

HA 集群的主要目的是为了用户提供不间断的服务;当使用了HA 集群时如果由其中一个node出现了问题,自动会有集群中其他节点接替问题节点对外

 

提供服务;

 

高性能集群

●实现高性能集群主要目的是将多台计算机的计算能力合并到一起从而实现一个超越单台计算机计算能力的强力系统;

●在Linux 平台中实现高性能集群的软件是:Beowulf 及MPI

 

负载均衡(LB)

●LB 与HA 或高性能有些类似也有一定的区别。

●负载均衡不仅仅考虑的内容与高可用一样,同时也需要为用户提供不间断的服务,但LB 还要保证服务的质量;

在Linux 中要实现LB 集群可采用LVS 、MOSIX等软件

 

 

-----------------------------------------------------------Linux 中实现HPC 集群技术-----------------------------------------------

 

 

传统计算方式---- 串行计算

是指在单个计算机( 拥有单个中央中立单元) 上执行软件写操作。CPU 逐个使用一系列指令解决问题;

 

并行计算(Parallel Computing)

指同时使用多种计算机资源解决计算问题的过程

 

并行计算的主要目的:用于解决大型且复杂的计算问题

并行计算还可以利用非本地资源,可以使用多台计算机集合在一起共同处理、计算机来取代昂贵的大型计算机或大型服务器

 

并行计算代表— Messages Passing Interface

它仅仅是一个规格很严密的通讯标准,其主要功能是在处理并行运算之间节点的资料交换;或者说MPI 属于并行计算语言的函数库

 

MPI 的主要三个方面

(1)MPI 作为一个库存在,而非一种软件或开发语言

(2)MPI 是一种规范或标准的代表,所有的并行计算机制造商都可提供对MPI 的支持

(3)MPI 是一种消息传递编程模型,并成为消息传递编程模型的代表

 

高性能集群

实现高性能集群主要目的是将多台计算机的计算能力合并到一起, 使用并行计算软件(MPICH)实现并行计算从而实现一个超越单台计算机计算能力的强

 

力系统;

实际上MPICH 就是符合MPI 标准通讯协议的一套软件

 

 

 

 

↑图中信息与试验不符需修改

试验环境:

ck01.yht.com 192.168.131.147 hpcserver(服务器)

ck01.yht.com 192.168.131.142 node1(节点1)

ck03.yht.com 192.168.131.143 node2(节点2)

 

(1)便于MPICH 配置或调试,对名称节点名称进行定义→三台机器都要编写

#vim /etc/hosts

ck01.yht.com 192.168.131.147 hpcserver

ck01.yht.com 192.168.131.142 node1

ck03.yht.com 192.168.131.143 node2

 

(2)定义MPICH安全通信,用于控制其他节点或与其他节点交互信息时确保安全→在服务器操作

#cd ~

#ssh-keygen -t rsa

// 一路回车,以不使用口令方式连接才能完成MPICH

#ssh-copy-id node1

#ssh-copy-id node2

 

测试ssh ,确认不需要口令就可成功连入

#ssh node1

#ssh node2

 

(4)在每个节点上安装编译MPICH 所需要的工具

#yum install gcc gcc-gfortran gcc-c++

 

(5)在每个节点上解压软件包

#tar xvfz mpich-3.2.tar.gz

 

(6)在每个节点上进入MPICH 目录

#cd mpich

 

(7)在每个节点上编译并安装mipch

#./configure

#make

#make install

 

(8)在每个节点上创建HPC所须的主机

#vim ~/hpcnode

hpcserver

node1

node2

 

(9)在hpcsrv 端进行测试MPICH

# mpiexec -n 6 -machinefile ~/hpcnode ~/mpich-3.2/examples/cpi

-n: 处理6 次

-machinefile: 指定节点文件

 

---------------------------------------------------实现Linux 下的 HA----------------------------------------------------------

 

*双机技术的实现不需要特定的硬件环境或者是操作系统Kernel的特定支持,因此仅需要双机/集群软件就可以实现;

 

*双机软件通过专用的信号传输通道,可以让两台服务器相互检测对方的状态,通过检测可得知对方如何,如对方出现问题可在第一时间作出反应;

 

HA 容错运作过程

Auto-Detect(自动检测)

通过两台主机所连接的线缆,经过负载的监听程序进行相互检测;其检测的内容有许多:

(1) 主机硬件

(2) 主机网络

(3) 主机操作系统

(4) 数据库引擎及其他应用程序

(5) 主机与磁盘整列连接线缆等

Auto-Switch( 自动切换)

Auto-Recover( 自动恢复)

 

HA 的工作方式分为三种

(1) 主从方式

(2) 双机双工方式

(3) 集群工作方式

 

LHA 的目的就是提供一整套基于Linux 的高可用性集群,其目标为(RAS) 即:

Reliability( 可靠性)

Availability( 可用性)

Serviceablity( 可服务性)

 

Keepalived,保持存活,在网络里面就是保持在线,所谓的高可用或热备,用来防止单点故障,keepalived 实现基础是VRRP 协议;

 

Keepalived 原理

 

keepalived 也是模块化设计,不同模块负责不同的功能;

 

keepalived 的组件:core check vrrp libipfwc libipvs-2.4 libipvs-2.6

 

core :是keepalived 的核心,复杂主进程的启动和维护,全局配置文件的加载解析等

 

check :负责healthchecker( 健康检查) ,包括了各种健康检查方式,以及对应的配置的解析包括LVS 的配置解析

 

VRRP协议,就是网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障;

 

vrrp : VRRPD 子进程, VRRPD 子进程就是来实现VRRP 协议的

libipfwc :iptables(ipchains)库,配置LVS 会用到

libipvs* :配置LVS 会用到

注意,keepalived和LVS完全是两码事,只使它们相互配合;

 

keepalived 启动后会有三个进程:

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:healthchecker 子进程

healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态;

 

 

 

 

 

↑图中信息与试验不符需修改

 

目的:http 提供HA( 高可用性)

试验环境:

server1 192.168.131.147 ck01.yht.com

server2 192.168.131.142 ck02.yht.com

client  192.168.131.143 ck03.yht.com

VIP:192.168.131.252→虚拟IP

 

ck01.yht.com 192.168.131.147 hpcserver→hosts文件没变

ck01.yht.com 192.168.131.142 node1

ck03.yht.com 192.168.131.143 node2

 

获取keepalived

在安装之前请确保系统已经安装了Python 程序

 

Debian/Ubuntu-→不同系统、版本安装不同

#apt-get install keepalived

 

RedHat/CentOS

#yun install keepalived

 

实验基础要求

(1) 配置各自设备的IP 地址

     服务器端配置完成httpd 服务

(2) S1 的index.html 内容为” This is web1 server”

    S2 的index.html 内容为” This is web2 server”

(3) 客户端可以成功访问S1与S2的http 服务并能够显示相关的信息

 

配置keepalived

 

ck01.yht.com 上配置keepalived

#cd /etc/keepalived

#cp keepalived.conf keepalived.conf.bak

#vim keepalived.conf

 

!Configuration File for keepalived

 

global_defs {   <- 定义全局配置

   notification_email {

     root@localhost         //* 指定接收通知的邮箱

   }

   notification_email_from root@localhost  //* 设置发送的源地址为谁

   smtp_server 127.0.0.1    //* 表示发送email 时使用的smtp服务器地址,可用本地的sendmail来实现

   smtp_connect_timeout 30  //* 指定smtp链接超时时间

   router_id ck01.yht.com   //* 表示设备名称

}  <- 结束全局配置

 

vrrp_instance VI_1 {

    state MASTER          //* 设定本机为MASTER( 主)

    interface eno16777736 //* 指定实例所需要绑定的网卡,以便于VIP使用

    virtual_router_id 51  //* 设定VRID,相同的VRID为一个组,同组的VRID将决定多播的MAC地址→两台服务器所设组要一致

    priority 100          //* 设定优先级,数字越高越优先

    advert_int 1          //* 设定心跳广播间隔(秒)

    authentication {      //* 认证方式为密码认证→两台服务器所设密码要一致

        auth_type PASS  

        auth_pass 1234

    }

    virtual_ipaddress {   //* 设定VIP

        192.168.131.252

    }

}

 

客户端测试:#links 192.168.131.252

 

ck02.yht.com 配置keepalived

 

ck02.yht.com 上配置keepalived

#cd /etc/keepalived

#cp keepalived.conf keepalived.conf.bak

#vim keepalived.conf

 

!Configuration File for keepalived

 

global_defs {   <- 定义全局配置

   notification_email {

     root@localhost         //* 指定接收通知的邮箱

   }

   

 notification_email_from root@localhost  //* 设置发送的源地址为谁

   smtp_server 127.0.0.1    //* 表示发送email 时使用的smtp服务器地址,可用本地的sendmail来实现

   smtp_connect_timeout 1  //* 指定smtp链接超时时间

   router_id ck02.yht.com   //* 表示设备名称

}  <- 结束全局配置

 

vrrp_instance VI_1 {

    state BACKUP          //* 设定本机为MASTER( 主)

    interface eno16777736 //* 指定实例所需要绑定的网卡,以便于VIP使用

    virtual_router_id 51  //* 设定VRID,相同的VRID为一个组,同组的VRID将决定多播的MAC地址→两台服务器所设组要一致

    priority 50          //* 设定优先级,数字越高越优先

    advert_int 1          //* 设定心跳广播间隔(秒)

    authentication {      //* 认证方式为密码认证→两台服务器所设密码要一致

        auth_type PASS  

        auth_pass 1234

    }

   

  virtual_ipaddress {   //* 设定VIP

        192.168.131.252

    }

}

 

启动keepalived 服务(web1 与web2)

#systemctl enabled keepalived

#systemctl start keepalived

 

查看VIP 已经作用在web1.niliu.edu 上(web1 与web2)

#tail -f /var/log/messages

 

客户端测试

客户端用浏览器访问VIP, 可看到ck01上的内容;停止ck01的keepalived,可以看到ck02的内容;再将ck01启动将看到ck01内容;

 

  

** **

------------------------------------------实现Linux 下的 HA LVS+Keepalived-----------------------------------

 

 

 

图片信息具体依照下面为准

实验环境

lk1:192.168.131.143 ck03.yht.com         web1:192.168.131.147 ck01.yht.com

lk2:192.168.131.144 ck04.yht.com         web2:192.168.131.142 ck02.yht.com

 

1.各自配置完成IP ,且可以通信

 

在WEB服务器上操作

安装web1/web2 的httpd 服务器

定义web1/web2 的httpd 内容 /var/www/html/index.html

web1:ck01.yht.com  "This is web1 server"

web2:ck02.yht.com  "This is web2 server"

 

配置web1/web2

#ifconfig lo:0 192.168.0.254 netmask 255.255.255.255 up

#route add -host 192.168.0.254 dev lo:0

#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

#systemctl restart httpd

 

在lk1/lk2 编写LVS-DR 规则

 

【lk1操作】

#vim lvs-dr.sh

#! /bin/bash

ipvsadm -C

ipvsadm -A -t 192.168.0.254:80 -s rr

ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.143:80 -g→指的是lk1 IP

ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.147:80 -g→指的是web1 IP

 

配置keepalived

#cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id ck03.yht.com

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eno16777736

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

        192.168.131.252

    }

}

 

【lk1操作】

#vim lvs-dr.sh

#! /bin/bash

ipvsadm -C

ipvsadm -A -t 192.168.0.254:80 -s rr

ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.144:80 -g→指的是lk2 IP

ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.142:80 -g→指的是web2 IP

 

配置keepalived

#cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id ck04.yht.com

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777736

    virtual_router_id 51

    priority 50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

        192.168.131.252

    }

}

 

启动lk1/lk2 关联服务

#chmod 700 ~/lvs-dr.sh

#./lvs-dr.sh

#systemctl start keepalived

#systemctl start httpd       

 

观察lk1/lk2 下keepalived 信息

#tail -f /var/log/messages

 

客户端测试:http://192.168.131.252

实验结果:当客户端访问lk1,lk1会将访问请求分配给web1,如果在lk上也提供httpd服务的情况下,客户端访问lk会显示lk1的服务,请求过多时分

 

配给web1;当lk1停止keepalived服务时,lk2和web2会顶替lk1和web1.

代码交流 2021