---------------------------------------Linux 下的Cluster 实现---------------------------------------------------------html
*Cluster( 集群) 是指由一批具有相同或相似功能的物品组成的,提供更大、更强、更稳定功能的这样一种组合;node
集群一般能够定义为两台或两台以上相互独立的计算机,对外表现为一个总体系统;就是一组计算机在一块儿合做为用户提供一组网络资源,而集群组中c++
的单一的计算机就被称为“节点(node)”web
集群分类能够分为:数据库
●(1)High Available Cluster(高可用性集群)编程
●(2)High Performance Cluster(高性能集群)vim
●(3)Load Balancing CLuster(负载均衡集群)浏览器
计算机系统的可用性(availability)是经过系统的可靠性(reliability)和可维护性(maintainability)来度量的;工程中一般用平均无端障时间安全
(MTTF)来度量系统的可靠性而平均维修时间(MTTR)来度量系统的可维护性;bash
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.