Tips:一些记录,一些笔记

2024/09/13
FRIDAY
When a person’s speech and manner with good motivation,then happiness like his shadow followed him.
当一个人的言谈和举止怀着良善的动机,快乐便如影随形。

01
MINIO
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
MINIO的部署有两种方式:
单机部署
分布式部署
主从(存储容量有限制)
资源池
分布式MINIO可以让你将多块硬盘或者多台服务器,组成一个对象存储服务,你可以使用这些存储设备,而不需要考虑其真实的物理位置。
并且,由于硬盘分布在不同的节点上,分布式MINIO避免了单点故障。
MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
官方网站:
https://min.io/

官方下载地址:
https://min.io/download

官方文档:
https://min.io/docs/minio/linux/index.html
官方【Quick Start】文档:
https://docs.min.io/docs/minio-quickstart-guide.html
MINIO中文文档:
http://docs.minio.org.cn/docs
————————
对象存储中常见的「术语」
| S3 | Simple Storage Service,也就是简单存储服务,这个概念是Amazon(亚马逊)在2006年推出的。 对象存储就是从那个时候诞生的。 S3提供了一个简单的WEB服务接口,可以用于随时在WEB上的任何位置存储和检索任何数量的数据。 |
| Object | 存储到Minio的基本对象,例如:
|
| Bucket | 用来存储 Object的逻辑空间; 每个Bucket之间的数据是相互隔离的。 |
| Driver | 部署 Minio的时候设置的磁盘; Minio中的所有对象的数据都会存储在 Driver中。 |
| Set | 一组 Driver的集合; 分布式部署回根据集群规模自动划分 一个 或者多个 Set; 每个 Set中的Driver分布在不同位置; 一个Object存储在一个Set上; |
| 纠删码(Erasure Code) | 一种恢复丢失和损坏的数据的「数学算法」,它是一种编码技术。 在分布式存储系统中,纠删码主要有三类:
|
关于「纠删码」后面会单独开一篇笔记详细描述。
02
MINIO分布式集群架构
环境准备:
| 节点 | 目录 |
| 192.168.2.41 | /mnt/driver-1 |
| 192.168.2.42 | /mnt/driver-1 |
| 192.168.2.43 | /mnt/driver-1 |
| 192.168.2.44 | /mnt/driver-1 |
注意:
每台机器上的对应目录需要使用独立的盘单独挂载出来
每台机器上都创建相同的路径
MINIO架构图:



