|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
CentOS Stream作为企业级Linux发行版,为系统管理员和网络工程师提供了强大的功能和灵活性。作为RHEL(Red Hat Enterprise Linux)的上游开发平台,CentOS Stream不仅提供了稳定可靠的操作环境,还让用户能够提前体验到即将在RHEL中发布的新功能。本文将深入探讨CentOS Stream的高级功能,从系统管理到网络配置,全面解析这个强大操作系统的各个方面,帮助读者充分利用CentOS Stream的潜力来构建和维护高效的企业级IT基础设施。
CentOS Stream概述
CentOS Stream是CentOS项目的一个重大转变,它从传统的RHEL下游版本转变为RHEL的上游开发分支。这一变化使得CentOS Stream成为一个滚动发布的发行版,位于Fedora Linux和RHEL之间。用户可以提前获取到将在未来RHEL版本中出现的功能和更新,这对于需要规划和测试新功能的企业来说非常有价值。
CentOS Stream保留了RHEL的稳定性、安全性和性能,同时增加了更多的灵活性和创新性。它支持x86_64、ARM64、POWER9和s390x等多种架构,适用于从小型企业到大型数据中心的各种环境。
CentOS Stream的主要特点
1. 滚动更新模型:持续接收更新和改进,而不是等待主要版本发布。
2. 接近RHEL的功能:提供即将在RHEL中出现的功能,使企业能够提前适应和测试。
3. 企业级稳定性:尽管是滚动发布,但仍然保持高度的稳定性和可靠性。
4. 长期支持:提供长期的支持周期,适合企业级部署。
5. 广泛的软件生态系统:拥有丰富的软件包和工具,满足各种企业需求。
系统管理高级功能
系统监控与性能优化
CentOS Stream提供了多种工具来监控系统性能和资源使用情况,这些工具对于维护系统健康和优化性能至关重要。
top是Linux系统中最基本的实时监控工具,而htop则是其增强版本,提供了更友好的用户界面和更多功能。
- # 安装htop
- sudo dnf install htop
- # 运行htop
- htop
复制代码
htop提供了颜色编码的输出,可以轻松识别CPU密集型进程、内存使用情况等。与top相比,htop支持鼠标操作,可以垂直和水平滚动,更直观地查看所有进程。
vmstat是一个强大的工具,用于报告关于进程、内存、分页、块IO、陷阱(中断)和CPU活动的信息。
- # 每2秒更新一次,共更新5次
- vmstat 2 5
复制代码
输出解释:
• r: 运行队列中的进程数
• b: 等待IO的不可中断进程数
• swpd: 使用的虚拟内存量
• free: 空闲内存量
• buff: 用作缓冲区的内存量
• cache: 用作缓存的内存量
• si: 从磁盘交换的内存量(/s)
• so: 交换到磁盘的内存量(/s)
• bi: 从块设备接收的块(blocks/s)
• bo: 发送到块设备的块(blocks/s)
• in: 每秒中断数
• cs: 每秒上下文切换数
• us: 用户空间CPU时间百分比
• sy: 内核空间CPU时间百分比
• id: 空闲时间百分比
• wa: 等待IO的时间百分比
sar(System Activity Reporter)是sysstat软件包的一部分,可以收集、报告和保存系统活动信息。
- # 安装sysstat
- sudo dnf install sysstat
- # 启用并启动sysstat服务
- sudo systemctl enable sysstat
- sudo systemctl start sysstat
- # 查看CPU使用情况
- sar -u
- # 查看内存使用情况
- sar -r
- # 查看网络统计
- sar -n DEV
复制代码
Performance Co-Pilot是一个系统性能和分析工具包,支持实时监控和历史数据收集。
- # 安装PCP
- sudo dnf install pcp
- # 启动PCP服务
- sudo systemctl start pmcd
- sudo systemctl enable pmcd
- # 使用pmstat查看基本性能指标
- pmstat
- # 使用pmchart进行图形化监控
- pmchart
复制代码
软件包管理
CentOS Stream使用DNF(Dandified YUM)作为其默认的软件包管理器,它是YUM的下一代版本,提供了更好的性能和更丰富的功能。
- # 更新所有软件包
- sudo dnf update
- # 安装软件包
- sudo dnf install package_name
- # 删除软件包
- sudo dnf remove package_name
- # 搜索软件包
- sudo dnf search keyword
- # 显示软件包信息
- sudo dnf info package_name
- # 列出所有已安装的软件包
- sudo dnf list installed
- # 查找提供特定文件的软件包
- sudo dnf provides /path/to/file
- # 清理缓存
- sudo dnf clean all
复制代码
DNF允许用户安装预定义的软件包组,这对于设置特定功能的服务器非常有用。
- # 列出所有可用的软件组
- sudo dnf group list
- # 查看特定软件组的详细信息
- sudo dnf group info "Group Name"
- # 安装软件组
- sudo dnf group install "Group Name"
- # 删除软件组
- sudo dnf group remove "Group Name"
复制代码
CentOS Stream允许用户添加和管理额外的软件仓库,以访问更多的软件包。
- # 列出所有启用的仓库
- sudo dnf repolist
- # 列出所有仓库(包括禁用的)
- sudo dnf repolist all
- # 启用仓库
- sudo dnf config-manager --enable repository_name
- # 禁用仓库
- sudo dnf config-manager --disable repository_name
- # 添加新仓库(以EPEL为例)
- sudo dnf install epel-release
复制代码
CentOS Stream引入了模块流的概念,允许用户安装同一软件的不同版本。
- # 列出所有可用的模块
- sudo dnf module list
- # 查看特定模块的详细信息
- sudo dnf module info module_name
- # 安装特定模块流
- sudo dnf module install module_name:stream
- # 切换到不同的模块流
- sudo dnf module reset module_name
- sudo dnf module enable module_name:stream
- sudo dnf module install module_name
复制代码
服务管理
CentOS Stream使用systemd作为其初始化系统和服务管理器,它取代了传统的SysV初始化系统。
- # 启动服务
- sudo systemctl start service_name
- # 停止服务
- sudo systemctl stop service_name
- # 重启服务
- sudo systemctl restart service_name
- # 重新加载服务配置
- sudo systemctl reload service_name
- # 启用服务(开机自启)
- sudo systemctl enable service_name
- # 禁用服务
- sudo systemctl disable service_name
- # 查看服务状态
- sudo systemctl status service_name
- # 检查服务是否启用
- sudo systemctl is-enabled service_name
- # 列出所有已启用的服务
- sudo systemctl list-unit-files | grep enabled
复制代码
创建自定义服务是CentOS Stream中的一个重要功能,允许用户管理自己的应用程序和脚本。
以下是一个创建自定义服务的示例:
- # 创建服务文件
- sudo nano /etc/systemd/system/myapp.service
复制代码
在文件中添加以下内容:
- [Unit]
- Description=My Custom Application
- After=network.target
- [Service]
- Type=simple
- User=myuser
- ExecStart=/path/to/myapp
- Restart=on-failure
- RestartSec=5s
- [Install]
- WantedBy=multi-user.target
复制代码
保存文件后,执行以下命令:
- # 重新加载systemd配置
- sudo systemctl daemon-reload
- # 启动服务
- sudo systemctl start myapp
- # 启用服务(开机自启)
- sudo systemctl enable myapp
- # 检查服务状态
- sudo systemctl status myapp
复制代码
systemd提供了定时器功能,可以替代传统的cron作业。
创建定时器示例:
- # 创建定时器文件
- sudo nano /etc/systemd/system/mytimer.timer
复制代码
在文件中添加以下内容:
- [Unit]
- Description=Run my task daily
- [Timer]
- OnCalendar=daily
- Persistent=true
- [Install]
- WantedBy=timers.target
复制代码
创建对应的服务文件:
- sudo nano /etc/systemd/system/mytimer.service
复制代码
在文件中添加以下内容:
- [Unit]
- Description=My Task
- [Service]
- Type=oneshot
- ExecStart=/path/to/mytask
复制代码
启用定时器:
- # 重新加载systemd配置
- sudo systemctl daemon-reload
- # 启用定时器
- sudo systemctl enable mytimer.timer
- # 启动定时器
- sudo systemctl start mytimer.timer
- # 检查定时器状态
- sudo systemctl list-timers --all
复制代码
安全管理
CentOS Stream提供了多种安全工具和功能,帮助管理员保护系统免受各种威胁。
SELinux(Security-Enhanced Linux)是Linux内核的一个安全模块,提供了强制访问控制(MAC)功能。
- # 检查SELinux状态
- sestatus
- # 临时设置SELinux模式
- sudo setenforce 0 # Permissive mode
- sudo setenforce 1 # Enforcing mode
- # 永久更改SELinux模式
- sudo nano /etc/selinux/config
复制代码
在配置文件中,将SELINUX=行更改为disabled、permissive或enforcing。
- # 查看SELinux布尔值
- getsebool -a
- # 设置SELinux布尔值
- sudo setsebool -P httpd_can_network_connect on
- # 查看文件的安全上下文
- ls -Z /path/to/file
- # 更改文件的安全上下文
- sudo chcon -t httpd_sys_content_t /path/to/file
- # 恢复文件的默认安全上下文
- sudo restorecon -v /path/to/file
复制代码
CentOS Stream使用firewalld作为其默认的防火墙管理工具,它提供了动态管理的防火墙,支持网络/防火墙区域定义。
- # 检查firewalld状态
- sudo systemctl status firewalld
- # 启动并启用firewalld
- sudo systemctl start firewalld
- sudo systemctl enable firewalld
- # 列出所有可用的区域
- sudo firewall-cmd --get-zones
- # 列出当前活动的区域
- sudo firewall-cmd --get-active-zones
- # 获取默认区域
- sudo firewall-cmd --get-default-zone
- # 列出特定区域的所有设置
- sudo firewall-cmd --zone=public --list-all
- # 开放端口
- sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
- # 关闭端口
- sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
- # 开放服务
- sudo firewall-cmd --zone=public --add-service=http --permanent
- # 关闭服务
- sudo firewall-cmd --zone=public --remove-service=http --permanent
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
fail2ban是一个入侵防御软件,可以监控日志文件并根据预设规则禁止可疑IP地址。
- # 安装fail2ban
- sudo dnf install fail2ban
- # 启动并启用fail2ban
- sudo systemctl start fail2ban
- sudo systemctl enable fail2ban
- # 创建本地配置文件
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- # 编辑配置文件
- sudo nano /etc/fail2ban/jail.local
复制代码
在配置文件中,可以设置各种服务的保护规则,例如SSH:
- [sshd]
- enabled = true
- port = ssh
- logpath = %(sshd_log)s
- maxretry = 3
- bantime = 3600
复制代码
重启fail2ban服务:
- sudo systemctl restart fail2ban
复制代码
检查fail2ban状态:
- sudo fail2ban-client status
- sudo fail2ban-client status sshd
复制代码
网络配置高级功能
网络接口配置
CentOS Stream使用NetworkManager作为其网络配置工具,提供了灵活的网络管理功能。
nmcli是NetworkManager的命令行工具,可以用来管理网络连接。
- # 列出所有网络连接
- nmcli connection show
- # 列出活动连接
- nmcli connection show --active
- # 显示网络设备状态
- nmcli device status
- # 创建新的以太网连接
- sudo nmcli connection add type ethernet con-name my-connection ifname eth0
- # 修改连接设置
- sudo nmcli connection modify my-connection ipv4.addresses 192.168.1.100/24
- sudo nmcli connection modify my-connection ipv4.gateway 192.168.1.1
- sudo nmcli connection modify my-connection ipv4.dns "8.8.8.8 8.8.4.4"
- sudo nmcli connection modify my-connection ipv4.method manual
- # 启用连接
- sudo nmcli connection up my-connection
- # 禁用连接
- sudo nmcli connection down my-connection
- # 删除连接
- sudo nmcli connection delete my-connection
复制代码
nmtui是一个基于文本的用户界面,为那些更喜欢图形化界面的用户提供了方便。
在nmtui界面中,可以使用键盘导航来编辑连接、激活连接和设置系统主机名。
虽然NetworkManager是推荐的网络配置方法,但CentOS Stream仍然支持传统的ifcfg文件配置方式。
配置文件位于/etc/sysconfig/network-scripts/目录下,例如ifcfg-eth0:
- DEVICE=eth0
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=192.168.1.100
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=8.8.8.8
- DNS2=8.8.4.4
复制代码
保存文件后,重启网络服务:
- sudo systemctl restart NetworkManager
复制代码
网络绑定允许将多个网络接口组合成一个逻辑接口,以提高带宽和提供冗余。
- # 安装绑定工具
- sudo dnf install teamd
- # 创建绑定接口配置文件
- sudo nano /etc/sysconfig/network-scripts/ifcfg-bond0
复制代码
添加以下内容:
- DEVICE=bond0
- TYPE=Bond
- BONDING_MASTER=yes
- IPADDR=192.168.1.100
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=8.8.8.8
- DNS2=8.8.4.4
- ONBOOT=yes
- BONDING_OPTS="mode=4 miimon=100"
复制代码
配置从属接口:
- sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
复制代码
添加以下内容:
- DEVICE=eth0
- TYPE=Ethernet
- BOOTPROTO=none
- ONBOOT=yes
- MASTER=bond0
- SLAVE=yes
复制代码
对eth1接口重复上述步骤,然后重启网络服务:
- sudo systemctl restart NetworkManager
复制代码
验证绑定配置:
- cat /proc/net/bonding/bond0
复制代码
VLAN(虚拟局域网)允许在物理网络上创建逻辑分段。
- # 创建VLAN接口
- sudo nmcli connection add type vlan con-name vlan100 dev eth0 id 100
- # 配置VLAN接口
- sudo nmcli connection modify vlan100 ipv4.addresses 192.168.100.100/24
- sudo nmcli connection modify vlan100 ipv4.gateway 192.168.100.1
- sudo nmcli connection modify vlan100 ipv4.method manual
- # 激活VLAN接口
- sudo nmcli connection up vlan100
复制代码
防火墙高级配置
CentOS Stream的firewalld提供了丰富的功能,可以满足复杂的网络安全需求。
区域是firewalld的一个重要概念,它定义了信任级别和相应的规则。
- # 创建自定义区域
- sudo firewall-cmd --new-zone=myzone --permanent
- # 设置默认区域
- sudo firewall-cmd --set-default-zone=public
- # 为接口分配区域
- sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
- # 列出所有区域及其规则
- sudo firewall-cmd --list-all-zones
复制代码
丰富的规则允许更复杂的防火墙规则配置。
- # 允许特定IP访问所有服务
- sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent
- # 拒绝特定IP访问特定端口
- sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port protocol="tcp" port="80" reject' --permanent
- # 允许特定IP访问特定服务
- sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.2.10" service name="http" accept' --permanent
- # 转发端口
- sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
直接规则允许直接向防火墙添加iptables规则。
- # 添加直接规则
- sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT --permanent
- # 列出所有直接规则
- sudo firewall-cmd --direct --get-all-rules
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
网络服务配置
CentOS Stream提供了多种网络服务,可以满足企业级应用需求。
DHCP(动态主机配置协议)服务器自动分配IP地址给网络中的设备。
- # 安装DHCP服务器
- sudo dnf install dhcp-server
- # 配置DHCP服务器
- sudo nano /etc/dhcp/dhcpd.conf
复制代码
添加以下配置:
- # DHCP服务器配置
- default-lease-time 600;
- max-lease-time 7200;
- authoritative;
- subnet 192.168.1.0 netmask 255.255.255.0 {
- range 192.168.1.100 192.168.1.200;
- option routers 192.168.1.1;
- option domain-name-servers 8.8.8.8, 8.8.4.4;
- option domain-name "example.com";
- }
- # 静态IP分配
- host fixed-host {
- hardware ethernet 00:0C:29:AA:BB:CC;
- fixed-address 192.168.1.50;
- }
复制代码
启动并启用DHCP服务器:
- sudo systemctl start dhcpd
- sudo systemctl enable dhcpd
复制代码
BIND是CentOS Stream中最常用的DNS服务器软件。
- # 安装BIND
- sudo dnf install bind bind-utils
- # 配置BIND
- sudo nano /etc/named.conf
复制代码
基本配置示例:
- options {
- listen-on port 53 { 127.0.0.1; 192.168.1.1; };
- listen-on-v6 port 53 { ::1; };
- directory "/var/named";
- dump-file "/var/named/data/cache_dump.db";
- statistics-file "/var/named/data/named_stats.txt";
- memstatistics-file "/var/named/data/named_mem_stats.txt";
- recursing-file "/var/named/data/named.recursing";
- secroots-file "/var/named/data/named.secroots";
- allow-query { localhost; 192.168.1.0/24; };
-
- recursion yes;
-
- dnssec-enable yes;
- dnssec-validation yes;
-
- managed-keys-directory "/var/named/dynamic";
-
- pid-file "/run/named/named.pid";
- session-keyfile "/run/named/session.key";
- };
- logging {
- channel default_debug {
- file "data/named.run";
- severity dynamic;
- };
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "example.com" IN {
- type master;
- file "example.com.zone";
- allow-update { none; };
- };
- zone "1.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.1.zone";
- allow-update { none; };
- };
- include "/etc/named.rfc1912.zones";
- include "/etc/named.root.key";
复制代码
创建正向区域文件:
- sudo nano /var/named/example.com.zone
复制代码
添加以下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2023081501 ; Serial
- 3600 ; Refresh
- 1800 ; Retry
- 604800 ; Expire
- 86400 ; Minimum TTL
- )
- @ IN NS ns1.example.com.
- @ IN A 192.168.1.1
- ns1 IN A 192.168.1.1
- www IN A 192.168.1.100
- mail IN A 192.168.1.150
复制代码
创建反向区域文件:
- sudo nano /var/named/192.168.1.zone
复制代码
添加以下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2023081501 ; Serial
- 3600 ; Refresh
- 1800 ; Retry
- 604800 ; Expire
- 86400 ; Minimum TTL
- )
- @ IN NS ns1.example.com.
- 1 IN PTR ns1.example.com.
- 100 IN PTR www.example.com.
- 150 IN PTR mail.example.com.
复制代码
设置正确的文件权限:
- sudo chown -R named:named /var/named
- sudo restorecon -Rv /var/named
复制代码
启动并启用BIND:
- sudo systemctl start named
- sudo systemctl enable named
复制代码
Apache HTTP Server是CentOS Stream中最常用的Web服务器。
- # 安装Apache
- sudo dnf install httpd
- # 启动并启用Apache
- sudo systemctl start httpd
- sudo systemctl enable httpd
- # 配置防火墙允许HTTP和HTTPS流量
- sudo firewall-cmd --permanent --add-service={http,https}
- sudo firewall-cmd --reload
复制代码
创建虚拟主机配置:
- sudo nano /etc/httpd/conf.d/example.com.conf
复制代码
添加以下内容:
- <VirtualHost *:80>
- ServerName example.com
- ServerAlias www.example.com
- DocumentRoot /var/www/example.com
- ErrorLog /var/log/httpd/example.com-error.log
- CustomLog /var/log/httpd/example.com-access.log combined
- </VirtualHost>
复制代码
创建网站目录和文件:
- sudo mkdir -p /var/www/example.com
- sudo echo "<h1>Welcome to Example.com</h1>" | sudo tee /var/www/example.com/index.html
- sudo chown -R apache:apache /var/www/example.com
- sudo restorecon -Rv /var/www/example.com
复制代码
重启Apache服务:
- sudo systemctl restart httpd
复制代码
VSFTPD是CentOS Stream中最安全、最常用的FTP服务器。
- # 安装VSFTPD
- sudo dnf install vsftpd
- # 配置VSFTPD
- sudo nano /etc/vsftpd/vsftpd.conf
复制代码
基本配置示例:
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- local_umask=022
- dirmessage_enable=YES
- xferlog_enable=YES
- connect_from_port_20=YES
- xferlog_std_format=YES
- listen=NO
- listen_ipv6=YES
- pam_service_name=vsftpd
- userlist_enable=YES
- userlist_file=/etc/vsftpd/user_list
- userlist_deny=NO
- chroot_local_user=YES
- allow_writeable_chroot=YES
- pasv_min_port=40000
- pasv_max_port=50000
复制代码
创建FTP用户并设置密码:
- sudo useradd -m ftpuser
- sudo passwd ftpuser
复制代码
将用户添加到允许列表:
- echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list
复制代码
启动并启用VSFTPD:
- sudo systemctl start vsftpd
- sudo systemctl enable vsftpd
复制代码
配置防火墙允许FTP流量:
- sudo firewall-cmd --permanent --add-service=ftp
- sudo firewall-cmd --reload
复制代码
高可用性网络配置
CentOS Stream提供了多种高可用性解决方案,确保关键服务的连续性。
网络绑定(Teaming)是一种将多个网络接口组合成一个逻辑接口的方法,以提高带宽和提供冗余。
- # 安装teamd
- sudo dnf install teamd
- # 创建team接口配置文件
- sudo nano /etc/sysconfig/network-scripts/ifcfg-team0
复制代码
添加以下内容:
- DEVICE=team0
- DEVICETYPE=Team
- TEAM_CONFIG="{"runner": {"name": "activebackup"}}"
- BOOTPROTO=none
- IPADDR=192.168.1.100
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=8.8.8.8
- DNS2=8.8.4.4
- ONBOOT=yes
复制代码
配置从属接口:
- sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
复制代码
添加以下内容:
- DEVICE=eth0
- DEVICETYPE=TeamPort
- TEAM_MASTER=team0
- ONBOOT=yes
复制代码
对eth1接口重复上述步骤,然后重启网络服务:
- sudo systemctl restart NetworkManager
复制代码
验证team配置:
VLAN桥接允许在物理网络上创建逻辑分段,并将这些分段桥接到虚拟机或其他网络设备。
- # 安装bridge-utils
- sudo dnf install bridge-utils
- # 创建桥接接口
- sudo nmcli connection add type bridge con-name br0 ifname br0
- # 配置桥接接口
- sudo nmcli connection modify br0 ipv4.addresses 192.168.1.100/24
- sudo nmcli connection modify br0 ipv4.gateway 192.168.1.1
- sudo nmcli connection modify br0 ipv4.dns "8.8.8.8 8.8.4.4"
- sudo nmcli connection modify br0 ipv4.method manual
- # 创建VLAN接口
- sudo nmcli connection add type vlan con-name vlan100 dev eth0 id 100
- # 将VLAN接口添加到桥接
- sudo nmcli connection add type bridge-slave con-name br0-slave100 ifname vlan100 master br0
- # 激活连接
- sudo nmcli connection up br0
- sudo nmcli connection up vlan100
- sudo nmcli connection up br0-slave100
复制代码
验证桥接配置:
使用Keepalived和HAProxy可以实现高可用性和负载均衡。
- # 安装Keepalived和HAProxy
- sudo dnf install keepalived haproxy
- # 配置Keepalived
- sudo nano /etc/keepalived/keepalived.conf
复制代码
主节点配置示例:
- vrrp_script chk_haproxy {
- script "killall -0 haproxy"
- interval 2
- weight 2
- }
- vrrp_instance VI_1 {
- state MASTER
- interface eth0
- virtual_router_id 51
- priority 101
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass secret
- }
- virtual_ipaddress {
- 192.168.1.200/24
- }
- track_script {
- chk_haproxy
- }
- }
复制代码
备份节点配置示例:
- vrrp_script chk_haproxy {
- script "killall -0 haproxy"
- interval 2
- weight 2
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 51
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass secret
- }
- virtual_ipaddress {
- 192.168.1.200/24
- }
- track_script {
- chk_haproxy
- }
- }
复制代码
配置HAProxy:
- sudo nano /etc/haproxy/haproxy.cfg
复制代码
添加以下内容:
- frontend http-in
- bind *:80
- default_backend servers
- backend servers
- balance roundrobin
- server server1 192.168.1.101:80 check
- server server2 192.168.1.102:80 check
复制代码
启动并启用Keepalived和HAProxy:
- sudo systemctl start keepalived
- sudo systemctl enable keepalived
- sudo systemctl start haproxy
- sudo systemctl enable haproxy
复制代码
容器化与虚拟化支持
CentOS Stream提供了强大的容器化和虚拟化支持,使企业能够构建灵活、高效的IT基础设施。
使用Podman进行容器管理
Podman是CentOS Stream中的默认容器引擎,它提供了一个与Docker兼容的CLI,但不需要守护进程。
- # 安装Podman
- sudo dnf install podman
- # 搜索容器镜像
- podman search nginx
- # 拉取容器镜像
- podman pull nginx
- # 列出本地镜像
- podman images
- # 运行容器
- podman run -d -p 8080:80 --name mynginx nginx
- # 列出运行中的容器
- podman ps
- # 列出所有容器(包括已停止的)
- podman ps -a
- # 停止容器
- podman stop mynginx
- # 启动容器
- podman start mynginx
- # 删除容器
- podman rm mynginx
- # 删除镜像
- podman rmi nginx
复制代码
创建Dockerfile:
- mkdir myapp && cd myapp
- nano Dockerfile
复制代码
添加以下内容:
- FROM centos:stream8
- RUN dnf install -y httpd
- COPY index.html /var/www/html/
- EXPOSE 80
- CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
复制代码
创建index.html文件:
- echo "<h1>Welcome to My Custom Container</h1>" > index.html
复制代码
构建容器镜像:
运行自定义容器:
- podman run -d -p 8081:80 --name myapp-container myapp
复制代码
Pod是一组共享资源的容器,类似于Kubernetes中的Pod。
- # 创建Pod
- podman pod create --name mypod -p 8082:80
- # 在Pod中运行容器
- podman run -d --pod mypod --name mynginx nginx
- # 查看Pod信息
- podman pod inspect mypod
- # 列出Pod中的容器
- podman pod ps --pod mypod
- # 停止Pod
- podman pod stop mypod
- # 启动Pod
- podman pod start mypod
- # 删除Pod
- podman pod rm mypod
复制代码
使用Kubernetes进行容器编排
CentOS Stream提供了对Kubernetes的支持,使企业能够构建和管理大规模的容器化应用。
- # 安装Minikube
- curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
- sudo install minikube-linux-amd64 /usr/local/bin/minikube
- # 安装kubectl
- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
- sudo install kubectl /usr/local/bin/kubectl
- # 启动Minikube
- minikube start --driver=podman
- # 检查Minikube状态
- minikube status
复制代码
创建部署配置文件:
- nano myapp-deployment.yaml
复制代码
添加以下内容:
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: myapp-deployment
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: myapp
- template:
- metadata:
- labels:
- app: myapp
- spec:
- containers:
- - name: myapp
- image: nginx
- ports:
- - containerPort: 80
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: myapp-service
- spec:
- selector:
- app: myapp
- ports:
- - protocol: TCP
- port: 80
- targetPort: 80
- type: LoadBalancer
复制代码
部署应用:
- kubectl apply -f myapp-deployment.yaml
复制代码
检查部署状态:
- kubectl get deployments
- kubectl get pods
- kubectl get services
复制代码
访问应用:
- minikube service myapp-service
复制代码
使用KVM进行虚拟化
CentOS Stream支持KVM(Kernel-based Virtual Machine),允许在Linux系统上运行虚拟机。
- # 检查系统是否支持虚拟化
- grep -E 'svm|vmx' /proc/cpuinfo
- # 安装KVM和相关工具
- sudo dnf install qemu-kvm libvirt virt-install virt-manager
- # 添加用户到libvirt组
- sudo usermod -aG libvirt $(whoami)
- # 启动并启用libvirtd服务
- sudo systemctl start libvirtd
- sudo systemctl enable libvirtd
- # 验证KVM安装
- virsh list --all
复制代码- # 下载操作系统镜像
- wget https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Server/x86_64/iso/Fedora-Server-dvd-x86_64-35-1.2.iso
- # 创建虚拟机磁盘
- sudo qemu-img create -f qcow2 /var/lib/libvirt/images/fedora35.qcow2 20G
- # 创建虚拟机
- sudo virt-install \
- --name fedora35 \
- --memory 2048 \
- --vcpus 2 \
- --disk path=/var/lib/libvirt/images/fedora35.qcow2,size=20 \
- --cdrom /path/to/Fedora-Server-dvd-x86_64-35-1.2.iso \
- --os-variant fedora35 \
- --network network=default
复制代码- # 列出所有虚拟机
- virsh list --all
- # 启动虚拟机
- virsh start fedora35
- # 连接到虚拟机控制台
- virsh console fedora35
- # 关闭虚拟机
- virsh shutdown fedora35
- # 强制关闭虚拟机
- virsh destroy fedora35
- # 暂停虚拟机
- virsh suspend fedora35
- # 恢复虚拟机
- virsh resume fedora35
- # 删除虚拟机
- virsh undefine fedora35
复制代码
自动化与脚本管理
CentOS Stream提供了多种自动化工具和技术,帮助系统管理员提高效率并减少人为错误。
使用Ansible进行自动化配置管理
Ansible是一个强大的自动化工具,可以用于配置管理、应用部署和任务自动化。
- # 安装Ansible
- sudo dnf install ansible
- # 创建Ansible配置文件
- mkdir -p ~/ansible && cd ~/ansible
- nano ansible.cfg
复制代码
添加以下内容:
- [defaults]
- inventory = inventory
- host_key_checking = False
- remote_user = your_username
- ask_pass = False
- [privilege_escalation]
- become = True
- become_method = sudo
- become_user = root
- become_ask_pass = False
复制代码
创建主机清单文件:
添加以下内容:
- [webservers]
- web1.example.com
- web2.example.com
- [databases]
- db1.example.com
- [all:vars]
- ansible_python_interpreter=/usr/bin/python3
复制代码
创建一个简单的Playbook来安装和配置Web服务器:
添加以下内容:
- ---
- - name: Install and configure Apache web server
- hosts: webservers
- become: yes
-
- tasks:
- - name: Install httpd package
- dnf:
- name: httpd
- state: present
-
- - name: Start and enable httpd service
- systemd:
- name: httpd
- state: started
- enabled: yes
-
- - name: Open firewall for HTTP
- firewalld:
- service: http
- permanent: yes
- state: enabled
- immediate: yes
-
- - name: Create custom index.html
- copy:
- content: "<h1>Welcome to {{ ansible_hostname }}</h1>"
- dest: /var/www/html/index.html
复制代码
运行Playbook:
- ansible-playbook webserver.yml
复制代码
Roles是Ansible中组织Playbook的一种方式,可以提高代码的可重用性和可维护性。
创建Role结构:
- mkdir -p roles/webserver/{tasks,handlers,templates,files,vars,defaults,meta}
复制代码
创建任务文件:
- nano roles/webserver/tasks/main.yml
复制代码
添加以下内容:
- ---
- - name: Install httpd package
- dnf:
- name: httpd
- state: present
- notify: Start httpd
- - name: Open firewall for HTTP
- firewalld:
- service: http
- permanent: yes
- state: enabled
- immediate: yes
- - name: Create custom index.html
- template:
- src: index.html.j2
- dest: /var/www/html/index.html
复制代码
创建处理器文件:
- nano roles/webserver/handlers/main.yml
复制代码
添加以下内容:
- ---
- - name: Start httpd
- systemd:
- name: httpd
- state: started
- enabled: yes
复制代码
创建模板文件:
- nano roles/webserver/templates/index.html.j2
复制代码
添加以下内容:
- <h1>Welcome to {{ ansible_hostname }}</h1>
- <p>This server is managed by Ansible.</p>
- <p>Last updated: {{ ansible_date_time.iso8601 }}</p>
复制代码
创建使用Role的Playbook:
添加以下内容:
- ---
- - name: Configure webservers
- hosts: webservers
- become: yes
- roles:
- - webserver
复制代码
运行Playbook:
- ansible-playbook site.yml
复制代码
使用Shell脚本进行系统管理
Shell脚本是Linux系统管理的传统工具,可以快速实现各种自动化任务。
创建系统监控脚本:
添加以下内容:
- #!/bin/bash
- # 系统监控脚本
- # 输出到日志文件
- LOG_FILE="/var/log/system_monitor.log"
- DATE=$(date +"%Y-%m-%d %H:%M:%S")
- # 获取系统信息
- HOSTNAME=$(hostname)
- UPTIME=$(uptime -p)
- CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
- MEMORY_USAGE=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')
- DISK_USAGE=$(df -h | awk '$NF=="/"{printf "%s", $5}')
- # 记录到日志文件
- echo "[$DATE] System Status Report for $HOSTNAME" >> $LOG_FILE
- echo "Uptime: $UPTIME" >> $LOG_FILE
- echo "CPU Usage: $CPU_USAGE%" >> $LOG_FILE
- echo "Memory Usage: $MEMORY_USAGE" >> $LOG_FILE
- echo "Disk Usage: $DISK_USAGE" >> $LOG_FILE
- echo "----------------------------------------" >> $LOG_FILE
- # 检查CPU使用率是否超过阈值
- THRESHOLD=80
- if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
- echo "[$DATE] WARNING: High CPU usage detected: $CPU_USAGE%" >> $LOG_FILE
- # 发送邮件通知
- echo "High CPU usage detected on $HOSTNAME: $CPU_USAGE%" | mail -s "CPU Alert: $HOSTNAME" admin@example.com
- fi
- # 检查磁盘使用率是否超过阈值
- DISK_THRESHOLD=90
- if [ ${DISK_USAGE%?} -gt $DISK_THRESHOLD ]; then
- echo "[$DATE] WARNING: High disk usage detected: $DISK_USAGE" >> $LOG_FILE
- # 发送邮件通知
- echo "High disk usage detected on $HOSTNAME: $DISK_USAGE" | mail -s "Disk Alert: $HOSTNAME" admin@example.com
- fi
复制代码
使脚本可执行:
- chmod +x system_monitor.sh
复制代码
设置定时任务:
添加以下内容以每小时运行一次脚本:
- 0 * * * * /path/to/system_monitor.sh
复制代码
创建服务文件:
- sudo nano /etc/systemd/system/system-monitor.service
复制代码
添加以下内容:
- [Unit]
- Description=System Monitor Service
- [Service]
- Type=oneshot
- ExecStart=/path/to/system_monitor.sh
复制代码
创建定时器文件:
- sudo nano /etc/systemd/system/system-monitor.timer
复制代码
添加以下内容:
- [Unit]
- Description=Run system monitor every hour
- Requires=system-monitor.service
- [Timer]
- OnCalendar=hourly
- Persistent=true
- [Install]
- WantedBy=timers.target
复制代码
启用并启动定时器:
- sudo systemctl daemon-reload
- sudo systemctl enable system-monitor.timer
- sudo systemctl start system-monitor.timer
复制代码
检查定时器状态:
- sudo systemctl list-timers --all
复制代码
故障排除与最佳实践
系统日志分析
CentOS Stream使用journald和传统的日志文件来记录系统事件。
- # 查看所有日志
- journalctl
- # 查看当前启动的日志
- journalctl -b
- # 查看特定服务的日志
- journalctl -u httpd
- # 查看特定时间范围的日志
- journalctl --since "2023-08-01" --until "2023-08-15"
- # 实时跟踪日志
- journalctl -f
- # 查看内核日志
- journalctl -k
- # 查看错误日志
- journalctl -p err
复制代码
Logrotate用于管理日志文件的轮转和压缩。
- # 安装logrotate
- sudo dnf install logrotate
- # 创建自定义日志轮转配置
- sudo nano /etc/logrotate.d/myapp
复制代码
添加以下内容:
- /var/log/myapp/*.log {
- daily
- missingok
- rotate 7
- compress
- delaycompress
- notifempty
- create 644 myuser mygroup
- postrotate
- /usr/bin/systemctl reload myapp
- endscript
- }
复制代码
测试日志轮转配置:
- sudo logrotate -d /etc/logrotate.d/myapp
复制代码
强制执行日志轮转:
- sudo logrotate -f /etc/logrotate.d/myapp
复制代码
性能调优
CentOS Stream提供了多种工具和技术来优化系统性能。
Tuned是一个系统调优守护进程,可以根据特定的用例优化系统性能。
- # 安装tuned
- sudo dnf install tuned
- # 启动并启用tuned
- sudo systemctl start tuned
- sudo systemctl enable tuned
- # 列出可用的配置文件
- sudo tuned-adm list
- # 应用特定的配置文件
- sudo tuned-adm profile throughput-performance
- # 查看当前活动的配置文件
- sudo tuned-adm active
复制代码
通过修改/etc/sysctl.conf文件或创建自定义配置文件来调整内核参数。
- # 创建自定义内核参数配置文件
- sudo nano /etc/sysctl.d/99-custom.conf
复制代码
添加以下内容:
- # 网络调优
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216
- net.ipv4.tcp_wmem = 4096 65536 16777216
- net.ipv4.tcp_congestion_control = bbr
- net.ipv4.tcp_fastopen = 3
- # 文件系统调优
- fs.file-max = 100000
- vm.swappiness = 10
- vm.dirty_ratio = 60
- vm.dirty_background_ratio = 2
复制代码
应用内核参数:
- sudo sysctl -p /etc/sysctl.d/99-custom.conf
复制代码
通过修改/etc/security/limits.conf文件来设置用户资源限制。
- sudo nano /etc/security/limits.conf
复制代码
添加以下内容:
- # 增加打开文件数量限制
- * soft nofile 65536
- * hard nofile 65536
- # 增加进程数量限制
- * soft nproc 4096
- * hard nproc 16384
复制代码
安全最佳实践
CentOS Stream提供了多种安全功能和最佳实践,帮助保护系统免受各种威胁。
- # 更新系统
- sudo dnf update -y
- # 安装安全工具
- sudo dnf install -y setroubleshoot-server setools setools-console policycoreutils-python-utils
- # 禁用不必要的服务
- sudo systemctl disable avahi-daemon
- sudo systemctl disable cups
- # 配置SSH安全
- sudo nano /etc/ssh/sshd_config
复制代码
修改以下设置:
- PermitRootLogin no
- PasswordAuthentication no
- Port 2222
- Protocol 2
- MaxAuthTries 3
- LoginGraceTime 60
复制代码
重启SSH服务:
- sudo systemctl restart sshd
复制代码- # 创建新的区域
- sudo firewall-cmd --permanent --new-zone=internal
- # 设置区域规则
- sudo firewall-cmd --permanent --zone=internal --set-target=DROP
- sudo firewall-cmd --permanent --zone=internal --add-service=ssh
- sudo firewall-cmd --permanent --zone=internal --add-service=dns
- sudo firewall-cmd --permanent --zone=internal --add-service=dhcp
- # 将接口分配到区域
- sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
复制代码
AIDE(Advanced Intrusion Detection Environment)是一个文件完整性检查工具。
- # 安装AIDE
- sudo dnf install aide
- # 初始化AIDE数据库
- sudo aide --init
- # 重命名数据库
- sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
- # 执行检查
- sudo aide --check
- # 创建定时任务
- sudo nano /etc/cron.daily/aide
复制代码
添加以下内容:
- #!/bin/bash
- /usr/sbin/aide --check | /usr/bin/mail -s "AIDE Report for $(hostname)" admin@example.com
复制代码
使脚本可执行:
- sudo chmod +x /etc/cron.daily/aide
复制代码
结论
CentOS Stream作为企业级Linux发行版,提供了丰富的高级功能和工具,从系统管理到网络配置,从容器化到自动化,为企业构建和维护高效、安全、可靠的IT基础设施提供了全面的支持。
通过本文的介绍,我们深入了解了CentOS Stream的各个方面,包括系统监控与性能优化、软件包管理、服务管理、安全管理、网络配置、容器化与虚拟化支持、自动化与脚本管理以及故障排除与最佳实践。这些功能和工具使系统管理员和网络工程师能够更好地管理和维护企业级系统,提高工作效率,减少人为错误,并确保系统的安全性和稳定性。
无论是小型企业还是大型数据中心,CentOS Stream都能提供所需的灵活性、可靠性和性能,满足各种企业级应用需求。通过充分利用CentOS Stream的强大功能,企业可以构建现代化、高效、安全的IT基础设施,为业务发展提供坚实的技术支持。 |
|