-
Sep 12 12:17:16 centos7-os systemd[1]: start request repeated too quickly for php-fpm.service Sep 12 12:17:16 centos7-os systemd[1]: Failed to start The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. [root@centos7-os var]# /usr/local/php8/sbin/php-fpm -t [12-Sep-2025 12:18:24] NOTICE: configuration file /usr/local/php8/etc/php-fpm.conf test is successful [root@centos7-os var]# journalctl -u php-fpm --no-pager -n 50 -- Logs begin at Sun 2025-05-11 04:23:29 CST, end at Fri 2025-09-12 12:20:01 CST. -- Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: failed to post process the configuration Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: FPM initialization failed Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:15 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: failed to post process the configuration Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: FPM initialization failed Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:15 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25546]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: failed to post process the configuration Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: FPM initialization failed Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: failed to post process the configuration Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: FPM initialization failed Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: start request repeated too quickly for php-fpm.service Sep 12 12:17:16 centos7-os systemd[1]: Failed to start The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. 从 journalctl 的日志来看,php-fpm 启动失败的根本原因是权限问题,具体表现为:ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) php-fpm 进程无法写入日志文件 /usr/local/php8/var/log/php-fpm.log,导致服务初始化失败。解决方案1. 检查并修复日志文件权限# 确保日志目录存在 mkdir -p /usr/local/php8/var/log/ # 修改日志文件权限(假设 php-fpm 运行用户是 nginx 或 apache) chown -R nginx:nginx /usr/local/php8/var/log/ chmod 755 /usr/local/php8/var/log/ # 如果日志文件不存在,手动创建并设置权限 touch /usr/local/php8/var/log/php-fpm.log chown nginx:nginx /usr/local/php8/var/log/php-fpm.log chmod 644 /usr/local/php8/var/log/php-fpm.log2. 检查 php-fpm 运行用户查看 php-fpm.conf 或 www.conf(通常在 /usr/local/php8/etc/php-fpm.d/)确认运行用户:grep -E 'user|group' /usr/local/php8/etc/php-fpm.conf grep -E 'user|group' /usr/local/php8/etc/php-fpm.d/*.conf确保该用户(如 nginx、apache 或 www-data)对日志目录有写入权限。3. 检查 SELinux 状态(如果启用)# 查看 SELinux 状态 getenforce # 如果启用(Enforcing),尝试临时放宽限制 setenforce 0 # 测试 php-fpm 是否能启动 systemctl start php-fpm # 如果成功,说明是 SELinux 问题,需调整策略 chcon -R -t httpd_sys_rw_content_t /usr/local/php8/var/log/ setenforce 1 # 重新启用 SELinux 4. 清理残留进程并重启服务# 杀死残留的 php-fpm 进程 pkill php-fpm # 重置 systemd 启动限制 systemctl reset-failed php-fpm # 重新启动服务 systemctl start php-fpm systemctl status php-fpm5. 检查其他可能的问题PID 文件路径:确保 php-fpm.conf 中的 pid 路径(如 /run/php-fpm/php-fpm.pid)存在且可写:mkdir -p /run/php-fpm chown nginx:nginx /run/php-fpm端口冲突:确认 9000 端口未被占用:netstat -tulnp | grep 9000 验证修复# 检查日志是否有新错误 tail -f /usr/local/php8/var/log/php-fpm.log # 确认服务状态 systemctl status php-fpm总结根本原因:php-fpm 进程用户无权写入日志文件 /usr/local/php8/var/log/php-fpm.log。关键修复步骤:修正日志文件及目录的权限(chown + chmod)。确认 php-fpm 运行用户与权限匹配。处理 SELinux 限制(如启用)。清理残留进程并重启服务。
-
在 CentOS 7 或类似系统中,libjpeg-turbo-devel.x86_64 安装后,其开发文件(如头文件和库文件)通常位于以下标准路径:1. 头文件(.h 文件)路径:/usr/include/具体文件:jpeglib.h(核心头文件)jconfig.h、jerror.h、jmorecfg.h(辅助头文件)验证方法:ls /usr/include/jpeglib.h如果文件存在,会显示路径;否则提示“No such file”。2. 库文件(.so 动态库)路径:/usr/lib64/(64 位系统)具体文件:libjpeg.so(主库文件,可能是符号链接)libjpeg.so.62、libjpeg.so.62.3.0(版本化库文件)验证方法:ls /usr/lib64/libjpeg.so*输出应显示库文件列表,例如:/usr/lib64/libjpeg.so -> libjpeg.so.62.3.0 /usr/lib64/libjpeg.so.62 /usr/lib64/libjpeg.so.62.3.0 3. 开发文档(可选)路径:/usr/share/doc/libjpeg-turbo-devel-版本号/内容:示例代码、使用说明等(非必需,但有助于开发)。常见问题排查文件未找到:如果上述路径无文件,可能是安装未成功。尝试重新安装:sudo yum reinstall libjpeg-turbo-devel.x86_64检查安装包内容:rpm -ql libjpeg-turbo-devel.x86_64 | grep -E '\.h$|\.so$' 此命令会列出所有安装的头文件和库文件路径。路径不一致:某些系统或第三方仓库可能将文件安装到 /usr/local/include/ 或 /usr/local/lib64/。需检查这些路径:find /usr/local -name "jpeglib.h" 2>/dev/null find /usr/local -name "libjpeg.so*" 2>/dev/nullPHP 编译仍报错:确保 pkg-config 能识别 libjpeg:pkg-config --modversion libjpeg如果无输出,需手动设置 PKG_CONFIG_PATH:export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH 或直接指定编译参数:export JPEG_CFLAGS="-I/usr/include" export JPEG_LIBS="-L/usr/lib64 -ljpeg" 总结标准安装路径:头文件:/usr/include/jpeglib.h库文件:/usr/lib64/libjpeg.so*验证命令:ls /usr/include/jpeglib.h && ls /usr/lib64/libjpeg.so*问题解决:通过 rpm -ql 或 find 定位文件,调整环境变量或编译参数。
-
在 CentOS 7 上清空日志文件可以释放磁盘空间并避免日志堆积导致系统问题。以下是几种常见方法:方法 1:使用 > 重定向清空单个日志文件> /var/log/filename.log示例:> /var/log/messages # 清空系统日志 > /var/log/secure # 清空安全日志(SSH 登录记录等) > /var/log/maillog # 清空邮件日志 > /var/log/cron # 清空定时任务日志 优点:快速直接,不删除文件本身(避免某些程序因文件不存在而报错)。适用于需要保留日志文件权限和所有者的情况。方法 2:使用 truncate 命令(推荐)truncate -s 0 /var/log/filename.log示例:truncate -s 0 /var/log/messages truncate -s 0 /var/log/nginx/access.log # 清空 Nginx 访问日志 优点:比 > 更高效,尤其适用于大日志文件。保留文件权限和 inode。方法 3:删除日志文件并重建(谨慎使用)rm -f /var/log/filename.log && touch /var/log/filename.log示例:rm -f /var/log/nginx/error.log && touch /var/log/nginx/error.log适用场景:需要彻底删除日志文件并重建(某些程序可能要求日志文件必须存在)。注意:删除后需确保相关服务(如 rsyslog、nginx)能自动重新创建文件。方法 4:使用 logrotate 自动清理(长期维护推荐)CentOS 7 默认使用 logrotate 管理日志轮转,可以配置定期清理旧日志。4.1 检查现有配置ls /etc/logrotate.d/ # 查看日志轮转配置文件 cat /etc/logrotate.conf # 查看全局配置 4.2 手动触发日志轮转logrotate -vf /etc/logrotate.conf # 强制轮转所有日志 logrotate -vf /etc/logrotate.d/nginx # 仅轮转 Nginx 日志 参数说明:-v:显示详细过程。-f:强制轮转(即使未达到时间/大小阈值)。4.3 自定义日志轮转规则编辑 /etc/logrotate.d/custom_log(示例):/var/log/myapp/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root adm sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }参数说明:daily:每天轮转。rotate 7:保留 7 份旧日志。compress:压缩旧日志(.gz)。notifempty:空日志不轮转。create 0640 root adm:重建日志文件并设置权限。方法 5:清理 journald 日志(Systemd 系统)如果使用 systemd-journald 管理日志:# 查看日志磁盘占用 journalctl --disk-usage # 清理 7 天前的日志 journalctl --vacuum-time=7d # 限制日志大小(例如 100M) echo "SystemMaxUse=100M" >> /etc/systemd/journald.conf systemctl restart systemd-journald常见日志文件路径日志类型路径系统日志/var/log/messages安全日志/var/log/secure邮件日志/var/log/maillog定时任务日志/var/log/cronNginx 访问日志/var/log/nginx/access.logNginx 错误日志/var/log/nginx/error.logMySQL 错误日志/var/log/mysqld.logDocker 日志/var/lib/docker/containers/*/*.log总结方法适用场景命令示例> 重定向快速清空单个日志> /var/log/messagestruncate高效清空大日志(推荐)truncate -s 0 /var/log/nginx/access.log删除并重建需要彻底重置日志文件rm -f /var/log/file.log && touch /var/log/file.loglogrotate长期自动管理日志轮转logrotate -vf /etc/logrotate.d/nginxjournalctl清理 Systemd 日志journalctl --vacuum-time=7d建议:定期检查 /var/log/ 目录大小:du -sh /var/log/。对关键服务(如 Nginx、MySQL)配置 logrotate 避免日志堆积。生产环境建议先备份日志再清理(如 cp /var/log/messages /var/log/messages.bak)。
-
在 CentOS 中,你可以通过 history 命令查看执行过的命令记录,然后重新执行其中的某条命令。以下是具体方法:1. 查看历史命令history 输出示例:100 ls -l 101 cd /tmp 102 yum install httpd 103 systemctl start httpd每条命令前的数字是 历史记录编号(如 100、101)。2. 重新执行某条历史命令方法 1:通过编号执行!<编号> 示例:重新执行编号为 102 的命令(yum install httpd):!102 方法 2:通过关键词执行!关键词示例:重新执行最近一条包含 yum 的命令:!yum方法 3:通过方向键浏览按 ↑ 或 ↓ 方向键,在终端历史记录中手动选择命令,按回车执行。3. 高级用法查看最近 N 条命令history <N> 示例:查看最近 5 条命令:history 5 清除历史记录history -c # 清除当前会话的历史记录 删除某条历史记录history -d <编号> 示例:删除编号为 102 的记录:history -d 102 4. 持久化历史记录默认情况下,history 记录存储在 ~/.bash_history 文件中,退出终端时自动保存。如果需要立即保存历史记录(不等待退出):history -a # 将当前会话的历史记录追加到文件 常见问题Q1: 为什么 !102 执行后提示 command not found?可能原因:历史记录编号不正确(先用 history 确认编号)。命令中包含特殊字符(如 *、?),需用引号包裹:!102 # 如果 102 是 `ls *.txt`,建议改用 `fc 102` 或手动输入 Q2: 如何禁用历史记录?临时禁用:unset HISTFILE 永久禁用:在 ~/.bashrc 中添加:unset HISTFILE 然后执行:source ~/.bashrc总结操作命令查看历史记录history执行编号为 N 的命令!N执行最近一条含关键词的命令!关键词查看最近 5 条命令history 5删除编号为 N 的历史记录history -d N立即保存历史记录history -a通过以上方法,你可以轻松管理和重用历史命令。
-
Linux CentOS 面试知识点整理一、Linux 基础命令(一)文件和目录操作命令 功能 常用选项 示例ls 列出目录内容 -l(长格式)、-a(显示隐藏文件)、-h(易读格式) ls -lhcd 切换目录 无 cd /etcpwd 显示当前工作目录 无 pwdmkdir 创建目录 -p(递归创建) mkdir -p dir1/dir2/dir3rm 删除文件或目录 -r(递归删除)、-f(强制删除) rm -rf file.txtcp 复制文件或目录 -r(递归复制) cp -r file1 file2mv 移动或重命名文件或目录 无 mv file1 /dir面试知识点补充:批量删除特定文件类型:在实际工作中,可能需要批量删除某个目录下的特定文件类型。例如,删除所有.log文件,可以使用rm -f *.log。面试中可能会问到如何删除多个目录下的特定文件类型,可以使用find命令结合rm命令,例如find /path/to/directory -type f -name "*.log" -exec rm -f {} \;。rm -rf的谨慎使用:rm -rf命令非常强大,但也非常危险,因为它会强制删除文件或目录,且不会提示确认。面试官可能会问到如何避免误删除重要文件。一个常见的做法是使用rm -i(交互模式)进行删除,或者在脚本中添加额外的检查逻辑。cp和mv的区别:cp用于复制文件或目录,而mv用于移动或重命名文件或目录。面试中可能会问到它们的区别以及使用场景。cp适用于需要保留原始文件的情况,而mv适用于需要移动文件或重命名文件的情况。(二)文件查看和编辑命令 功能 示例cat 查看文件内容 cat file.txtmore 和 less 分页查看文件内容 less file.txthead 和 tail 查看文件头部和尾部内容 head -n 5 file.txt、tail -f file.logvi 或 vim 文本编辑器 命令模式(i进入插入模式,Esc退出,:wq保存退出)面试知识点补充:vim编辑器的高级用法:在面试中,可能会被问到vim编辑器的一些高级功能,例如使用正则表达式批量替换文本。可以使用:s/old/new/g命令替换文件中的所有old为new,或者使用:g/pattern/s/old/new/g命令只替换匹配pattern的行。日志文件的实时监控:tail -f命令用于实时查看文件的新增内容,常用于监控日志文件。面试中可能会问到如何结合grep命令过滤特定内容。例如,tail -f file.log | grep "error"可以实时显示包含error的日志内容。less和more的区别:less比more更强大,支持上下翻页和搜索功能。面试中可能会问到如何在less中搜索特定内容,可以使用/pattern向前搜索,使用?pattern向后搜索。(三)系统信息和进程管理命令 功能 示例uname 显示系统信息 uname -adf 显示磁盘空间使用情况 df -hdu 显示目录或文件的磁盘使用情况 du -sh /dirps 显示当前运行的进程 ps auxtop 实时显示系统中资源占用最高的进程 topkill 终止进程 kill -9 PIDnice 和 renice 调整进程优先级 nice -n 10 commandsystemctl 管理服务和系统状态 systemctl restart service面试知识点补充:查找占用磁盘空间最大的目录:面试中可能会问到如何查找占用磁盘空间最大的前几个目录。可以使用du -sh /dir/* | sort -rh | head -n 5命令。这个命令会列出指定目录下所有子目录的大小,并按降序排列,显示前5个最大的目录。使用ps和grep查找特定进程:面试中可能会问到如何查找特定进程。可以使用ps aux | grep process_name命令。例如,查找名为httpd的进程,可以使用ps aux | grep httpd。kill命令的信号类型:kill命令可以发送不同的信号给进程。面试中可能会问到常见的信号类型,例如SIGTERM(默认信号,请求进程终止)、SIGKILL(强制终止进程,kill -9)和SIGINT(中断信号,通常由Ctrl+C产生)。(四)网络相关命令命令 功能 示例ifconfig 或 ip 查看和配置网络接口 ip aping 测试网络连通性 ping -c 4 8.8.8.8netstat 或 ss 查看网络连接和监听端口 ss -tulncurl 或 wget 下载文件或测试HTTP请求 curl -O http://example.com/file.zip面试知识点补充:查看所有监听端口:面试中可能会问到如何查看当前系统的所有监听端口。可以使用ss -tuln命令。这个命令会列出所有TCP、UDP和监听状态的端口。使用ping和traceroute定位网络故障点:面试中可能会问到如何排查网络问题。可以使用ping命令测试网络连通性,使用traceroute命令查看数据包的传输路径。例如,traceroute 8.8.8.8可以显示到达目标IP的路径。curl命令的高级用法:curl命令不仅可以下载文件,还可以用于测试HTTP请求。面试中可能会问到如何使用curl发送POST请求。例如,curl -X POST -d "key=value" http://example.com/api可以发送一个POST请求。(五)用户和权限管理命令 功能 示例whoami 显示当前登录用户 whoamiwho 显示当前登录的用户信息 whosu 切换用户 su -useradd 创建用户 useradd usernamepasswd 设置用户密码 passwd usernamechmod 修改文件或目录的权限 chmod 755 file.txtchown 修改文件或目录的所有者 chown user:group file.txt面试知识点补充:批量创建用户:面试中可能会问到如何批量创建用户。可以使用useradd命令结合循环脚本实现。例如,使用for i in {1..10}; do useradd user$i; done可以批量创建user1到user10。设置目录的特殊权限:面试中可能会问到如何设置目录的特殊权限,例如setuid、setgid和sticky bit。可以使用chmod命令。例如,chmod +s file.txt可以设置setuid权限,chmod g+s dir可以设置setgid权限,chmod +t dir可以设置sticky bit权限。用户组管理:面试中可能会问到如何管理用户组。可以使用groupadd命令创建用户组,使用usermod命令将用户添加到用户组。例如,groupadd groupname可以创建一个用户组,usermod -aG groupname username可以将用户添加到用户组。(六)其他常用命令命令 功能 示例grep 在文件中搜索文本 grep "pattern" file.txtfind 查找文件或目录 find / -name "file.txt"history 显示命令历史 historyman 查看命令的手册页 man ls面试知识点补充:使用find命令查找特定权限的文件:面试中可能会问到如何查找具有特定权限的文件。可以使用find命令结合权限选项。例如,find / -perm 777可以查找权限为777的文件。清空命令历史:面试中可能会问到如何清空命令历史。可以使用history -c命令。此外,还可以通过编辑~/.bash_history文件来手动清空历史记录。man命令的高级用法:面试中可能会问到如何查看特定章节的手册页。可以使用man命令的章节选项。例如,man 1 ls可以查看ls命令的手册页,man 5 crontab可以查看crontab文件格式的手册页。二、数据库安装与配置(一)MySQL 安装使用yum安装MySQLsudo yum install -y mysql-community-serverAI写代码bash启动MySQL服务并设置开机自启sudo systemctl start mysqldsudo systemctl enable mysqld检查MySQL服务状态sudo systemctl status mysqld面试知识点补充:查看MySQL服务是否已经安装成功:面试中可能会问到如何查看MySQL服务是否已经安装成功。可以使用rpm -q mysql-community-server命令。如果返回mysql-community-server-版本号,则表示已安装成功。服务管理:面试中可能会问到如何查看服务的依赖关系。可以使用systemctl list-dependencies service命令。例如,systemctl list-dependencies mysqld可以查看MySQL服务的依赖关系。(二)MySQL 配置安全配置sudo mysql_secure_installationAI写代码bash1修改配置文件配置文件路径:/etc/my.cnf常见配置项:datadir、port、bind-address字符集配置[client]default-character-set = utf8mb4[mysql]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_unicode_ciAI写代码ini面试知识点补充:查看MySQL的当前字符集:面试中可能会问到如何查看MySQL的当前字符集。可以使用SHOW VARIABLES LIKE 'character_set_server';命令。动态修改MySQL配置:面试中可能会问到如何动态修改MySQL配置而无需重启服务。可以使用SET GLOBAL命令。例如,SET GLOBAL max_connections = 1000;可以动态修改最大连接数。(三)MySQL 文件路径数据文件路径:/var/lib/mysql配置文件路径:/etc/my.cnf日志文件路径:/var/log/mysql/面试知识点补充:查看MySQL的错误日志文件路径:面试中可能会问到如何查看MySQL的错误日志文件路径。可以使用SHOW VARIABLES LIKE 'log_error';命令。日志文件的自动轮转:面试中可能会问到如何设置日志文件的自动轮转。可以使用logrotate工具。例如,可以编辑/etc/logrotate.d/mysql文件,配置日志轮转策略。三、计算机网络各层详细知识点总结一、链路层(Link Layer)1. 核心概念功能:将数据封装成帧(Frame)。负责物理传输,包括信号的编码和解码。错误检测和纠正(通过CRC校验等)。流量控制(如滑动窗口机制)。提供硬件地址(MAC地址)。硬件地址(MAC地址):48位的唯一标识符,用于在局域网内识别设备。格式:XX:XX:XX:XX:XX:XX。2. 常见协议以太网(Ethernet):最常用的链路层协议,支持多种物理介质(如双绞线、光纤)。以太网帧结构:前导码(Preamble):用于同步。目标MAC地址(Destination MAC Address):6字节。源MAC地址(Source MAC Address):6字节。类型/长度字段(Type/Length):2字节。数据负载(Payload):46-1500字节。帧校验序列(FCS):4字节。无线局域网(WLAN):使用无线信号进行通信,遵循IEEE 802.11标准。支持多种加密方式(如WEP、WPA、WPA2)。点对点协议(PPP):用于点对点连接,常用于拨号上网。提供链路控制协议(LCP)和多种网络控制协议(NCP)。3. 面试问题问题1:以太网帧的结构是什么?答案:以太网帧包括前导码、目标MAC地址、源MAC地址、类型/长度字段、数据负载和帧校验序列(FCS)。问题2:如何检测和纠正链路层的错误?答案:使用循环冗余校验(CRC)进行错误检测,通过重传机制进行错误纠正。问题3:什么是MAC地址?它的作用是什么?答案:MAC地址是网络设备的唯一标识符,用于在链路层识别设备。它是一个48位的地址,通常以十六进制表示。问题4:以太网中的最小帧大小是多少?答案:以太网中的最小帧大小是64字节,包括8字节的前导码和4字节的FCS。问题5:什么是碰撞检测(CSMA/CD)?它在以太网中的作用是什么?答案:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)是一种介质访问控制方法,用于检测和避免数据冲突。在以太网中,当多个设备尝试同时发送数据时,CSMA/CD机制可以检测到冲突并重新发送数据。二、网络层(Internet Layer)1. 核心概念功能:寻址:为每个网络设备分配一个唯一的IP地址。路由:根据IP地址将数据包从源主机发送到目标主机。分片和重组:将大数据包分割成小片段,以便在不同网络中传输。提供逻辑地址(IP地址)。IP地址:IPv4:32位地址,格式为A.B.C.D,分为A、B、C、D、E五类。IPv6:128位地址,格式为A:B:C:D:E:F:G:H,提供更多的地址空间。子网掩码:用于将IP地址划分为网络部分和主机部分。常见的子网掩码:255.255.255.0(/24)。2. 常见协议IP(Internet Protocol):网络层的核心协议,负责数据包的寻址和路由。IPv4:32位地址,格式为A.B.C.D。IPv6:128位地址,格式为A:B:C:D:E:F:G:H。ICMP(Internet Control Message Protocol):用于发送错误消息和操作信息。常见的ICMP消息类型:回显请求(ping)、回显应答、目的不可达。ARP(Address Resolution Protocol):将IP地址解析为MAC地址。常见的ARP消息类型:ARP请求、ARP应答。3. 面试问题问题1:IPv4和IPv6的主要区别是什么?答案:IPv4使用32位地址,而IPv6使用128位地址,提供了更多的地址空间。IPv6还支持无状态地址自动配置(SLAAC)和更好的安全性。问题2:什么是子网掩码?它的作用是什么?答案:子网掩码用于将IP地址划分为网络部分和主机部分。它帮助路由器确定数据包是否属于同一网络或需要转发到其他网络。问题3:如何查看当前主机的路由表?答案:在Linux系统中,可以使用route -n或ip route命令查看路由表。问题4:什么是CIDR(无类别域间路由)?它的作用是什么?答案:CIDR是一种IP地址的表示方法,通过子网掩码的位数来表示网络部分和主机部分。例如,192.168.1.0/24表示网络部分为192.168.1.0,子网掩码为255.255.255.0。CIDR的作用是提高IP地址的利用率,减少路由表的大小。问题5:什么是NAT(网络地址转换)?它的作用是什么?答案:NAT是一种将一个IP地址空间转换为另一个IP地址空间的技术,常用于将私有IP地址转换为公共IP地址。NAT的作用是节省公共IP地址资源,提高网络安全性。三、传输层(Transport Layer)1. 核心概念功能:提供可靠的、面向连接的传输服务(如TCP)。提供无连接的、不可靠的传输服务(如UDP)。流量控制和拥塞控制。提供端到端的通信。端口号:用于标识主机上的应用程序。范围:0-65535。常见的端口号:80(HTTP)、443(HTTPS)、22(SSH)、25(SMTP)。2. 常见协议TCP/IP 协议定义:TCP/IP 是一组用于互联网及相关网络的通信协议,包括 TCP 和 IP。层次结构:链路层:负责物理链路的管理,如以太网。网络层:负责数据包的路由和转发,主要协议是 IP。传输层:负责端到端的数据传输和可靠性保证,主要协议是 TCP 和 UDP。应用层:负责处理特定的应用程序之间的通信,主要协议是 HTTP、FTP、SMTP 等。TCP 协议特点:面向连接:在数据传输之前,必须建立一个可靠的连接。可靠传输:通过确认(ACK)、重传机制、滑动窗口等技术,确保数据的完整性和顺序性。应用场景:文件传输、网页浏览、邮件传输等。面试知识点补充:TCP 的三次握手和四次挥手过程:面试中可能会问到 TCP 的三次握手和四次挥手过程。三次握手过程如下:客户端发送一个 SYN 包到服务器,请求建立连接。服务器收到 SYN 包后,回复一个 SYN-ACK 包,确认客户端的请求。客户端收到 SYN-ACK 包后,发送一个 ACK 包到服务器,完成连接建立。四次挥手过程如下:客户端发送一个 FIN 包到服务器,请求关闭连接。服务器收到 FIN 包后,回复一个 ACK 包,确认客户端的请求。服务器发送一个 FIN 包到客户端,请求关闭连接。客户端收到 FIN 包后,发送一个 ACK 包到服务器,完成连接关闭。查看本机的 IP 地址:面试中可能会问到如何查看本机的 IP 地址。可以使用ifconfig或ip a命令。ip a命令是现代 Linux 系统中推荐使用的命令。UDP 协议定义:UDP 是一种无连接的、不可靠的传输层协议。特点:无连接:不需要建立连接,开销较小。不可靠:不提供确认和重传机制。应用场景:视频流、语音通话、游戏、DNS 查询等。面试知识点补充:UDP 和 TCP 的主要区别:面试中可能会问到 UDP 和 TCP 的主要区别。TCP 是面向连接的、可靠的传输协议,而 UDP 是无连接的、不可靠的传输协议。TCP 适用于对可靠性要求较高的场景,如文件传输和网页浏览;UDP 适用于对实时性要求较高的场景,如视频流和语音通话。使用 UDP 协议实现简单的数据传输:面试中可能会问到如何使用 UDP 协议实现简单的数据传输。可以使用netcat工具。例如,服务器端可以使用nc -u -l 1234监听 UDP 端口 1234,客户端可以使用nc -u server_ip 1234发送数据到服务器。3. 面试问题问题1:TCP和UDP的主要区别是什么?答案:TCP是面向连接的、可靠的传输协议,提供流量控制和拥塞控制,适用于对可靠性要求较高的应用。UDP是无连接的、不可靠的传输协议,适用于对实时性要求较高的应用。问题2:TCP的三次握手和四次挥手过程是什么?答案:三次握手:客户端发送一个SYN包到服务器,请求建立连接。服务器收到SYN包后,回复一个SYN-ACK包,确认客户端的请求。客户端收到SYN-ACK包后,发送一个ACK包到服务器,完成连接建立。四次挥手:客户端发送一个FIN包到服务器,请求关闭连接。服务器收到FIN包后,回复一个ACK包,确认客户端的请求。服务器发送一个FIN包到客户端,请求关闭连接。客户端收到FIN包后,发送一个ACK包到服务器,完成连接关闭。问题3:什么是滑动窗口协议?它的作用是什么?答案:滑动窗口协议是一种流量控制机制,用于控制发送方在等待确认之前可以发送的数据量。它通过动态调整窗口大小来优化网络利用率,防止发送方发送过多数据导致接收方溢出。问题4:TCP的拥塞控制机制有哪些?答案:TCP的拥塞控制机制包括慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)。问题5:UDP适用于哪些应用场景?答案:UDP适用于对实时性要求较高的应用,如视频流、语音通话、游戏和DNS查询。这些应用对延迟敏感,可以容忍一定程度的数据丢失。四、应用层(Application Layer)1. 核心概念功能:提供应用程序之间的通信接口。支持多种应用层协议,如HTTP、FTP、SMTP、DNS等。提供用户界面和应用程序逻辑。2. 常见协议HTTP协议HTTP(HyperText Transfer Protocol):定义:HTTP 是一种应用层协议,用于在客户端和服务器之间传输超文本数据。特点:无状态:每次请求都是独立的。基于 TCP:确保数据的可靠传输。请求/响应模型:客户端发送请求,服务器返回响应。请求和响应:请求行:包含请求方法(GET、POST、PUT、DELETE等)、请求的URL和HTTP版本。请求头:包含附加信息,如Host、User-Agent、Content-Type等。请求体:对于POST请求,包含要提交的数据。响应行:包含HTTP版本、状态码和状态消息。响应头:包含附加信息,如Content-Type、Content-Length等。响应体:包含服务器返回的数据,如HTML页面、JSON数据等。状态码:1xx:信息性状态码。2xx:成功状态码,如 200(请求成功)、201(资源已创建)。3xx:重定向状态码,如 301(永久重定向)、302(临时重定向)。4xx:客户端错误状态码,如 400(请求格式错误)、404(未找到资源)。5xx:服务器错误状态码,如 500(服务器内部错误)、503(服务不可用)。面试知识点补充:查看 HTTP 请求的详细信息:面试中可能会问到如何查看 HTTP 请求的详细信息。可以使用curl -v命令。例如,curl -v http://example.com可以显示 HTTP 请求和响应的详细信息。常见的 404 和 500 错误的原因及解决方法:面试中可能会问到常见的 404 和 500 错误的原因及解决方法。404 错误表示请求的资源未找到,可能是因为 URL 错误或文件不存在。500 错误表示服务器内部错误,可能是因为服务器配置错误或代码问题。解决方法包括检查 URL、检查服务器日志、检查应用程序代码等。HTTPS(HTTP Secure):特点:在HTTP基础上添加了SSL/TLS加密。应用场景:安全的网页浏览、电子商务、在线银行。FTP(File Transfer Protocol):特点:用于文件传输,支持文件上传和下载。应用场景:文件服务器、文件共享。SMTP(Simple Mail Transfer Protocol):特点:用于发送电子邮件。应用场景:邮件服务器。DNS(Domain Name System):特点:将域名解析为IP地址。应用场景:域名解析、负载均衡。3. 面试问题问题1:HTTP和HTTPS的主要区别是什么?答案:HTTPS在HTTP的基础上添加了SSL/TLS加密,确保数据传输的安全性。HTTPS使用端口443,而HTTP使用端口80。问题2:什么是HTTP状态码?常见的状态码有哪些?答案:HTTP状态码是服务器对客户端请求的响应状态的描述。常见的状态码包括:200:请求成功。301/302:重定向。400:请求格式错误。401:未授权。403:禁止访问。404:未找到资源。500:服务器内部错误。503:服务不可用。问题3:DNS的作用是什么?它是如何工作的?答案:DNS的作用是将域名解析为IP地址。当客户端请求一个域名时,DNS服务器会查找该域名对应的IP地址,并将结果返回给客户端。DNS解析过程包括递归查询和迭代查询。问题4:什么是RESTful API?它的特点是什么?答案:RESTful API是一种基于HTTP协议的网络应用程序接口,遵循REST(Representational State Transfer)架构风格。它的特点包括无状态、统一接口、资源导向、超媒体作为应用状态的引擎(HATEOAS)。问题5:什么是Web缓存?它的作用是什么?答案:Web缓存是一种存储机制,用于临时存储Web资源的副本。它的作用是减少对服务器的请求次数,提高响应速度,降低网络带宽的使用。———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_25383607/article/details/148213617
-
如图,为啥啊,好不容易找到个下载速度快的
-
1、网卡规范名称 [root@server ~]# grubby --update-kernel ALL --args net.ifnames=0 # 内核中禁止使用net.ifnames模块,这样可以让网卡显示为ethx # 后再重启reboot,使内核生效, 网卡名则显示为eth开头 2、网卡配置文件目录 ——除RHEL9外配置网卡的配置文件目录 [root@server_node ~]# cd /etc/sysconfig/network-scripts/ [root@server_node network-scripts]# vim ifcfg-eth0 [root@server_node network-scripts]# cat ifcfg-eth0 DEVICE=eth0 # 网卡名字 ONBOOT=yes # 网卡服务启动自动激活网卡 BOOTPROTO=dhcp # 网卡工作模式 NAME=eth0 # 网络链接名称 [root@server_node network-scripts]# nmcli connection reload [root@server_node network-scripts]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/42) # 还可配置IP [root@server_node network-scripts]# vim ifcfg-eth1 [root@server_node network-scripts]# cat ifcfg-eth1 DEVICE=eth1 # 设备名字 NAME=eth_1 # 设备名称 ONBOOT=yes # 开网启动 BOOTPROTO=none # 工作方式 IPADDR1=172.25.254.100 # IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY1=172.25.254.2 # 网关 DNS1=114.114.114.114 # DNS [root@server_node network-scripts]# nmcli connection reload # 法一 [root@server_node network-scripts]# nmcli connection up eth_1 [root@server_node ~]# systemctl restart NetworkManager # 法二 3、网络配置脚本 #!/bin/bash cat >/etc/sysconfig/network-scripts/ifcfg-$1 <<EOF DEVICE=$1 ONBOOT=yes BOOTPROTO=none IPADDR1=$2 NETMASK1=255.255.255.0 DNS1=114.114.114.114 GATEWAY1=172.25.254.2 NAME=$1 EOF nmcli connection reload nmcli connection up $1 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/weixin_68256171/article/details/141031954
-
简要介绍Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。更多关于Kafka信息请参见:Kafka官网。硬件要求项目说明服务器TaiShan服务器CPU鲲鹏920处理器或鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网软件要求项目版本OpenJDK1.8.0_252Maven3.5.4Gradle4.10Kafka0.10.1.1CentOS系统项目版本CentOS7.6OS Kernel4.14.0GCC4.8.5openEuler系统项目版本openEuler20.03 LTS SP122.03 LTSOS Kernel4.19.90GCC7.3.0安装GCC挂载OS镜像。mount YOUR_OS.iso /media -o loop说明YOUR_OS.iso用实际的iso包名代替。备份repo文件,清空“/etc/yum.repos.d/”目录文件。cp -r /etc/yum.repos.d /etc/yum.repos.d-bak rm /etc/yum.repos.d/*须知请确认已经备份所有repo文件后,在rm删除界面输入“y”表示同意删除。配置Yum本地源。打开“/etc/yum.repos.d/Local.repo”文件。vi /etc/yum.repos.d/Local.repo按“i”进入编辑模式,在文件中添加以下内容。[Local] name=Local baseurl=file:///media/ enabled=1 gpgcheck=0按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使Yum源配置生效。yum clean all yum makecache通过Yum源安装GCC相关软件。yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64修改GCC(解决-fsigned-char问题)寻找GCC所在路径(一般位于“/usr/bin/gcc”)。command -v gcc更改原GCC文件的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl配置GCC文件。新建GCC文件。vi /usr/bin/gcc按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/gcc-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给GCC文件添加可执行权限。chmod +x /usr/bin/gcc确认GCC是否可用。gcc --versionCentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功。修改G++(解决-fsigned-char问题)寻找G++所在路径(一般位于“/usr/bin/g++”)。command -v g++更改原G++文件的名字(例如改成g++-impl)。mv /usr/bin/g++ /usr/bin/g++-impl配置G++文件。新建G++文件。vi /usr/bin/g++按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/g++-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给G++文件添加可执行权限。chmod +x /usr/bin/g++确认G++是否可用。g++ --versionCentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功。安装依赖通过Yum源安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make libstdc++-static glibc-static git snappy snappy-deve下载并解压安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz mkdir -p /opt/tools/installed/ mv jdk8u252-b09 /opt/tools/installed/配置Java环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09 export PATH=$JAVA_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile检查OpenJDK是否安装成功。java -version回显如下所示即为安装成功。下载Gradle源码并安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://downloads.gradle.org/distributions/gradle-4.10-bin.zip --no-check-certificate unzip gradle-4.10-bin.zip mv gradle-4.10 /opt/tools/installed/修改Gradle环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在文件末尾增加下面代码。export GRADLE_HOME=/opt/tools/installed/gradle-4.10 export PATH=$GRADLE_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile
-
简要介绍本文档重点介绍软件部署步骤,并不涉及软件源码编译步骤。文档中使用的软件都是从官网下载获取,这类软件多基于x86环境编译得到,软件内如果包含非跨平台语言(如C/C++)实现的模块,直接在TaiShan服务器上使用会出现不兼容的问题,需下载对应软件源码包进行编译,然后部署。但不管软件包是在哪种环境下编译得到,部署步骤都是一致的。建议的版本软件版本获取方法OpenJDKjdk8u252-b09Arm: cid:link_2x86: cid:link_3ZooKeeper3.4.6在官网下载所需版本的软件包。下载地址:cid:link_5Kafka2.11-2.2.0在官网下载所需版本的软件包。下载地址:cid:link_6硬件要求最低配置:任意CPU、一根内存(大小不限)、一块硬盘(大小不限)。具体配置视实际应用场景而定。操作系统要求适用于CentOS 7.4~7.6、openEuler 20.03~22.03操作系统。依次登录所有节点,将节点的主机名分别修改为server1、agent1、agent2、agent3。hostnamectl set-hostname 主机名 --static登录所有节点,添加集群所有节点的“地址-主机名”映射关系。打开“/etc/hosts”文件。vi /etc/hosts按“i”进入编辑模式,在hosts文件中添加以下内容。IPaddress1 server1 IPaddress2 agent1 IPaddress3 agent2 IPaddress4 agent3按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。登录所有节点,关闭防火墙。systemctl stop firewalld.service systemctl disable firewalld.service登录所有节点,配置SSH免密登录。生成密钥,遇到提示时,按“Enter”。ssh-keygen -t rsa在每台机器上配置SSH免密登录(包括配置自身节点的免密)。ssh-copy-id -i ~/.ssh/id_rsa.pub root@节点IP登录所有节点,安装OpenJDK。下载OpenJDK并解压到“/usr/local”目录。ARM:wget cid:link_2 tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz -C /usr/localx86:wget cid:link_3 tar -zxf OpenJDK8U-jdk_x64_linux_hotspot_8u252b09.tar.gz -C /usr/local将解压后的JDK目录的所属用户、所属用户组变更为“root”。chown -R root /usr/local/jdk8u252-b09 chgrp -R root /usr/local/jdk8u252-b09配置环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,添加以下内容。export JAVA_HOME=/usr/local/jdk8u252-b09 export PATH=$JAVA_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使环境变量生效。source /etc/profile检查OpenJDK是否安装成功。java -version回显如下所示即为安装成功。下载并解压ZooKeeper登录agent1节点,进入“/usr/local”目录,下载zookeeper-3.4.6.tar.gz,并解压。cd /usr/local wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -zxvf zookeeper-3.4.6.tar.gz建立软链接,便于后期版本更换。ln -s zookeeper-3.4.6 zookeeper添加ZooKeeper到环境变量登录agent1节点,打开配置文件。vi /etc/profile按“i”进入编辑模式,添加ZooKeeper到环境变量。export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$ZOOKEEPER_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。修改ZooKeeper配置文件登录agent1节点,进入ZooKeeper所在目录。cd /usr/local/zookeeper/conf拷贝配置文件。cp zoo_sample.cfg zoo.cfg修改通用配置。打开文件。vi zoo.cfg按“i”进入编辑模式,修改数据目录。dataDir=/usr/local/zookeeper/tmp可选:添加AdminServer配置。(此配置项于ZooKeeper 3.5.0版本引入,低于此版本可跳过此步骤)admin.enableServer=false在文件末尾添加如下代码,其中server.1~server.3是部署ZooKeeper的节点。server.1=agent1:2888:3888 server.2=agent2:2888:3888 server.3=agent3:2888:3888按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。添加JMX配置。编辑文件zkServer.sh。vi /usr/local/zookeeper/bin/zkServer.sh按“i”进入编辑模式,添加JMX配置至图示位置。JMXDISABLE=true说明若使用ZooKeeper 3.6及以上版本,则可在“/usr/local/zookeeper/conf”目录下新建文件zookeeper-env.sh,将JMX配置设置在此文件中,便于后续配置调整。按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。可选:添加JVM配置。说明若使用ZooKeeper 3.6及以上版本,相关配置已预先设置完毕,可跳过此步骤。编辑文件zkEnv.sh。vi /usr/local/zookeeper/bin/zkEnv.sh按“i”进入编辑模式,添加如下配置至文件末尾。# default heap for zookeeper server ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-10000}" export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS" # default heap for zookeeper client ZK_CLIENT_HEAP="${ZK_CLIENT_HEAP:-256}" export CLIENT_JVMFLAGS="-Xmx${ZK_CLIENT_HEAP}m $CLIENT_JVMFLAGS"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。创建“tmp”目录作数据目录。mkdir /usr/local/zookeeper/tmp在“tmp”目录中创建一个空文件,并向该文件写入myid内容。touch /usr/local/zookeeper/tmp/myid echo 1 > /usr/local/zookeeper/tmp/myid配置文件权限。chmod 750 /usr/local/zookeeper find /usr/local/zookeeper/bin -name "*.sh" | xargs -i chmod 500 {} find /usr/local/zookeeper/conf -name "*" -type f | xargs -i chmod 600 {} chown -R root /usr/local/zookeeper-3.4.6 chgrp -R root /usr/local/zookeeper-3.4.6同步配置到其它节点登录agent1节点,将配置好的ZooKeeper拷贝到其它节点。scp -r /usr/local/zookeeper-3.4.6 root@agent2:/usr/local scp -r /usr/local/zookeeper-3.4.6 root@agent3:/usr/local登录agent2、agent3,创建软链接并修改myid内容。agent2:cd /usr/local ln -s zookeeper-3.4.6 zookeeper echo 2 > /usr/local/zookeeper/tmp/myidagent3:cd /usr/local ln -s zookeeper-3.4.6 zookeeper echo 3 > /usr/local/zookeeper/tmp/myid使环境变量生效。source /etc/profile在agent2和agent3节点重复执行1~4,配置ZooKeeper的环境变量。请参见《Kafka 移植指南(CentOS&openEuler)》编译出Kafka软件部署包。将Kafka软件部署包放置于agent1节点的“/usr/local”目录下,并解压。mv kafka_2.11-2.2.0.tgz /usr/local tar -zxvf kafka_2.11-2.2.0.tgz说明若Kafka软件部署包名称不是kafka_2.11-2.2.0.tgz,请根据实际情况修改命令。建立软链接,便于后期版本更换。ln -s kafka_2.11-2.2.0 kafka说明若Kafka软件目录名称不是kafka_2.11-2.2.0,请根据实际情况修改命令。打开配置文件。vi /etc/profile按“i”进入编辑模式,添加Kafka到环境变量。export KAFKA_HOME=/usr/local/kafka export PATH=$KAFKA_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。环境变量生效。source /etc/profile说明Kafka所有的配置文件都在“$KAFKA_HOME/config”目录下,修改以下配置文件前,需要切换到“$KAFKA_HOME/config”目录。cd $KAFKA_HOME/config修改server.properties文件。打开文件。vi server.properties按“i”进入编辑模式,内容修改如下。broker.id=0 port=6667 host.name=agent1 log.dirs=/data/data1/kafka,/data/data2/kafka,/data/data3/kafka,/data/data4/kafka,/data/data5/kafka,/data/data6/kafka,/data/data7/kafka,/data/data8/kafka,/data/data9/kafka,/data/data10/kafka,/data/data11/kafka,/data/data12/kafka zookeeper.connect=agent1:2181,agent2:2181,agent3:2181说明其中,参数host.name可填写agent1对应的IP地址,log.dirs为实际的存储数据路径。按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。同步配置到其它节点。拷贝kafka_2.11-0.10.1.1到agent2、3的“/usr/local”目录下。scp -r /usr/local/kafka_2.11-2.2.0 root@agent2:/usr/local scp -r /usr/local/kafka_2.11-2.2.0 root@agent3:/usr/local登录到agent2、agent3节点,为kafka_2.11-2.2.0建立软链接。cd /usr/local ln -s kafka_2.11-2.2.0 kafka修改节点相关参数。登录agent2,修改server.properties。vi server.properties按“i”进入编辑模式,内容修改如下。broker.id=1 host.name=agent2 #可填对应的IP地址按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。登录agent3,修改server.properties。vi server.properties按“i”进入编辑模式,内容修改如下。broker.id=2 host.name=agent3 #可填对应的IP地址按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。分别在agent1~3上启动Kafka。cd /usr/local/kafka/bin ./kafka-server-start.sh -daemon ../config/server.properties观察进程是否都正常启动。jps说明agent节点应启动的进程以agent1为准,server无进程。分别在agent1~3上停止Kafka。cd /usr/local/kafka/bin ./kafka-server-stop.sh
-
简要介绍Spark是用于大规模数据处理的统一分析引擎,具有可伸缩、基于内存计算等特点,已经成为轻量级大数据快速处理的统一平台,各种不同的应用,如实时流处理、机器学习、交互式查询等,都可以通过Spark建立在不同的存储和运行系统上。更多关于Spark信息请参见:cid:link_0。开发语言:Scala硬件要求项目说明服务器TaiShan服务器CPU鲲鹏920处理器或鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网软件要求项目版本OpenJDK1.8.0_252Maven3.5.4R3.1.1Spark2.3.0CentOS系统项目版本CentOS7.6OS Kernel4.14.0GCC4.8.5openEuler系统项目版本openEuler20.03 LTS SP122.03 LTSOS Kernel4.19.90GCC7.3.0安装GCC挂载OS镜像。mount YOUR_OS.iso /media -o loop说明YOUR_OS.iso用实际的iso包名代替。备份repo文件,清空“/etc/yum.repos.d/”目录文件。cp -r /etc/yum.repos.d /etc/yum.repos.d-bak rm /etc/yum.repos.d/*须知请确认已经备份所有repo文件后,在rm删除界面输入“y”表示同意删除。配置Yum本地源。打开“/etc/yum.repos.d/Local.repo”文件。vi /etc/yum.repos.d/Local.repo按“i”进入编辑模式,在文件中添加以下内容。[Local] name=Local baseurl=file:///media/ enabled=1 gpgcheck=0按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使Yum源配置生效。yum clean all yum makecache通过Yum源安装GCC相关软件。yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64修改GCC(解决-fsigned-char问题)寻找GCC所在路径(一般位于“/usr/bin/gcc”)。command -v gcc更改原GCC文件的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl配置GCC文件。新建GCC文件。vi /usr/bin/gcc按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/gcc-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给GCC文件添加可执行权限。chmod +x /usr/bin/gcc确认GCC是否可用。gcc --versionCentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功。修改G++(解决-fsigned-char问题)寻找G++所在路径(一般位于“/usr/bin/g++”)。command -v g++更改原G++文件的名字(例如改成g++-impl)。mv /usr/bin/g++ /usr/bin/g++-impl配置G++文件。新建G++文件。vi /usr/bin/g++按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/g++-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给G++文件添加可执行权限。chmod +x /usr/bin/g++确认G++是否可用。g++ --version下载并解压安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz mkdir -p /opt/tools/installed/ mv jdk8u252-b09 /opt/tools/installed/配置Java环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09 export PATH=$JAVA_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile检查OpenJDK是否安装成功。java -version回显如下所示即为安装成功。下载并安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz --no-check-certificate tar -zxf apache-maven-3.5.4-bin.tar.gz mkdir -p /opt/tools/installed mv apache-maven-3.5.4 /opt/tools/installed/修改Maven环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在末尾增加如下代码。export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4 export PATH=$MAVEN_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile检查Maven是否安装成功。mvn -v回显如下所示即为安装成功。修改Maven配置文件中的本地仓路径、远程仓。打开配置文件。vi /opt/tools/installed/apache-maven-3.5.4/conf/settings.xml说明本地仓库地址默认在“~/.m2/”目录下,如果想修改成指定目录,则修改<localRepository>标签,没有特殊需求,无需修改该参数。按“i”进入编辑模式,远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以按照下面示例配置),在<mirrors>标签内添加以下内容。<mirror> <id>huaweimaven</id> <name>huawei maven</name> <url>https://mirrors.huaweicloud.com/repository/maven/</url> <mirrorOf>central</mirrorOf> </mirror>可选:当编译环境不能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下。<proxies> <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>用户名</username> <password>密码</password> <host>代理服务器网址</host> <port>代理服务器端口</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> </proxies>按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。CentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功 安装依赖通过Yum源安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel下载R语言安装包。wget http://cran.rstudio.com/src/base/R-3/R-3.1.1.tar.gz解压安装包。tar -zxf R-3.1.1.tar.gz安装依赖库。yum -y install libXt-devel.aarch64 readline-devel.aarch64进入解压后目录。cd R-3.1.1执行编译。./configure --enable-R-shlib --enable-R-static-lib --with-libpng --with-jpeglib --prefix=/opt/tools/installed/R-3.1.1 make all -j10 && make install配置R语言环境变量。export R_HOME=/opt/tools/installed/R-3.1.1 export PATH=$R_HOME/bin:$PATH原始jarso文件commons-crypto-1.0.0.jarlibcommons-crypto.sojline-2.12.1.jarlibjansi.soleveldbjni-all-1.8.jarlibleveldbjni.sonetty-all-4.1.17.Final.jarlibnetty_transport_native_epoll_x86_64.soscala-compiler-2.11.12.jarlibjansi.sosnappy-java-1.1.2.6.jarlibsnappyjava.solz4-java-1.4.0.jarliblz4-java.so下载Spark安装包。wget https://github.com/apache/spark/archive/v2.3.0.tar.gz解压安装包。tar -zxf v2.3.0.tar.gz进入解压后目录。cd spark-2.3.0修改pom.xml。打开文件。vi pom.xml按“i”进入编辑模式,在<repositories>标签的第一位添加鲲鹏Maven仓库源。<repository> <id>kunpengmaven</id> <name>kunpeng maven</name> <url>https://mirrors.huaweicloud.com/kunpeng/maven</url> </repository>在<pluginRepository>标签第一位添加华为Maven源。<pluginRepository> <id>huaweicloud-plugin</id> <url>https://mirrors.huaweicloud.com/repository/maven</url> </pluginRepository>按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。执行编译。dev/make-distribution.sh --tgz -Pyarn,hive,hive-thriftserver,sparkr编译完成后会在源码目录下生成编译好的包spark-2.3.0-bin-2.6.5.tgz。
-
简要介绍HBase–Hadoop Database,是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群,海量数据的快速随机访问。更多关于HBase信息请参见:https://hbase.apache.org。开发语言:Java一句话描述:分布式数据库说明CentOS 7.6操作系统下HBase 2.1.0版本,建议使用鲲鹏应用迁移工具专项软件迁移功能,一键迁移至鲲鹏平台。具体操作请参见专项软件迁移。openEuler 20.03 LTS SP1、openEuler 22.03 LTS操作系统下HBase 2.1.0版本,可以参考本文档的操作指导迁移至鲲鹏平台。硬件要求项目说明服务器TaiShan服务器CPU鲲鹏920处理器或鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网软件要求项目版本OpenJDK1.8.0_252Maven3.5.4HBase2.1.0Protobuf2.5.0CentOS系统项目版本CentOS7.6OS Kernel4.14.0GCC4.8.5openEuler系统项目版本openEuler20.03 LTS SP122.03 LTSOS Kernel4.19.90GCC7.3.0
-
安装完dotnet后执行dotnet --info报错, 执行dotnet --list 又没问题 ,大概意思libicuil8n..so.50这个文件有问题,但又找不到正常文件cannot get symbol ucol_setMaxVariable_50 from libicui18n error:/lib64/libicuil8n..so.50: undefined symbol:ucol_setMaxVariable_50 Aborted
-
调度文件无法修改,没法保存
-
大神们帮忙看看,很奇怪。
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签