03
操作系统:配置
关闭SELINUX:
[root@minio1 ~]# cat etc/selinux/config# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.SELINUX=disabled# SELINUXTYPE= can take one of three values:# targeted - Targeted processes are protected,# minimum - Modification of targeted policy. Only selected processes are protected.# mls - Multi Level Security protection.SELINUXTYPE=targeted[root@minio1 ~]#[root@minio1 ~]# getenforceDisabled[root@minio1 ~]#
关闭防火墙(firewalld)
[root@minio1 ~]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2024-09-12 23:38:41 EDT; 3h 43min agoDocs: man:firewalld(1)Main PID: 932 (firewalld)Tasks: 2CGroup: system.slice/firewalld.service└─932 usr/bin/python2 -Es usr/sbin/firewalld --nofork --nopidSep 12 23:38:22 minio1 systemd[1]: Starting firewalld - dynamic firewall daemon...Sep 12 23:38:41 minio1 systemd[1]: Started firewalld - dynamic firewall daemon.Sep 12 23:38:43 minio1 firewalld[932]: WARNING: AllowZoneDrifting is enabled. This is considered an inse... now.Hint: Some lines were ellipsized, use -l to show in full.[root@minio1 ~]#[root@minio1 ~]# systemctl stop firewalld[root@minio1 ~]#[root@minio1 ~]# systemctl disable firewalldRemoved symlink etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.[root@minio1 ~]#[root@minio1 ~]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)Sep 12 23:38:22 minio1 systemd[1]: Starting firewalld - dynamic firewall daemon...Sep 12 23:38:41 minio1 systemd[1]: Started firewalld - dynamic firewall daemon.Sep 12 23:38:43 minio1 firewalld[932]: WARNING: AllowZoneDrifting is enabled. This is considered an inse... now.Sep 13 03:22:47 minio1 systemd[1]: Stopping firewalld - dynamic firewall daemon...Sep 13 03:22:48 minio1 systemd[1]: Stopped firewalld - dynamic firewall daemon.Hint: Some lines were ellipsized, use -l to show in full.[root@minio1 ~]#
查看主机名相关配置
[root@minio1 ~]# cat etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.2.41 minio1192.168.2.42 minio2192.168.2.43 minio3192.168.2.44 minio4[root@minio1 ~]#[root@minio1 ~]# cat etc/hostnameminio1[root@minio1 ~]#
系统最大文件数:
永久设置
[root@minio1 ~]# cat etc/security/limits.conf | grep -v "^#" | strings* soft nofile 65536* hard nofile 65536[root@minio1 ~]#
临时设置
[root@minio1 ~]# ulimit -n 65536[root@minio1 ~]#[root@minio1 ~]# ulimit -n65536[root@minio1 ~]#
挂载目录:
[root@minio1 ~]# cat etc/fstab## etc/fstab# Created by anaconda on Thu Sep 12 21:47:17 2024## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/centos-root xfs defaults 0 0#UUID=777a22d3-7f26-4336-9281-baad52479c66 boot xfs defaults 0 0/dev/sda1 boot xfs defaults 0 0/dev/mapper/centos-swap swap swap defaults 0 0/dev/sdb1 mnt/driver-1 ext4 defaults 0 0[root@minio1 ~]#[root@minio1 ~]# df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 2.9G 0 2.9G 0% devtmpfs 3.0G 0 3.0G 0% dev/shmtmpfs 3.0G 11M 3.0G 1% runtmpfs 3.0G 0 3.0G 0% sys/fs/cgroup/dev/mapper/centos-root 44G 3.9G 41G 9%/dev/sdb1 16G 45M 15G 1% mnt/driver-1/dev/sda1 1014M 172M 843M 17% boottmpfs 597M 16K 597M 1% run/user/989tmpfs 597M 0 597M 0% run/user/0[root@minio1 ~]#
04
MINIO:安装
创建存放MINIO启动脚本与配置文件的目录:
[root@minio1 ~]# mkdir opt/minio[root@minio1 ~]#
将下载的MINIO的程序上传到前面创建的目录中:
[root@minio1 ~]# cd opt/minio/[root@minio1 minio]# ls -ltrtotal 128136-rw-r--r-- 1 root root 27312280 Sep 13 21:31 mc-rw-r--r-- 1 root root 103891096 Sep 13 21:31 minio[root@minio1 minio]#[root@minio1 minio]# scp * root@minio2:/opt/minio/mc 100% 26MB 26.0MB/s 00:01minio 100% 99MB 33.0MB/s 00:03[root@minio1 minio]# scp * root@minio3:/opt/minio/mc 100% 26MB 26.1MB/s 00:00minio 100% 99MB 33.0MB/s 00:03[root@minio1 minio]# scp * root@minio4:/opt/minio/mc 100% 26MB 26.0MB/s 00:01minio 100% 99MB 33.0MB/s 00:03[root@minio1 minio]#
或者,不像上面这样,直接安装从官方下载的「Server Client」对应的 RPM包:
[root@minio1 ~]# ls -ltrtotal 48012-rw-------. 1 root root 1547 Sep 12 22:14 anaconda-ks.cfg-rw-r--r--. 1 root root 1595 Sep 12 22:44 initial-setup-ks.cfg-rw-r--r-- 1 root root 10429499 Sep 13 21:31 mcli-20240909075310.0.0-1.x86_64.rpm-rw-r--r-- 1 root root 38722807 Sep 13 21:31 minio-20240909165928.0.0-1.x86_64.rpm[root@minio1 ~]#[root@minio1 ~]# rpm -ivh minio-20240909165928.0.0-1.x86_64.rpmPreparing... ################################# [100%]Updating installing...1:minio-20240909165928.0.0-1 ################################# [100%][root@minio1 ~]#[root@minio1 ~]# rpm -ivh mcli-20240909075310.0.0-1.x86_64.rpmPreparing... ################################# [100%]Updating installing...1:mcli-20240909075310.0.0-1 ################################# [100%][root@minio1 ~]#[root@minio1 ~]# rpm -qa | grep miniominio-20240909165928.0.0-1.x86_64[root@minio1 ~]#[root@minio1 ~]# rpm -qa | grep mclimcli-20240909075310.0.0-1.x86_64[root@minio1 ~]#[root@minio1 ~]# rpm -ql minio/lib/systemd/system/minio.service/usr/local/bin/minio[root@minio1 ~]#[root@minio1 ~]# rpm -ql mcli/usr/local/bin/mcli[root@minio1 ~]#
可以看到 RPM的方式,在「/usr/local/bin」下分别创建了 MINIO的服务端与客户端的程序,并且新增了一个系统服务:
[root@minio1 ~]# cat lib/systemd/system/minio.service[Unit]Description=MinIODocumentation=https://docs.min.ioWants=network-online.targetAfter=network-online.targetAssertFileIsExecutable=/usr/local/bin/minio[Service]Type=notifyWorkingDirectory=/usr/localUser=minio-userGroup=minio-userProtectProc=invisibleEnvironmentFile=-/etc/default/minioExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES# Let systemd restart this service alwaysRestart=always# Specifies the maximum file descriptor number that can be opened by this processLimitNOFILE=1048576# Turn-off memory accounting by systemd, which is buggy.MemoryAccounting=no# Specifies the maximum number of threads this process can createTasksMax=infinity# Disable timeout logic and wait until process is stoppedTimeoutSec=infinitySendSIGKILL=no[Install]WantedBy=multi-user.target# Built for ${project.name}-${project.version} (${project.name})[root@minio1 ~]#
05
MINIO:集群配置
配置用于MINIO集群启动的脚本:
[root@minio1 minio]# pwd/opt/minio[root@minio1 minio]#[root@minio1 minio]# ls -ltrtotal 128140-rw-r--r-- 1 root root 27312280 Sep 13 21:31 mc-rw-r--r-- 1 root root 103891096 Sep 13 21:31 minio-rw-r--r-- 1 root root 564 Sep 13 22:00 run.sh[root@minio1 minio]#[root@minio1 minio]# cat run.sh#!/bin/bash#export MINIO_ACCESS_KEY=minioadmin#export MINIO_SECRET_KEY=minioadminexport MINIO_ROOT_USER=minioadminexport MINIO_ROOT_PASSWORD=minioadmin/usr/local/bin/minio server --config-dir /opt/minio --console-address ":9001" \http://192.168.2.41:9000/mnt/driver-1/data1 http://192.168.2.41:9000/mnt/driver-1/data2 \http://192.168.2.42:9000/mnt/driver-1/data1 http://192.168.2.42:9000/mnt/driver-1/data2 \http://192.168.2.43:9000/mnt/driver-1/data1 http://192.168.2.43:9000/mnt/driver-1/data2 \http://192.168.2.44:9000/mnt/driver-1/data1 http://192.168.2.44:9000/mnt/driver-1/data2[root@minio1 minio]#[root@minio1 minio]# scp run.sh root@minio2:/opt/minio/run.sh 100% 564 24.2KB/s 00:00[root@minio1 minio]# scp run.sh root@minio3:/opt/minio/run.sh 100% 564 54.1KB/s 00:00[root@minio1 minio]# scp run.sh root@minio4:/opt/minio/run.sh 100% 564 24.2KB/s 00:00[root@minio1 minio]#
变量说明:
| MINIO_ACCESS_KEY | 指定用户名(新版本中已经淘汰的参数) |
| MINIO_SECRET_KEY | 指定密码(新版本中已经淘汰的参数) |
| MINIO_ROOT_USER | 指定用户名(新版本的参数) 长度最少「5」个字符 |
| MINIO_ROOT_PASSWORD | 指定密码(新版本的参数) 密码不能过于简单,否则Minio启动会失败 长度最少「8」个字符 |
| --config-dir | 指定集群配置文件目录 |
| --address | 数据服务的监听端口,默认「9000」 |
| --console-address | 控制台服务的监听端口(可视化WEB界面),默认「9001」 |
修改MINIO的服务文件:
[root@minio1 minio]# cat usr/lib/systemd/system/minio.service[Unit]Description=Minio serviceDocumentation=https://docs.minio.io/[Service]WorkingDirectory=/opt/minio/ExecStart=/opt/minio/run.shRestart=on-failureRestartSec=5[Install]WantedBy=multi-user.target[root@minio1 minio]#[root@minio1 minio]# scp usr/lib/systemd/system/minio.service root@minio2:/usr/lib/systemd/system/minio.service 100% 988 173.7KB/s 00:00[root@minio1 minio]# scp usr/lib/systemd/system/minio.service root@minio3:/usr/lib/systemd/system/minio.service 100% 988 1.2MB/s 00:00[root@minio1 minio]# scp usr/lib/systemd/system/minio.service root@minio4:/usr/lib/systemd/system/minio.service 100% 988 1.1MB/s 00:00[root@minio1 minio]#
修改权限:
[root@minio1 ~]# ls -ltr usr/lib/systemd/system/minio.service-rw-r--r-- 1 root root 988 Sep 13 22:09 usr/lib/systemd/system/minio.service[root@minio1 ~]#[root@minio1 ~]# chmod +x usr/lib/systemd/system/minio.service[root@minio1 ~]#[root@minio1 ~]#[root@minio1 ~]# ls -ltr usr/local/bin/ | grep minio-rwxr-xr-x 1 root root 103891096 Sep 9 20:27 minio[root@minio1 ~]#[root@minio1 ~]# ls -ltr opt/minio/total 128140-rw-r--r-- 1 root root 27312280 Sep 13 21:31 mc-rw-r--r-- 1 root root 103891096 Sep 13 21:31 minio-rw-r--r-- 1 root root 564 Sep 13 22:00 run.sh[root@minio1 ~]#[root@minio1 ~]# chmod +x opt/minio/*[root@minio1 ~]#[root@minio1 ~]# ls -ltr usr/lib/systemd/system/minio.service-rwxr-xr-x 1 root root 988 Sep 13 22:09 usr/lib/systemd/system/minio.service[root@minio1 ~]#[root@minio1 ~]# ls -ltr opt/minio/total 128140-rwxr-xr-x 1 root root 27312280 Sep 13 21:31 mc-rwxr-xr-x 1 root root 103891096 Sep 13 21:31 minio-rwxr-xr-x 1 root root 564 Sep 13 22:00 run.sh[root@minio1 ~]#
启动服务:
[root@minio1 ~]# systemctl enable minio[root@minio1 ~]#[root@minio1 ~]# systemctl start minio[root@minio1 ~]#[root@minio1 ~]# systemctl status minio● minio.service - Minio serviceLoaded: loaded (/usr/lib/systemd/system/minio.service; enabled; vendor preset: disabled)Active: active (running) since Sat 2024-09-14 11:31:36 CST; 4s agoDocs: https://docs.minio.io/Main PID: 30704 (run.sh)Tasks: 12CGroup: system.slice/minio.service├─30704 bin/bash opt/minio/run.sh└─30706 usr/local/bin/minio server --config-dir opt/minio --console-address :9001 http://192.168...Sep 14 11:31:36 minio1 run.sh[30704]: MinIO Object Storage ServerSep 14 11:31:36 minio1 run.sh[30704]: Copyright: 2015-2024 MinIO, Inc.Sep 14 11:31:36 minio1 run.sh[30704]: License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.htmlSep 14 11:31:36 minio1 run.sh[30704]: Version: RELEASE.2024-09-09T16-59-28Z (go1.22.7 linux/amd64)Sep 14 11:31:36 minio1 run.sh[30704]: API: http://192.168.2.41:9000 http://192.168.122.1:9000 http://1...:9000Sep 14 11:31:36 minio1 run.sh[30704]: WebUI: http://192.168.2.41:9001 http://192.168.122.1:9001 http://1...:9001Sep 14 11:31:36 minio1 run.sh[30704]: Docs: https://docs.min.ioSep 14 11:31:36 minio1 run.sh[30704]: ---------------------------Sep 14 11:31:36 minio1 run.sh[30704]: WARN: Detected Linux kernel version older than 4.0 release, there ...manceSep 14 11:31:36 minio1 run.sh[30704]: WARN: Detected default credentials 'minioadmin:minioadmin', we rec...ablesHint: Some lines were ellipsized, use -l to show in full.[root@minio1 ~]#
这样,就可以通过集群的任何一个节点的「9000」端口访问MINIO了:
192.168.2.41:9000
192.168.2.42:9000
192.168.2.43:9000
192.168.2.44:9000

