Linux 学习笔记 - 集群管理篇
Linux 集群管理
1. 集群
1.1 什么是集群
集群(cluster)是由一组独立的计算机系统构成的一个松耦合的多处理器系统,作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点(node)。它们之间通过网络实现进程间的通信。
通俗一点来说,就是让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份。
1.2 集群的类型
集群根据不同类型可分为:
- 负载均衡集群
- 高可用集群
- 高性能计算集群
- 负载均衡集群
1.2.1 负载均衡集群 Load Balance cluster
负载均衡集群是指:把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
例如:四兄弟开裁缝铺,生意特别多,一个人做不下来,老是延误工期,于是四个兄弟商量:老大接订单, 三个兄弟来干活。客户多起来之后,老大根据一定的原则(policy) 根据三兄弟手上的工作量来分派新任务。
1.2.2 高可用集群 High Availability cluster
利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
例如:两兄弟开早餐铺,生意不大,但是每天早上7点到9点之间客户很多并且不能中断。为了保证2个小时内这个早餐铺能够保证持续提供服务,两兄弟商量几个方法:
方法一:平时老大做生意,老二这个时间段在家等候,一旦老大无法做生意了,老二就出来顶上,这个叫做 Active/Standby(双机冷备)
方法二:平时老大做生意,老二这个时候就在旁边帮工,一旦老大无法做生意,老二就马上顶上,这个叫做 Active/Passive(双机热备)
方法三:平时老大卖包子,老二也在旁边卖豆浆,老大有问题,老二就又卖包子,又卖豆浆,老二不行了,老大就又卖包子,又卖豆浆。这个叫做 Active/Active (dual Active)(双机互备)。
1.2.3 高性能计算集群 High Performance Computing clustering
即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。
例如:10个兄弟一起做手工家具生意,一个客户来找他们的老爹要求做一套非常复杂的仿古家具,一个人做也可以做,不过要做很久很久,为了1个星期就交出这一套家具,10个兄弟决定一起做。老爹把这套家具的不同部分分开交给儿子们作,然后每个儿子都在做木制家具的加工,最后拼在一起。老爹是scheduler任务调度器,儿子们是compute node. 他们做的工作叫做作业。
2. 负载均衡集群 部署实践
2.1 HAProxy
集群主机清单如下:
主机名 | IP地址 | 服务器角色 |
---|---|---|
client2.gnb.cloud | 10.1.1.21 | 客户端 |
client1.gnb.cloud | 10.1.8.21 | 客户端 |
router.gnb.cloud | 10.1.1.20 , 10.1.8.20 | 路由器 |
lb.gnb.cloud | 10.1.1.10 , 10.1.8.10 | 代理服务器 |
web1.gnb.cloud | 10.1.8.11 | Web 和 SSH 服务器 |
web2.gnb.cloud | 10.1.8.12 | Web 和 SSH 服务器 |
web3.gnb.cloud | 10.1.8.13 | Web 和 SSH 服务器 |
2.1.1 准备虚拟机
- 克隆一台模板机,在模板机上配置 hosts
[root@centos7 ~ 10:50:26]# vim /etc/host
10.1.8.10 lb.gnb.cloud lb
10.1.8.11 web1.gnb.cloud web1
10.1.8.12 web2.gnb.cloud web2
10.1.8.13 web3.gnb.cloud web3
10.1.8.20 router.gnb.cloud router
10.1.8.21 client1.gnb.cloud client1
10.1.1.21 client2.gnb.cloud client2
- 继续在模板机上编辑批量配置主机名和 IP 的脚本
#!/bin/bash
interface=ens33
domain=gnb.cloudusage(){echo "Usage: $0 10 | 11-13 | 20-22"exit 1
}function set_ip(){if [ $# -eq 0 ]; thenusage elsenmcli connection modify $interface ipv4.address 10.1.8.$1/24nmcli connection up $interfacefi
}function set_host(){case $1 in1[1-3])HOSTNAME=web$[ $1 - 10 ].$domain;;21)HOSTNAME=client1.$domain;;10)HOSTNAME=lb.$domain;;20)HOSTNAME=router.$domain;;*)usage;;esachostnamectl set-hostname $HOSTNAME
}function main(){set_ip $1set_host $1
}main $*
10.1.1 网段的主机和网卡单独进行配置,减少脚本的复杂度
-
克隆虚拟机,所有
10.1.8.x
网段的主机网卡保持 NAT 模式,为lb
和router
主机额外添加一张网卡,并与client2
主机的网卡一并设置为VMnet1
-
启动虚拟机,将脚本上传至
/usr/local/bin
目录下,执行脚本修改主机名和 IP 地址。10.1.1.x
网段主机或网卡使用代码自行配置 -
向路由器主机中添加以下命令,以启用路由、启用防火墙并放行外网连接
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
firewall-cmd --set-default-zone=trusted
firewall-cmd --add-masquerade --permanent
- 至此完成配置,记得打快照
2.1.2 环境配置
- 安装服务
在 lb
主机上安装 haproxy
服务,在三台 web
主机上安装 nginx
服务:
[root@lb ~ 15:53:59]# yum -y install haproxy
[root@web1 ~ 15:54:06]# yum -y install nginx
[root@web2 ~ 15:54:13]# yum -y install nginx
[root@web3 ~ 15:54:22]# yum -y install nginx
- 准备测试页
[root@web1 ~ 15:14:57]# mkdir /test
[root@web1 ~ 15:15:07]# echo hello text from $(hostname -s) > /test/index.txt
[root@web1 ~ 15:15:47]# echo hello html from $(hostname -s) > /test/index.html
[root@web1 ~ 15:16:24]# echo Welcome to $(hostname) > /usr/share/nginx/html/index.html
- 编辑配置文件
# 备份配置文件
[root@lb ~ 15:16:11]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak# 编辑配置文件
[root@lb ~ 15:16:44]# vim /etc/haproxy/haproxy.cfg
frontend front_webbind *:80default_backend back_webacl test url_reg -i \.txt$use_backend test if testbackend back_webbalance roundrobinserver web1 10.1.8.11:80 checkserver web2 10.1.8.12:80 checkserver web3 10.1.8.13:80 checkbackend testbalance roundrobinserver test1 10.1.8.11:81 checkserver test2 10.1.8.12:81 checkserver test3 10.1.8.13:81 check# 启动服务
[root@lb ~ 15:18:29]# systemctl enable haproxy.service --now
- 配置 TCP 访问
[root@lb ~ 15:40:21]# vim /etc/haproxy/haproxy.cfg
listen sshmode tcpbind *:1022balance roundrobinserver web1 10.1.8.11:22 checkserver web2 10.1.8.12:22 checkserver web3 10.1.8.13:22 check
systemctl restart haproxy.service
2.2 Nginx 反向代理
# 安装 nginx
[root@lb ~ 21:07:15]# yum install -y nginx# 编辑配置文件
[root@lb ~ 21:07:59]# vim /etc/nginx/nginx.conf
......
http {# http 块中增加upstreamupstream web {server 10.1.8.11:80;server 10.1.8.12:80;server 10.1.8.13:80;}server {.......# 增加 location / 记录,后端指向web,上一步配置的upstreamlocation / {# 添加如下语句proxy_pass http://web;}}
}# 启动服务
[root@lb ~ 21:10:26]# systemctl start nginx.service