云服务器内容精选

  • 背景信息 CentOS 8系统2021年12月31日已停止维护服务,CentOS 7系统将于2024年06月30日停止维护服务。CentOS不再支持新的软件和补丁更新。CentOS用户现有业务随时面临宕机和安全风险,并无法确保及时恢复。 HCE操作系统从云原生混部竞争力、安全可信、快速迁移、高效运维、专业认证等方面为用户提供专业云服务、解决CentOS停服带来的影响。HCE提供了迁移工具,可将CentOS、EulerOS等操作系统平滑迁移至HCE操作系统。
  • 迁移能力评估 HCE已有成熟的搬迁指导,按照分布式集群应用、主备应用、单机应用三种类型对各种应用进行归类,并制定相应的搬迁方案: 针对分布式集群软件,如大数据、分布式存储。CentOS搬迁无需中断业务, 基于分布式软件伸缩扩容机制,HCE实现滚动代替,平滑搬迁。 针对主备应用,如数据库等。CentOS搬迁无需中断业务,先备后主,基于主备状态同步机制,平滑搬迁。 针对单机应用,CentOS搬迁需中断业务,割接式搬迁,该类搬迁方案和原应用重新部署方式等同,属于成熟方案。 华为云提供两步切换至HCE操作系统实践,本实践带您体验从CentOS迁移到Huawei Cloud EulerOS 2.0的完整过程,开发者可直接体验兼容评估和迁移能力评估。
  • 兼容性评估 华为HCE操作系统已具备完整代替CentOS的技术能力,完全自主可控,并基于openEuler开源社区持续自主演进。南向支持6大类400种板卡,基本覆盖主流计算产品。北向100%兼容主流的应用场景(云原生、存储、数据库、大数据、WEB等)。超过5000种应用软件通过兼容性认证,基本能够替代CentOS的各种部署。 为满足CentOS系列到HCE搬迁的准确性和安全性,请您使用兼容性工具对待迁移软件快速进行扫描,获取评估结果。 对于可兼容的应用软件,迁移过程中并不会修改软件配置,迁移完成后无需重新配置;对于部分不兼容的应用软件,评估报告给出相应的规避策略,请在迁移之后进行相应的适配。
  • Huawei Cloud EulerOS、openEuler和EulerOS镜像的主要区别是什么? Huawei Cloud EulerOS、openEuler和EulerOS镜像均为华为自研镜像,主要区别如下表 1所示: 表1 Huawei Cloud EulerOS、openEuler和EulerOS镜像的区别与联系 镜像类型 描述 Huawei Cloud EulerOS(简称HCE) Huawei Cloud EulerOS(简称HCE),是基于openEuler开发的一款商业发行版镜像,可替代CentOS、EulerOS等操作系统,并提供专业的维护保障能力,镜像目前免费对用户使用。 说明: Huawei Cloud EulerOS 2.0是基于openEuler 22.03 LTS版本构建的云上操作系统。 openEuler openEuler是一款开源镜像,您可以免费使用,但是不提供商业维护保障能力。openEuler最初由华为研发,但是已经在2021年11月9日正式捐赠给开放原子开源基金会,openEuler的技术支持由开源社区提供。 EulerOS EulerOS是基于开源技术的企业级Linux操作系统软件,具备高安全性、高可扩展性、高性能等技术特性,能够满足客户IT基础设施和云计算服务等多业务场景需求。 说明: EulerOS是基于开源操作系统openEuler进行开发的华为内部的操作系统。
  • 在x86架构安装mlnx驱动 下载CX6网卡驱动安装包MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64.tgz。 解压驱动安装包并进入工作目录。 tar -xf MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64.tgz cd MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64 安装CX6网卡驱动软件。 ./mlnxofedinstall --basic --without-depcheck --distro OPENEULER22.03 --force --kernel 5.10.0-60.18.0.50.oe2203.x86_64 --kernel-sources /lib/modules/$(uname -r)/build 其中,“5.10.0-60.18.0.50.oe2203.x86_64“是官方MLNX_OFED包本身编译时的内核版本。 创建链接。 ln -s /lib/modules/5.10.0-60.18.0.50.oe2203.x86_64/extra/mlnx-ofa_kernel /lib/modules/$(uname -r)/weak-updates/ ln -s /lib/modules/5.10.0-60.18.0.50.oe2203.x86_64/extra/kernel-mft /lib/modules/$(uname -r)/weak-updates/ depmod -a 执行reboot命令重新系统。 执行/etc/init.d/openibd status命令查看驱动安装结果。 显示如下信息表示驱动安装成功。
  • 在Arm架构安装mlnx驱动 下载CX6网卡驱动安装包MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-aarch64.tgz。 解压驱动安装包并进入工作目录。 tar -xf MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-aarch64.tgz cd MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-aarch64 安装CX6网卡驱动软件。 ./mlnxofedinstall --basic --without-depcheck --distro OPENEULER22.03 --force --kernel 5.10.0-60.18.0.50.oe2203.aarch64 --kernel-sources /lib/modules/$(uname -r)/build 其中,“5.10.0-60.18.0.50.oe2203.aarch64”是官方MLNX_OFED包本身编译时的内核版本。 执行如下命令创建链接。 ln -s /lib/modules/5.10.0-60.18.0.50.oe2203.aarch64/extra/mlnx-ofa_kernel /lib/modules/$(uname -r)/weak-updates/ ln -s /lib/modules/5.10.0-60.18.0.50.oe2203.aarch64/extra/kernel-mft /lib/modules/$(uname -r)/weak-updates/ depmod -a 执行reboot命令重新系统。 执行/etc/init.d/openibd status命令查看驱动安装结果。 显示如下信息表示驱动安装成功。
  • OOM可能的原因 cgroup内存不足 使用的内存超出了cgroup中memory.limit_in_bytes配置的大小,如下示例演示memory.limit_in_bytes配置为80M,使用memhog模拟分配100M,触发OOM,/var/log/messages部分日志如下,可以从日志中看到memhog所在进程(PID: 2021820)使用了81920kB内存,超出了限制,触发了OOM: warning|kernel[-]|[2919920.414131] memhog invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=0info|kernel[-]|[2919920.414220] memory: usage 81920kB, limit 81920kB, failcnt 30err|kernel[-]|[2919920.414272] Memory cgroup out of memory: Killed process 2021820 (memhog) total-vm:105048kB, anon-rss:81884kB, file-rss:1544kB, shmem-rss:0kB, UID:0 pgtables:208kB oom_score_adj:0 父cgroup内存不足 在子cgroup中内存仍然足够,但是父cgroup的内存不足,超过了内存限制,如下示例演示父cgroup memory.limit_in_bytes配置为80M,两个子cgroup memory.limit_in_bytes均配置为50M,在两个子cgroup中使用程序循环分配内存,触发OOM,/var/log/messages部分日志如下: warning|kernel[-]|[2925796.529231] main invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=0info|kernel[-]|[2925796.529315] memory: usage 81920kB, limit 81920kB, failcnt 199err|kernel[-]|[2925796.529366] Memory cgroup out of memory: Killed process 3238866 (main) total-vm:46792kB, anon-rss:44148kB, file-rss:1264kB, shmem-rss:0kB, UID:0 pgtables:124kB oom_score_adj:0 系统全局内存不足 一方面由于OS的空闲内存不足,有程序一直在申请内存,另一方面也无法通过内存回收机制解决内存不足的问题,因此触发了OOM,如下示例演示OS中使用程序循环分配内存,触发OOM,/var/log/messages部分日志如下,可以从日志中看到内存节点Node 0的空闲内存(free)已经低于了内存最低水位线(low),触发了OOM: kernel: [ 1475.869152] main invoked oom: gfp_mask=0x100dca(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), order=0kernel: [ 1477.959960] Node 0 DMA32 free:22324kB min:44676kB low:55844kB high:67012kB reserved_highatomic:0KB active_anon:174212kB inactive_anon:1539340kB active_file:0kB inactive_file:64kB unevictable:0kB writepending:0kB present:2080636kB managed:1840628kB mlocked:0kB pagetables:7536kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kBkernel: [ 1477.960064] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/sshd.service,task=main,pid=1822,uid=0kernel: [ 1477.960084] Out of memory: Killed process 1822 (main) total-vm:742748kB, anon-rss:397884kB, file-rss:4kB, shmem-rss:0kB, UID:0 pgtables:1492kB oom_score_adj:1000 内存节点(Node)的内存不足 在NUMA存储模式下,OS会存在多个内存节点,如果程序制定使用特定节点的内存,可能在OS内存充足的情况下触发OOM,如下示例演示在两个内存节点的条件下,使用程序循环在Node 1分配内存,导致Node 1内存不足,但是OS内存足够,/var/log/messages部分日志如下: kernel: [ 465.863160] main invoked oom: gfp_mask=0x100dca(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), order=0kernel: [ 465.878286] active_anon:218 inactive_anon:202527 isolated_anon:0#012 active_file:5979 inactive_file:5231 isolated_file:0#012 unevictable:0 dirty:0 writeback:0#012 slab_reclaimable:6164 slab_unreclaimable:9671#012 mapped:4663 shmem:2556 pagetables:846 bounce:0#012 free:226231 free_pcp:36 free_cma:0kernel: [ 465.878292] Node 1 DMA32 free:34068kB min:32016kB low:40020kB high:48024kB reserved_highatomic:0KB active_anon:188kB inactive_anon:778076kB active_file:20kB inactive_file:40kB unevictable:0kB writepending:0kB present:1048444kB managed:866920kB mlocked:0kB pagetables:2752kB bounce:0kB free_pcp:144kB local_pcp:0kB free_cma:0kBkernel: [ 933.264779] oom-kill:constraint=CONSTRAINT_MEMORY_POLICY,nodemask=1,cpuset=/,mems_allowed=0-1,global_oom,task_memcg=/system.slice/sshd.service,task=main,pid=1733,uid=0kernel: [ 465.878438] Out of memory: Killed process 1734 (main) total-vm:239028kB, anon-rss:236300kB, file-rss:200kB, shmem-rss:0kB, UID:0 pgtables:504kB oom_score_adj:1000 其他可能原因 OS在内存分配的过程中,如果伙伴系统的内存不足,则系统会通过OOM Killer释放内存,并将内存提供至伙伴系统。
  • 操作背景 为了保证系统的安全性,以及减少用户在不使用系统时所造成的资源浪费,在用户离开系统一段时间后,必须对连接进行注销。注销有诸多方法,修改TMOUT变量为其中的解决方案之一。 TMOUT是一个环境变量,它决定了在系统自动注销前所空闲的秒数。因此,在设置了此变量后,若用户在规定时间内没有进行主动活动,则连接将自动断开。若没有设置此变量,或值为0,表示禁用自动注销,用户不会因长时间不活动而断开连接。
  • 操作步骤 执行以下命令查看自动注销时间(即TMOUT的值)。 echo $TMOUT 显示空白表示没有设置此值。 执行以下命令,设置当前会话下的自动注销时间。如果要长期定义自动注销时间请执行步骤3。 export TMOUT=秒数 长期应用此变量设置自动注销时间。 方式一 执行以下命令修改文件/etc/profile(若修改此文件不生效,可再修改/etc/bashrc ,修改流程相同),这样可以使所有应用此配置文件的用户均受此自动注销时间的影响。 vim /etc/profile 或者 vim /etc/bashrc 添加以下命令至文件末尾。以设置自动注销时间为1200秒为例,实际值可自定义,设置为0禁用注销功能。 export TMOUT=1200 保存文件后执行以下命令刷新。 source /etc/profile 方式二 依次执行以下命令直接修改自动注销时间。 sed -i '$a\export TMOUT=1200' /etc/profilesource /etc/profile 执行以下命令查看自动注销时间。 echo $TMOUT 若显示定义的数值,则说明自动注销功能设置成功。
  • 操作步骤 打开配置文件/boot/grub2/grub.cfg,删除selinux=0。 执行touch /.autorelabel命令。 /.autorelabel文件将触发OS在启动过程中对磁盘上所有文件relabel重新打selinux标签,该过程可能需要持续几分钟。relabel完成后OS将自动重启一次并生效,同时自动删除/.autorelabel文件确保下次不会再重复执行relabel动作。 打开配置文件/etc/selinux/config,设置SELINUX=permissive,并执行reboot重启操作系统。 再次打开配置文件/etc/selinux/config,设置SELINUX=enforcing,并执行reboot重启操作系统。 重启后执行getenforce命令查看SElinux状态。 显示Enforcing表示SElinux已经开启。
  • 安装wireguard-tools 执行以下命令安装依赖。 dnf install gcc make 执行以下命令下载wireguard-tools源码包。 wget https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-1.0.20210914.tar.xz 执行以下命令解压上述源码包。 tar -xf wireguard-tools-1.0.20210914.tar.xz 进入wireguard-tools-1.0.20210914/src目录,依次执行以下命令编译安装。 make make install 验证安装是否成功。 可以执行wg -h和wg-quick -h命令验证是否安装成功,如图所示。
  • 背景信息 2020年12月08日,CentOS官方宣布了停止维护CentOS Linux的计划,并推出了CentOS Stream项目。更多信息,请参见CentOS官方公告。 CentOS 8系统2021年12月31日已停止维护服务,CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 9及后续版本,不再支持新的软件和补丁更新。CentOS用户现有业务随时面临宕机和安全风险,并无法确保及时恢复。
  • 影响 基于CentOS官方的变更计划,对CentOS操作系统的使用者产生的影响如下所述: 2021年12月31日以后,CentOS 8的使用者将无法获得包括问题修复和功能更新在内的任何软件维护和支持。 2024年06月30日以后,CentOS 7的使用者将无法获得包括问题修复和功能更新在内的任何软件维护和支持。 对于华为云的公共镜像及服务支持存在一定影响: 华为云暂不会下线CentOS 8公共镜像,同时已经使用CentOS 8创建的E CS 实例运行不会受到影响,但将停止更新镜像。 华为云对于CentOS操作系统的服务支持将和CentOS官方日期保持同步。2021年12月31日以后将不再对CentOS 8提供服务支持;对CentOS 7的服务支持将持续至2024年6月30日。
  • 应对策略 为了保障使用CentOS系统的业务正常运行,华为云为您提供替换CentOS操作系统的应对策略。替换CentOS操作系统的方式分为两类,切换操作系统和迁移操作系统。 切换到Debian或Ubuntu具体操作、详见切换操作系统。 将CentOS操作系统切换为支持切换的操作系统。 如果现有的ECS配置(网卡、磁盘、VPN等配置的类型和数量)都不需要改变,仅需要修改ECS的操作系统镜像,并且您的软件和原操作系统耦合度较低,建议使用系统切换。 切换到Huawei Cloud EulerOS具体操作,详见将操作系统切换为HCE。 切换到Debian或Ubuntu具体操作、详见切换操作系统。 将CentOS操作系统迁移为Huawei Cloud EulerOS操作系统。 如果现有的ECS配置(网卡、磁盘、VPN等配置的类型和数量)都不需要改变,希望保留操作系统软件的配置参数,可以通过操作系统迁移的方式迁移到Huawei Cloud EulerOS。 系统迁移详见将操作系统迁移为HCE。 系统切换和迁移的区别如下表,请根据需要选择合适的替换方式。 表1 系统切换和迁移的区别 区别 系统切换 系统迁移 数据备份 切换操作系统会清除系统盘数据,包括系统盘上的系统分区和所有其它分区。 切换操作系统不影响数据盘数据。 迁移操作系统不会清除系统盘数据,为避免系统软件的数据丢失,建议将其备份。 迁移操作系统不影响数据盘数据。 个性化设置 切换操作系统后,当前操作系统内的个性化设置(如DNS、主机名等)将被重置,需重新配置。 迁移操作系统后,当前操作系统内的个性化设置(如DNS、主机名等)不需重新配置。 表2 支持切换的操作系统 操作系统 概述 适用人群 Huawei Cloud EulerOS Huawei Cloud EulerOS(简称HCE)是基于openEuler构建的云上操作系统。 HCE打造云原生、高性能、高安全、易迁移等能力,加速用户业务上云,提升用户的应用创新空间,可替代CentOS、EulerOS等公共镜像。 适用于希望使用免费镜像,并延续开源社区镜像使用习惯的个人或企业。 Debian、Ubuntu操作系统 Linux的其他发行版操作系统,不同操作系统在使用习惯和应用兼容性上存在一定差异。 适用于可以自行应对操作系统切换成本的个人或企业。
  • XGPU服务使用示例 影响XGPU服务的环境变量如下表所示,您可以在创建容器时指定环境变量的值。容器引擎可以通过XGPU服务获得算力和显存。 表1 影响XGPU服务的环境变量 环境变量名称 取值类型 说明 示例 GPU_IDX Integer 指定容器可使用的GPU显卡。 为容器分第一张显卡: GPU_IDX=0 GPU_CONTAINER_MEM Integer 设置容器内可使用的显存大小,单位 MiB。 为容器分配的显存大小为5120MiB: GPU_CONTAINER_MEM=5120 GPU_CONTAINER_QUOTA_PERCENT Integer 指定显卡算力分配百分比。 算力支持最小1%粒度的划分,推荐最小算力不低于4%。 为容器分配50%的算力比例: GPU_CONTAINER_QUOTA_PERCEN=50 GPU_POLICY Integer 指定GPU使用的算力隔离的策略。 0:不隔离算力,即原生调度。 1:固定算力调度。 2:平均调度。 3:抢占调度。 4:权重抢占调度。 5:混合调度。 6:权重弱调度。 算力隔离策略示例详见XGPU算力调度示例。 设置算力隔离策略为固定算力调度:GPU_POLICY=1 GPU_CONTAINER_PRIORITY Integer 指定容器的优先级。 0:低优先级 1:高优先级 创建高优先级容器: GPU_CONTAINER_PRIORITY=1 以nvidia的docker创建两个容器为例,介绍XGPU服务的使用方法,数据规划如下。 表2 数据规划 参数 容器1 容器2 说明 GPU_IDX 0 0 指定两个容器使用第一张显卡。 GPU_CONTAINER_QUOTA_PERCENT 50 30 为容器1分配50%算力,为容器2分配30%算力。 GPU_CONTAINER_MEM 5120 1024 为容器1分配5120MiB显存,为容器2分配1024MiB显存。 GPU_POLICY 1 1 设置第一张显卡使用固定算力调度策略。 GPU_CONTAINER_PRIORITY 1 0 指定容器1为高优先级容器,容器2为低优先级容器。 配置示例: docker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=50 -e GPU_CONTAINER_MEM=5120 -e GPU_IDX=0 -e GPU_POLICY=1 -e GPU_CONTAINER_PRIORITY=1 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bash docker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=30 -e GPU_CONTAINER_MEM=1024 -e GPU_IDX=0 -e GPU_POLICY=1 -e GPU_CONTAINER_PRIORITY=0 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bash