登录后就可以访问:

06
Nginx:必要性
上面虽然配置成功了,但是访问同一套MINIO,我们有四个节点的登录端口显然是很不方便的。
因此,我们需要用Nginx做一层代理,将访问路径统一一下。
07
安装编译工具以及依赖库
安装编译工具与依赖包:
[root@minio1 ~]# dnf install -y make zlib zlib-devel gcc-c++ libtool openssl openssl-develLast metadata expiration check: 1:44:19 ago on Sat 14 Sep 2024 10:46:14 AM CST.Package make-1:3.82-24.el7.x86_64 is already installed.Package zlib-1.2.7-18.el7.x86_64 is already installed.Package openssl-1:1.0.2k-19.el7.x86_64 is already installed.Dependencies resolved.================================================================================================================Package Arch Version Repository Size================================================================================================================Installing:gcc-c++ x86_64 4.8.5-44.el7 base 7.2 Mlibtool x86_64 2.4.2-22.el7_3 base 588 kopenssl-devel x86_64 1:1.0.2k-19.el7 base 1.5 Mzlib-devel x86_64 1.2.7-20.el7_9 updates 50 kInstalling dependencies:autoconf noarch 2.69-11.el7 base 701 kautomake noarch 1.13.4-3.el7 base 679 kcpp x86_64 4.8.5-44.el7 base 5.9 Mgcc x86_64 4.8.5-44.el7 base 16 Mglibc i686 2.17-317.el7 base 4.3 Mglibc-devel x86_64 2.17-317.el7 base 1.1 Mglibc-headers x86_64 2.17-317.el7 base 690 kkeyutils-libs-devel x86_64 1.5.8-3.el7 base 37 kkrb5-devel x86_64 1.15.1-50.el7 base 273 klibcom_err-devel x86_64 1.42.9-19.el7 base 32 klibkadm5 x86_64 1.15.1-50.el7 base 179 klibselinux-devel x86_64 2.5-15.el7 base 187 klibsepol-devel x86_64 2.5-10.el7 base 77 klibstdc++-devel x86_64 4.8.5-44.el7 base 1.5 Mlibverto-devel x86_64 0.2.5-4.el7 base 12 km4 x86_64 1.4.16-10.el7 base 256 knss-softokn-freebl i686 3.44.0-8.el7_7 base 214 kpcre-devel x86_64 8.32-17.el7 base 480 kperl-Test-Harness noarch 3.28-3.el7 base 302 kperl-Thread-Queue noarch 3.02-2.el7 base 17 kkernel-headers x86_64 3.10.0-1160.119.1.el7 updates 9.1 Mzlib i686 1.2.7-20.el7_9 updates 91 kTransaction Summary================================================================================================================Install 26 PackagesTotal download size: 51 MInstalled size: 112 MDownloading Packages:(1/26): automake-1.13.4-3.el7.noarch.rpm 1.0 MB/s | 679 kB 00:00(2/26): autoconf-2.69-11.el7.noarch.rpm 952 kB/s | 701 kB 00:00(3/26): cpp-4.8.5-44.el7.x86_64.rpm 1.4 MB/s | 5.9 MB 00:04(4/26): gcc-c++-4.8.5-44.el7.x86_64.rpm 1.4 MB/s | 7.2 MB 00:04(5/26): glibc-devel-2.17-317.el7.x86_64.rpm 4.8 MB/s | 1.1 MB 00:00(6/26): glibc-headers-2.17-317.el7.x86_64.rpm 4.0 MB/s | 690 kB 00:00(7/26): glibc-2.17-317.el7.i686.rpm 2.4 MB/s | 4.3 MB 00:01(8/26): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm 1.7 MB/s | 37 kB 00:00(9/26): libcom_err-devel-1.42.9-19.el7.x86_64.rpm 1.8 MB/s | 32 kB 00:00(10/26): krb5-devel-1.15.1-50.el7.x86_64.rpm 6.5 MB/s | 273 kB 00:00(11/26): libkadm5-1.15.1-50.el7.x86_64.rpm 5.5 MB/s | 179 kB 00:00(12/26): libselinux-devel-2.5-15.el7.x86_64.rpm 9.4 MB/s | 187 kB 00:00(13/26): libsepol-devel-2.5-10.el7.x86_64.rpm 3.6 MB/s | 77 kB 00:00(14/26): libtool-2.4.2-22.el7_3.x86_64.rpm 4.8 MB/s | 588 kB 00:00(15/26): libverto-devel-0.2.5-4.el7.x86_64.rpm 330 kB/s | 12 kB 00:00(16/26): libstdc++-devel-4.8.5-44.el7.x86_64.rpm 2.4 MB/s | 1.5 MB 00:00(17/26): m4-1.4.16-10.el7.x86_64.rpm 427 kB/s | 256 kB 00:00(18/26): nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm 365 kB/s | 214 kB 00:00(19/26): pcre-devel-8.32-17.el7.x86_64.rpm 831 kB/s | 480 kB 00:00(20/26): openssl-devel-1.0.2k-19.el7.x86_64.rpm 1.4 MB/s | 1.5 MB 00:01(21/26): perl-Test-Harness-3.28-3.el7.noarch.rpm 3.1 MB/s | 302 kB 00:00(22/26): perl-Thread-Queue-3.02-2.el7.noarch.rpm 24 kB/s | 17 kB 00:00(23/26): zlib-1.2.7-20.el7_9.i686.rpm 464 kB/s | 91 kB 00:00(24/26): zlib-devel-1.2.7-20.el7_9.x86_64.rpm 367 kB/s | 50 kB 00:00(25/26): gcc-4.8.5-44.el7.x86_64.rpm 1.8 MB/s | 16 MB 00:09(26/26): kernel-headers-3.10.0-1160.119.1.el7.x86_64.rpm 3.2 MB/s | 9.1 MB 00:02----------------------------------------------------------------------------------------------------------------Total 4.6 MB/s | 51 MB 00:11Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing : 1/1Installing : kernel-headers-3.10.0-1160.119.1.el7.x86_64 1/26Installing : perl-Thread-Queue-3.02-2.el7.noarch 2/26Installing : perl-Test-Harness-3.28-3.el7.noarch 3/26Installing : pcre-devel-8.32-17.el7.x86_64 4/26Installing : libverto-devel-0.2.5-4.el7.x86_64 5/26Installing : libstdc++-devel-4.8.5-44.el7.x86_64 6/26Installing : libsepol-devel-2.5-10.el7.x86_64 7/26Installing : libselinux-devel-2.5-15.el7.x86_64 8/26Installing : libcom_err-devel-1.42.9-19.el7.x86_64 9/26Installing : keyutils-libs-devel-1.5.8-3.el7.x86_64 10/26Installing : nss-softokn-freebl-3.44.0-8.el7_7.i686 11/26Running scriptlet: glibc-2.17-317.el7.i686 12/26Installing : glibc-2.17-317.el7.i686 12/26Running scriptlet: glibc-2.17-317.el7.i686 12/26Installing : cpp-4.8.5-44.el7.x86_64 13/26Running scriptlet: cpp-4.8.5-44.el7.x86_64 13/26Running scriptlet: glibc-headers-2.17-317.el7.x86_64 14/26Installing : glibc-headers-2.17-317.el7.x86_64 14/26Installing : glibc-devel-2.17-317.el7.x86_64 15/26Running scriptlet: glibc-devel-2.17-317.el7.x86_64 15/26Installing : gcc-4.8.5-44.el7.x86_64 16/26Running scriptlet: gcc-4.8.5-44.el7.x86_64 16/26Installing : libkadm5-1.15.1-50.el7.x86_64 17/26Running scriptlet: libkadm5-1.15.1-50.el7.x86_64 17/26Installing : krb5-devel-1.15.1-50.el7.x86_64 18/26Installing : m4-1.4.16-10.el7.x86_64 19/26Running scriptlet: m4-1.4.16-10.el7.x86_64 19/26Installing : autoconf-2.69-11.el7.noarch 20/26Running scriptlet: autoconf-2.69-11.el7.noarch 20/26Installing : automake-1.13.4-3.el7.noarch 21/26Running scriptlet: automake-1.13.4-3.el7.noarch 21/26Installing : zlib-1.2.7-20.el7_9.i686 22/26Running scriptlet: zlib-1.2.7-20.el7_9.i686 22/26Installing : zlib-devel-1.2.7-20.el7_9.x86_64 23/26Installing : openssl-devel-1:1.0.2k-19.el7.x86_64 24/26Installing : libtool-2.4.2-22.el7_3.x86_64 25/26Running scriptlet: libtool-2.4.2-22.el7_3.x86_64 25/26Installing : gcc-c++-4.8.5-44.el7.x86_64 26/26Verifying : autoconf-2.69-11.el7.noarch 1/26Verifying : automake-1.13.4-3.el7.noarch 2/26Verifying : cpp-4.8.5-44.el7.x86_64 3/26Verifying : gcc-4.8.5-44.el7.x86_64 4/26Verifying : gcc-c++-4.8.5-44.el7.x86_64 5/26Verifying : glibc-2.17-317.el7.i686 6/26Verifying : glibc-devel-2.17-317.el7.x86_64 7/26Verifying : glibc-headers-2.17-317.el7.x86_64 8/26Verifying : keyutils-libs-devel-1.5.8-3.el7.x86_64 9/26Verifying : krb5-devel-1.15.1-50.el7.x86_64 10/26Verifying : libcom_err-devel-1.42.9-19.el7.x86_64 11/26Verifying : libkadm5-1.15.1-50.el7.x86_64 12/26Verifying : libselinux-devel-2.5-15.el7.x86_64 13/26Verifying : libsepol-devel-2.5-10.el7.x86_64 14/26Verifying : libstdc++-devel-4.8.5-44.el7.x86_64 15/26Verifying : libtool-2.4.2-22.el7_3.x86_64 16/26Verifying : libverto-devel-0.2.5-4.el7.x86_64 17/26Verifying : m4-1.4.16-10.el7.x86_64 18/26Verifying : nss-softokn-freebl-3.44.0-8.el7_7.i686 19/26Verifying : openssl-devel-1:1.0.2k-19.el7.x86_64 20/26Verifying : pcre-devel-8.32-17.el7.x86_64 21/26Verifying : perl-Test-Harness-3.28-3.el7.noarch 22/26Verifying : perl-Thread-Queue-3.02-2.el7.noarch 23/26Verifying : kernel-headers-3.10.0-1160.119.1.el7.x86_64 24/26Verifying : zlib-1.2.7-20.el7_9.i686 25/26Verifying : zlib-devel-1.2.7-20.el7_9.x86_64 26/26Installed:gcc-c++-4.8.5-44.el7.x86_64 libtool-2.4.2-22.el7_3.x86_64openssl-devel-1:1.0.2k-19.el7.x86_64 zlib-devel-1.2.7-20.el7_9.x86_64autoconf-2.69-11.el7.noarch automake-1.13.4-3.el7.noarchcpp-4.8.5-44.el7.x86_64 gcc-4.8.5-44.el7.x86_64glibc-2.17-317.el7.i686 glibc-devel-2.17-317.el7.x86_64glibc-headers-2.17-317.el7.x86_64 keyutils-libs-devel-1.5.8-3.el7.x86_64krb5-devel-1.15.1-50.el7.x86_64 libcom_err-devel-1.42.9-19.el7.x86_64libkadm5-1.15.1-50.el7.x86_64 libselinux-devel-2.5-15.el7.x86_64libsepol-devel-2.5-10.el7.x86_64 libstdc++-devel-4.8.5-44.el7.x86_64libverto-devel-0.2.5-4.el7.x86_64 m4-1.4.16-10.el7.x86_64nss-softokn-freebl-3.44.0-8.el7_7.i686 pcre-devel-8.32-17.el7.x86_64perl-Test-Harness-3.28-3.el7.noarch perl-Thread-Queue-3.02-2.el7.noarchkernel-headers-3.10.0-1160.119.1.el7.x86_64 zlib-1.2.7-20.el7_9.i686Complete![root@minio1 ~]#
08
PCRE
安装PCRE可以让Nginx支持「Rewrite」
获取源码包:
[root@minio1 pcre]# pwd/upload/pcre[root@minio1 pcre]#[root@minio1 pcre]# ls -ltrtotal 0[root@minio1 pcre]#[root@minio1 pcre]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz--2024-09-14 12:43:16-- http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gzResolving downloads.sourceforge.net (downloads.sourceforge.net)... 204.68.111.105Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|204.68.111.105|:80... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz?viasf=1 [following]--2024-09-14 12:43:18-- http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz?viasf=1Resolving jaist.dl.sourceforge.net (jaist.dl.sourceforge.net)... 150.65.7.130, 2001:df0:2ed:feed::feedConnecting to jaist.dl.sourceforge.net (jaist.dl.sourceforge.net)|150.65.7.130|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 1996552 (1.9M) [application/x-gzip]Saving to: ‘pcre-8.35.tar.gz’100%[======================================================================>] 1,996,552 51.6KB/s in 50s2024-09-14 12:44:09 (38.7 KB/s) - ‘pcre-8.35.tar.gz’ saved [1996552/1996552][root@minio1 pcre]#[root@minio1 pcre]# ls -ltrtotal 1952-rw-r--r-- 1 root root 1996552 Apr 9 2014 pcre-8.35.tar.gz[root@minio1 pcre]#[root@minio1 pcre]# du -sh *2.0M pcre-8.35.tar.gz[root@minio1 pcre]#
解压,并编译安装:
[root@minio1 pcre]# tar -xzf pcre-8.35.tar.gz[root@minio1 pcre]# ls -ltrtotal 1964drwxr-xr-x 7 1169 1169 8192 Apr 4 2014 pcre-8.35-rw-r--r-- 1 root root 1996552 Apr 9 2014 pcre-8.35.tar.gz[root@minio1 pcre]#[root@minio1 pcre]# cd pcre-8.35/[root@minio1 pcre-8.35]#[root@minio1 pcre-8.35]# ./configure && make && make install(... 过多的输出)
安装完成后,查看PCRE的版本,验证安装:
[root@minio1 pcre-8.35]# whereis pcre-configpcre-config: /usr/bin/pcre-config usr/local/bin/pcre-config usr/share/man/man1/pcre-config.1.gz[root@minio1 pcre-8.35]#[root@minio1 pcre-8.35]# which pcre-config/usr/local/bin/pcre-config[root@minio1 pcre-8.35]#[root@minio1 pcre-8.35]# pcre-config --version8.35[root@minio1 pcre-8.35]#
09
NGINX:源码包编译安装
获取源码包:
[root@minio1 nginx]# pwd/upload/nginx[root@minio1 nginx]#[root@minio1 nginx]# ls -ltrtotal 0[root@minio1 nginx]#[root@minio1 nginx]# wget http://nginx.org/download/nginx-1.20.2.tar.gz--2024-09-14 12:50:00-- http://nginx.org/download/nginx-1.20.2.tar.gzResolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2600::6, ...Connecting to nginx.org (nginx.org)|3.125.197.172|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 1062124 (1.0M) [application/octet-stream]Saving to: ‘nginx-1.20.2.tar.gz’100%[======================================================================>] 1,062,124 62.8KB/s in 24s2024-09-14 12:50:26 (42.9 KB/s) - ‘nginx-1.20.2.tar.gz’ saved [1062124/1062124][root@minio1 nginx]#[root@minio1 nginx]# ls -ltrtotal 1040-rw-r--r-- 1 root root 1062124 Nov 16 2021 nginx-1.20.2.tar.gz[root@minio1 nginx]#[root@minio1 nginx]# du -sh *1.1M nginx-1.20.2.tar.gz[root@minio1 nginx]#
解压,并编译安装:
[root@minio1 nginx]# pwd/upload/nginx[root@minio1 nginx]#[root@minio1 nginx]# ls -ltrtotal 1040-rw-r--r-- 1 root root 1062124 Nov 16 2021 nginx-1.20.2.tar.gz[root@minio1 nginx]#[root@minio1 nginx]# tar -xzf nginx-1.20.2.tar.gz[root@minio1 nginx]#[root@minio1 nginx]# cd nginx-1.20.2/[root@minio1 nginx-1.20.2]#[root@minio1 nginx-1.20.2]# mkdir usr/local/webserver/nginx -p[root@minio1 nginx-1.20.2]#[root@minio1 nginx-1.20.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/upload/pcre/pcre-8.35(... 过多的输出)checking for POSIX semaphores ... not foundchecking for POSIX semaphores in libpthread ... foundchecking for struct msghdr.msg_control ... foundchecking for ioctl(FIONBIO) ... foundchecking for ioctl(FIONREAD) ... foundchecking for struct tm.tm_gmtoff ... foundchecking for struct dirent.d_namlen ... not foundchecking for struct dirent.d_type ... foundchecking for sysconf(_SC_NPROCESSORS_ONLN) ... foundchecking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... foundchecking for openat(), fstatat() ... foundchecking for getaddrinfo() ... foundchecking for OpenSSL library ... foundchecking for zlib library ... foundcreating objs/MakefileConfiguration summary+ using PCRE library: /upload/pcre/pcre-8.35+ using system OpenSSL library+ using system zlib librarynginx path prefix: "/usr/local/webserver/nginx"nginx binary file: "/usr/local/webserver/nginx/sbin/nginx"nginx modules path: "/usr/local/webserver/nginx/modules"nginx configuration prefix: "/usr/local/webserver/nginx/conf"nginx configuration file: "/usr/local/webserver/nginx/conf/nginx.conf"nginx pid file: "/usr/local/webserver/nginx/logs/nginx.pid"nginx error log file: "/usr/local/webserver/nginx/logs/error.log"nginx http access log file: "/usr/local/webserver/nginx/logs/access.log"nginx http client request body temporary files: "client_body_temp"nginx http proxy temporary files: "proxy_temp"nginx http fastcgi temporary files: "fastcgi_temp"nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"[root@minio1 nginx-1.20.2]#[root@minio1 nginx-1.20.2]# make && make install(... 过多的输出)cp conf/koi-utf '/usr/local/webserver/nginx/conf'cp conf/win-utf '/usr/local/webserver/nginx/conf'test -f '/usr/local/webserver/nginx/conf/mime.types' \|| cp conf/mime.types '/usr/local/webserver/nginx/conf'cp conf/mime.types '/usr/local/webserver/nginx/conf/mime.types.default'test -f '/usr/local/webserver/nginx/conf/fastcgi_params' \|| cp conf/fastcgi_params '/usr/local/webserver/nginx/conf'cp conf/fastcgi_params \'/usr/local/webserver/nginx/conf/fastcgi_params.default'test -f '/usr/local/webserver/nginx/conf/fastcgi.conf' \|| cp conf/fastcgi.conf '/usr/local/webserver/nginx/conf'cp conf/fastcgi.conf '/usr/local/webserver/nginx/conf/fastcgi.conf.default'test -f '/usr/local/webserver/nginx/conf/uwsgi_params' \|| cp conf/uwsgi_params '/usr/local/webserver/nginx/conf'cp conf/uwsgi_params \'/usr/local/webserver/nginx/conf/uwsgi_params.default'test -f '/usr/local/webserver/nginx/conf/scgi_params' \|| cp conf/scgi_params '/usr/local/webserver/nginx/conf'cp conf/scgi_params \'/usr/local/webserver/nginx/conf/scgi_params.default'test -f '/usr/local/webserver/nginx/conf/nginx.conf' \|| cp conf/nginx.conf '/usr/local/webserver/nginx/conf/nginx.conf'cp conf/nginx.conf '/usr/local/webserver/nginx/conf/nginx.conf.default'test -d '/usr/local/webserver/nginx/logs' \|| mkdir -p '/usr/local/webserver/nginx/logs'test -d '/usr/local/webserver/nginx/logs' \|| mkdir -p '/usr/local/webserver/nginx/logs'test -d '/usr/local/webserver/nginx/html' \|| cp -R html '/usr/local/webserver/nginx'test -d '/usr/local/webserver/nginx/logs' \|| mkdir -p '/usr/local/webserver/nginx/logs'make[1]: Leaving directory `/upload/nginx/nginx-1.20.2'[root@minio1 nginx-1.20.2]#
这样,Nginx就安装完成了。
Nginx的目录结构:
[root@minio1 nginx-1.20.2]# tree usr/local/webserver/nginx//usr/local/webserver/nginx/├── conf│ ├── fastcgi.conf│ ├── fastcgi.conf.default│ ├── fastcgi_params│ ├── fastcgi_params.default│ ├── koi-utf│ ├── koi-win│ ├── mime.types│ ├── mime.types.default│ ├── nginx.conf│ ├── nginx.conf.default│ ├── scgi_params│ ├── scgi_params.default│ ├── uwsgi_params│ ├── uwsgi_params.default│ └── win-utf├── html│ ├── 50x.html│ └── index.html├── logs└── sbin└── nginx4 directories, 18 files[root@minio1 nginx-1.20.2]#
配置文件:/usr/local/webserver/nginx/conf/nginx.conf
启动目录:/usr/local/webserver/sbin/nginx
配置NGINX的Linux系统服务:
[root@minio1 system]# pwd/usr/lib/systemd/system[root@minio1 system]#[root@minio1 system]# cat nginx.service[Unit]Description=Nginx HTTP ServerAfter=network.target[Service]Type=forkingExecStart=/usr/local/webserver/nginx/sbin/nginx -c usr/local/webserver/nginx/conf/nginx.confExecReload=/usr/local/webserver/nginx/sbin/nginx -c usr/local/webserver/nginx/conf/nginx.conf -s reloadExecStop=/usr/local/webserver/nginx/sbin/nginx -s stopPrivateTmp=true[Install]WantedBy=multi-user.target[root@minio1 system]#
10
在NGINX中配置MINIO
修改NGINX的配置文件:
[root@minio1 system]# cat usr/local/webserver/nginx/conf/nginx.conf#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream minio_s3 {least_conn;server 192.168.2.41:9000;server 192.168.2.42:9000;server 192.168.2.43:9000;server 192.168.2.44:9000;}upstream minio_console {least_conn;server 192.168.2.41:9001;server 192.168.2.42:9001;server 192.168.2.43:9001;server 192.168.2.44:9001;}server {listen 80;listen [::]:80;server_name 192.168.2.45;#charset koi8-r;#access_log logs/host.access.log main;# Allow special characters in headersignore_invalid_headers off;# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;# Disable bufferingproxy_buffering off;proxy_request_buffering off;location / {# root html;# index index.html index.htm;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 300;# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass http://minio_s3; # This uses the upstream directive definition to load balance}location /minio/ui/ {rewrite ^/minio/ui/(.*) $1 break;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-NginX-Proxy true;# This is necessary to pass the correct IP to be hashed# real_ip_header X-Real-IP;proxy_connect_timeout 300;# To support websockets in MinIO versions released after January 2023proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)# Uncomment the following line to set the Origin request to an empty stringproxy_set_header Origin '';chunked_transfer_encoding off;# This uses the upstream directive definition to load balanceproxy_pass http://minio_console;}#error_page 404 404.html;# redirect server error pages to the static page 50x.html#error_page 500 502 503 504 50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ \.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}[root@minio1 system]#
上面,这里的地址配置:
server_name 192.168.2.45;
写的是一个虚拟地址,后面用「KeepAlive」配出来。
11
NGINX:启动
启动系统服务:
[root@minio1 system]# systemctl enable nginxCreated symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.[root@minio1 system]#[root@minio1 system]# systemctl start nginx[root@minio1 system]#[root@minio1 system]# systemctl status nginx● nginx.service - Nginx HTTP ServerLoaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)Active: active (running) since Sat 2024-09-14 13:34:30 CST; 4s agoProcess: 12648 ExecStart=/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)Main PID: 12651 (nginx)Tasks: 2CGroup: /system.slice/nginx.service├─12651 nginx: master process /usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/...└─12652 nginx: worker processSep 14 13:34:30 minio1 systemd[1]: Starting Nginx HTTP Server...Sep 14 13:34:30 minio1 systemd[1]: Started Nginx HTTP Server.[root@minio1 system]#[root@minio1 system]# ps -ef | grep nginxroot 12651 1 0 13:34 ? 00:00:00 nginx: master process /usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.confnobody 12652 12651 0 13:34 ? 00:00:00 nginx: worker processroot 12666 2210 0 13:34 pts/0 00:00:00 grep --color=auto nginx[root@minio1 system]#[root@minio1 system]# netstat -tupln | grep nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12651/nginx: mastertcp6 0 0 :::80 :::* LISTEN 12651/nginx: master[root@minio1 system]#
可以看到,Nginx已经拉起来了。
12
KeepAlived
官方网站:
https://www.keepalived.org/

