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 准备虚拟机

  1. 克隆一台模板机,在模板机上配置 hosts
bash 复制代码
[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
  1. 继续在模板机上编辑批量配置主机名和 IP 的脚本
bash 复制代码
#!/bin/bash
interface=ens33
domain=gnb.cloud

usage(){
  echo "Usage: $0 10 | 11-13 | 20-22"
  exit 1
}

function set_ip(){
	if [ $# -eq 0 ]; then
    usage   
  else
	  nmcli connection modify $interface ipv4.address 10.1.8.$1/24
	  nmcli connection up $interface
  fi
}

function set_host(){
	case $1 in
		1[1-3])
			HOSTNAME=web$[ $1 - 10 ].$domain
			;;
		21)
			HOSTNAME=client1.$domain
			;;
		10)
			HOSTNAME=lb.$domain
			;;
		20)
			HOSTNAME=router.$domain
			;;
		*)
      usage
			;;
	esac
	hostnamectl set-hostname $HOSTNAME
}

function main(){
	set_ip $1
	set_host $1
}

main $*

10.1.1 网段的主机和网卡单独进行配置,减少脚本的复杂度

  1. 克隆虚拟机,所有 10.1.8.x 网段的主机网卡保持 NAT 模式,为 lbrouter 主机额外添加一张网卡,并与 client2 主机的网卡一并设置为 VMnet1

  2. 启动虚拟机,将脚本上传至 /usr/local/bin 目录下,执行脚本修改主机名和 IP 地址。10.1.1.x 网段主机或网卡使用代码自行配置

  3. 向路由器主机中添加以下命令,以启用路由、启用防火墙并放行外网连接

bash 复制代码
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
firewall-cmd --set-default-zone=trusted
firewall-cmd --add-masquerade --permanent 
  1. 至此完成配置,记得打快照

2.1.2 环境配置

  1. 安装服务

lb 主机上安装 haproxy 服务,在三台 web 主机上安装 nginx 服务:

bash 复制代码
[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
  1. 准备测试页
bash 复制代码
[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
  1. 编辑配置文件
bash 复制代码
# 备份配置文件
[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_web
    bind *:80
    default_backend  back_web
    acl test url_reg -i \.txt$
    use_backend test if test

backend back_web
    balance     roundrobin
    server web1 10.1.8.11:80 check
    server web2 10.1.8.12:80 check
    server web3 10.1.8.13:80 check

backend test
    balance    roundrobin
    server test1 10.1.8.11:81 check
    server test2 10.1.8.12:81 check
    server test3 10.1.8.13:81 check

# 启动服务
[root@lb ~ 15:18:29]# systemctl enable haproxy.service --now
  1. 配置 TCP 访问
bash 复制代码
[root@lb ~ 15:40:21]# vim /etc/haproxy/haproxy.cfg
listen ssh
	mode tcp
	bind *:1022
	balance  roundrobin
	server web1 10.1.8.11:22   check
	server web2 10.1.8.12:22   check
	server web3 10.1.8.13:22   check
systemctl restart haproxy.service

2.2 Nginx 反向代理

bash 复制代码
# 安装 nginx
[root@lb ~ 21:07:15]# yum install -y nginx

# 编辑配置文件
[root@lb ~ 21:07:59]# vim /etc/nginx/nginx.conf
......
http {
    # http 块中增加upstream
    upstream web {
        server 10.1.8.11:80;
        server 10.1.8.12:80;
        server 10.1.8.13:80;
    }

    server {
    .......
      # 增加 location / 记录,后端指向web,上一步配置的upstream
      location / {
         # 添加如下语句
         proxy_pass http://web;
      }
    }
}

# 启动服务
[root@lb ~ 21:10:26]# systemctl start nginx.service
相关推荐
btyzadt36 分钟前
虚拟机蓝屏问题排查与解决
linux·运维·网络
★YUI★40 分钟前
学习制作记录(选项UI以及存档系统)8.24
学习·游戏·ui·unity·c#
咸甜适中1 小时前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui
努力敲代码的小盆友1 小时前
[自用笔记]上传本地项目至github
笔记·github
G_H_S_3_2 小时前
【网络运维】Shell 脚本编程:while 循环与 until 循环
linux·运维·网络·shell
coderklaus2 小时前
Shell 基础知识
linux·macos·shell
争不过朝夕,又念着往昔3 小时前
即时通讯项目---网关服务
linux·c++·vscode
It_张3 小时前
Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第五章学习笔记及总结)
笔记·学习·chatgpt
时空自由民.3 小时前
linux下camera 详细驱动流程 OV02K10为例(chatgpt版本)
linux·运维·服务器
码界奇点3 小时前
Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
linux·服务器·python