它的最新版本是「2.3.1」
Keepalived for Linux- Version 2.3.1- Release Notes - May 24, 2024- MD5SUM:={5434ebc3becb6f86ebc3adc04e3e7e6d}
下载链接:
https://keepalived.org/software/keepalived-2.3.1.tar.gz
KeepAlived:架构图:

13
KeepAlived:安装
一、源码编译
上传安装介质:
将从官网下载到的安装介质(源码包)上传服务器:
[root@minio1 keepalived]# pwd/upload/keepalived[root@minio1 keepalived]#[root@minio1 keepalived]# ls -ltrtotal 1184-rw-r--r-- 1 root root 1210697 Sep 14 14:40 keepalived-2.3.1.tar.gz[root@minio1 keepalived]#[root@minio1 keepalived]# du -sh *1.2M keepalived-2.3.1.tar.gz[root@minio1 keepalived]#
解压:
[root@minio1 keepalived]# ls -ltrtotal 1184-rw-r--r-- 1 root root 1210697 Sep 14 14:40 keepalived-2.3.1.tar.gz[root@minio1 keepalived]#[root@minio1 keepalived]# tar -xzf keepalived-2.3.1.tar.gz[root@minio1 keepalived]#[root@minio1 keepalived]# ls -ltrtotal 1188drwxrwxr-x 10 1000 1000 4096 May 24 14:46 keepalived-2.3.1-rw-r--r-- 1 root root 1210697 Sep 14 14:40 keepalived-2.3.1.tar.gz[root@minio1 keepalived]#[root@minio1 keepalived]# cd keepalived-2.3.1/[root@minio1 keepalived-2.3.1]#[root@minio1 keepalived-2.3.1]# ls -ltrtotal 1216-rw-rw-r-- 1 1000 1000 41 Sep 28 2009 AUTHOR-rw-rw-r-- 1 1000 1000 18092 Nov 20 2012 COPYING-rw-rw-r-- 1 1000 1000 823 Dec 25 2017 CONTRIBUTORS-rwxrwxr-x 1 1000 1000 100 May 5 2020 build_setup-rwxrwxr-x 1 1000 1000 100 Dec 21 2020 autogen.sh-rw-rw-r-- 1 1000 1000 507110 Jan 27 2021 ChangeLog-rw-rw-r-- 1 1000 1000 6898 Mar 15 2021 TODO-rw-rw-r-- 1 1000 1000 3212 Nov 21 2021 Makefile.am-rw-rw-r-- 1 1000 1000 2720 Nov 21 2021 Dockerfile.indrwxrwxr-x 3 1000 1000 41 Jul 7 2022 snap-rw-rw-r-- 1 1000 1000 10714 Jun 7 2023 keepalived.spec.in-rw-rw-r-- 1 1000 1000 2963 Nov 22 2023 README.md-rw-rw-r-- 1 1000 1000 9954 Mar 2 2024 INSTALL-rw-rw-r-- 1 1000 1000 118553 May 24 14:37 configure.ac-rw-rw-r-- 1 1000 1000 44361 May 24 14:46 aclocal.m4-rw-rw-r-- 1 1000 1000 31979 May 24 14:46 Makefile.in-rwxrwxr-x 1 1000 1000 451003 May 24 14:46 configuredrwxrwxr-x 2 1000 1000 26 May 24 14:46 toolsdrwxrwxr-x 2 1000 1000 43 May 24 14:46 m4drwxrwxr-x 2 1000 1000 4096 May 24 14:46 libdrwxrwxr-x 10 1000 1000 260 May 24 14:46 keepaliveddrwxrwxr-x 5 1000 1000 210 May 24 14:46 docdrwxrwxr-x 2 1000 1000 83 May 24 14:46 build-auxdrwxrwxr-x 2 1000 1000 44 May 24 14:46 bin_install[root@minio1 keepalived-2.3.1]#
源码安装:
./configuremakemake install
二、YUM
更简单的安装方式是通过YUM:
[root@minio1 ~]# dnf search keepalivedLast metadata expiration check: 4:02:50 ago on Sat 14 Sep 2024 10:46:14 AM CST.======================================= Name Exactly Matched: keepalived =======================================keepalived.x86_64 : Load balancer and high availability service[root@minio1 ~]#[root@minio1 ~]# dnf install keepalivedLast metadata expiration check: 4:03:00 ago on Sat 14 Sep 2024 10:46:14 AM CST.Dependencies resolved.================================================================================================================Package Arch Version Repository Size================================================================================================================Installing:keepalived x86_64 1.3.5-19.el7 base 332 kInstalling dependencies:net-snmp-agent-libs x86_64 1:5.7.2-49.el7 base 708 kTransaction Summary================================================================================================================Install 2 PackagesTotal download size: 1.0 MInstalled size: 3.0 MIs this ok [y/N]: yDownloading Packages:(1/2): keepalived-1.3.5-19.el7.x86_64.rpm 3.6 MB/s | 332 kB 00:00(2/2): net-snmp-agent-libs-5.7.2-49.el7.x86_64.rpm 7.4 MB/s | 708 kB 00:00----------------------------------------------------------------------------------------------------------------Total 11 MB/s | 1.0 MB 00:00Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing : 1/1Installing : net-snmp-agent-libs-1:5.7.2-49.el7.x86_64 1/2Running scriptlet: net-snmp-agent-libs-1:5.7.2-49.el7.x86_64 1/2Installing : keepalived-1.3.5-19.el7.x86_64 2/2Running scriptlet: keepalived-1.3.5-19.el7.x86_64 2/2Verifying : keepalived-1.3.5-19.el7.x86_64 1/2Verifying : net-snmp-agent-libs-1:5.7.2-49.el7.x86_64 2/2Installed:keepalived-1.3.5-19.el7.x86_64 net-snmp-agent-libs-1:5.7.2-49.el7.x86_64Complete![root@minio1 ~]#[root@minio1 ~]# rpm -qa | grep keepalivedkeepalived-1.3.5-19.el7.x86_64[root@minio1 ~]#[root@minio1 ~]# rpm -ql keepalived/etc/keepalived/etc/keepalived/keepalived.conf/etc/sysconfig/keepalived/usr/bin/genhash/usr/lib/systemd/system/keepalived.service/usr/libexec/keepalived/usr/sbin/keepalived/usr/share/doc/keepalived-1.3.5/usr/share/doc/keepalived-1.3.5/AUTHOR/usr/share/doc/keepalived-1.3.5/CONTRIBUTORS/usr/share/doc/keepalived-1.3.5/COPYING/usr/share/doc/keepalived-1.3.5/ChangeLog/usr/share/doc/keepalived-1.3.5/NOTE_vrrp_vmac.txt/usr/share/doc/keepalived-1.3.5/README/usr/share/doc/keepalived-1.3.5/TODO/usr/share/doc/keepalived-1.3.5/keepalived.conf.SYNOPSIS/usr/share/doc/keepalived-1.3.5/samples/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.HTTP_GET.port/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.IPv6/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.SMTP_CHECK/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.SSL_GET/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.fwmark/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.inhibit/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.misc_check/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.misc_check_arg/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.quorum/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.sample/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.status_code/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.track_interface/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.virtual_server_group/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.virtualhost/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.localcheck/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.lvs_syncd/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.routes/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.rules/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.scripts/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.static_ipaddress/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.sync/usr/share/doc/keepalived-1.3.5/samples/sample.misccheck.smbcheck.sh/usr/share/man/man1/genhash.1.gz/usr/share/man/man5/keepalived.conf.5.gz/usr/share/man/man8/keepalived.8.gz/usr/share/snmp/mibs/KEEPALIVED-MIB.txt/usr/share/snmp/mibs/VRRP-MIB.txt/usr/share/snmp/mibs/VRRPv3-MIB.txt[root@minio1 ~]#
14
KeepAlived:主从配置
架构:
| 主节点 | 192.168.2.41 |
| 从节点 | 192.168.2.42 |
主节点配置:
[root@minio1 keepalived]# ifconfigens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.2.41 netmask 255.255.255.0 broadcast 192.168.2.255inet6 fe80::7d7a:b063:c131:ed30 prefixlen 64 scopeid 0x20<link>ether 00:50:56:ac:48:20 txqueuelen 1000 (Ethernet)RX packets 577044 bytes 438612765 (418.2 MiB)RX errors 0 dropped 435 overruns 0 frame 0TX packets 124090 bytes 559646912 (533.7 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 568 bytes 45128 (44.0 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 568 bytes 45128 (44.0 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255ether 52:54:00:5c:41:0b txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@minio1 keepalived]#[root@minio1 keepalived]# pwd/etc/keepalived[root@minio1 keepalived]#[root@minio1 keepalived]# ls -ltrtotal 8-rw-r--r-- 1 root root 3598 Oct 1 2020 keepalived.conf_bak_20240914_1454-rw-r--r-- 1 root root 507 Sep 14 14:55 keepalived.conf[root@minio1 keepalived]#[root@minio1 keepalived]# cat keepalived.confglobal_defs {router_id r1script_user root}vrrp_script check_nginx {script "/etc/keepalived/check-nginx.sh"interval 2weight -2fall 2rise 2}vrrp_instance VI_1 {state MASTERinterface ens192virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass Nephilim@123}virtual_ipaddress {192.168.2.45}track_script {check_nginx}}[root@minio1 keepalived]#
从节点配置:
[root@minio2 keepalived]# pwd/etc/keepalived[root@minio2 keepalived]#[root@minio2 keepalived]# ls -ltrtotal 4-rw-r--r-- 1 root root 506 Sep 14 14:56 keepalived.conf[root@minio2 keepalived]#[root@minio2 keepalived]# cat keepalived.confglobal_defs {router_id r2script_user root}vrrp_script check_nginx {script "/etc/keepalived/check-nginx.sh"interval 2weight -2fall 2rise 2}vrrp_instance VI_1 {state BACKUPinterface ens192virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass Nephilim@123}virtual_ipaddress {192.168.2.45}track_script {check_nginx}}[root@minio2 keepalived]#
同一套 KeepAlived主从:
virtual_router_id,必须保持一致
priority,数值越高,优先级越高
auth_pass,必须保持一致
interface,虚拟IP挂载到哪块网卡上
virtual_ipaddress,虚拟IP的值
track_script,检测脚本;如果执行失败,则「虚拟IP」将在主从之间切换
Nginx检测脚本:
[root@minio1 keepalived]# pwd/etc/keepalived[root@minio1 keepalived]#[root@minio1 keepalived]# ls -ltrtotal 12-rw-r--r-- 1 root root 3598 Oct 1 2020 keepalived.conf_bak_20240914_1454-rw-r--r-- 1 root root 477 Sep 14 14:58 keepalived.conf-rw-r--r-- 1 root root 199 Sep 14 15:03 check-nginx.sh[root@minio1 keepalived]#[root@minio1 keepalived]# cat check-nginx.sh#!/bin/shif [ $(ps -C nginx --no-header|wc -l) -eq 0 ]; thensystemctl start nginxsleep 1if [ $(ps -C nginx --no-header|wc -l) -eq 0 ]; thenexit 1fielseexit 0fi[root@minio1 keepalived]#[root@minio1 keepalived]# lltotal 12-rw-r--r-- 1 root root 199 Sep 14 15:03 check-nginx.sh-rw-r--r-- 1 root root 477 Sep 14 14:58 keepalived.conf-rw-r--r-- 1 root root 3598 Oct 1 2020 keepalived.conf_bak_20240914_1454[root@minio1 keepalived]#[root@minio1 keepalived]# chmod +x check-nginx.sh[root@minio1 keepalived]#[root@minio1 keepalived]# scp check-nginx.sh root@minio2:/etc/keepalived/check-nginx.sh 100% 199 246.6KB/s 00:00[root@minio1 keepalived]#
启动 KeepAlived 之前:
[root@minio1 keepalived]# systemctl status keepalived● keepalived.service - LVS and VRRP High Availability MonitorLoaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)Active: inactive (dead) since Sat 2024-09-14 14:51:37 CST; 14min agoProcess: 13698 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)Main PID: 13701 (code=exited, status=0/SUCCESS)Sep 14 14:51:31 minio1 Keepalived_healthcheckers[13702]: Activating healthchecker for service [10.10.10.3]:1358Sep 14 14:51:31 minio1 Keepalived_healthcheckers[13702]: Activating healthchecker for service [10.10.10.3]:1358Sep 14 14:51:32 minio1 Keepalived_vrrp[13703]: StoppedSep 14 14:51:32 minio1 Keepalived[13701]: Keepalived_vrrp exited with permanent error CONFIG. TerminatingSep 14 14:51:32 minio1 Keepalived[13701]: StoppingSep 14 14:51:32 minio1 Keepalived_healthcheckers[13702]: Removing service [192.168.201.100]:443 from VS [1...443Sep 14 14:51:32 minio1 Keepalived_healthcheckers[13702]: Removing service [192.168.200.4]:1358 from VS [10...358Sep 14 14:51:32 minio1 Keepalived_healthcheckers[13702]: Removing service [192.168.200.5]:1358 from VS [10...358Sep 14 14:51:32 minio1 Keepalived_healthcheckers[13702]: StoppedSep 14 14:51:37 minio1 Keepalived[13701]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2Hint: Some lines were ellipsized, use -l to show in full.[root@minio1 keepalived]#[root@minio1 keepalived]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:ac:48:20 brd ff:ff:ff:ff:ff:ffinet 192.168.2.41/24 brd 192.168.2.255 scope global noprefixroute ens192valid_lft forever preferred_lft foreverinet6 fe80::7d7a:b063:c131:ed30/64 scope link noprefixroutevalid_lft forever preferred_lft forever3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:5c:41:0b brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:5c:41:0b brd ff:ff:ff:ff:ff:ff[root@minio1 keepalived]#
可以通过「ip addr」看到,当前「ens192」上并没有挂载 虚拟IP
KeepAlived启动后:
[root@minio1 keepalived]# systemctl start keepalived[root@minio1 keepalived]#[root@minio1 keepalived]# systemctl status keepalived● keepalived.service - LVS and VRRP High Availability MonitorLoaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)Active: active (running) since Sat 2024-09-14 15:06:23 CST; 5s agoProcess: 13968 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)Main PID: 13970 (keepalived)Tasks: 3CGroup: /system.slice/keepalived.service├─13970 /usr/sbin/keepalived -D├─13972 /usr/sbin/keepalived -D└─13973 /usr/sbin/keepalived -DSep 14 15:06:23 minio1 Keepalived_vrrp[13973]: VRRP_Script(check_nginx) succeededSep 14 15:06:24 minio1 Keepalived_vrrp[13973]: VRRP_Instance(VI_1) Transition to MASTER STATESep 14 15:06:25 minio1 Keepalived_vrrp[13973]: VRRP_Instance(VI_1) Entering MASTER STATESep 14 15:06:25 minio1 Keepalived_vrrp[13973]: VRRP_Instance(VI_1) setting protocol VIPs.Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: Sending gratuitous ARP on ens192 for 192.168.2.45Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on en...2.45Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: Sending gratuitous ARP on ens192 for 192.168.2.45Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: Sending gratuitous ARP on ens192 for 192.168.2.45Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: Sending gratuitous ARP on ens192 for 192.168.2.45Sep 14 15:06:25 minio1 Keepalived_vrrp[13973]: Sending gratuitous ARP on ens192 for 192.168.2.45Hint: Some lines were ellipsized, use -l to show in full.[root@minio1 keepalived]#[root@minio1 keepalived]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:ac:48:20 brd ff:ff:ff:ff:ff:ffinet 192.168.2.41/24 brd 192.168.2.255 scope global noprefixroute ens192valid_lft forever preferred_lft foreverinet 192.168.2.45/32 scope global ens192valid_lft forever preferred_lft foreverinet6 fe80::7d7a:b063:c131:ed30/64 scope link noprefixroutevalid_lft forever preferred_lft forever3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:5c:41:0b brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:5c:41:0b brd ff:ff:ff:ff:ff:ff[root@minio1 keepalived]#
可以看到 虚拟IP「192.168.2.45」已经被挂载到了「ens192」上了。
15
通过Keepalived的VIP访问MINIO
如果上述步骤都成功执行,此时就可以通过Keepalived服务挂载的VIP访问MINIO了:


至此,MINIO的集群部署,就全部完成了。
END
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。




