1. 麒麟操作系统生产环境部署基础第一次接触麒麟操作系统生产环境部署时我踩过不少坑。记得有次凌晨三点还在调试服务器就因为没做好基础环境配置。KylinOS作为国产化平台的优选系统其生产环境部署与传统Linux发行版既有共性也有特性差异。硬件兼容性验证是首要环节。在飞腾FT-2000/4服务器上部署时我发现内核模块加载顺序会影响NVMe磁盘性能。建议先用live模式测试关键硬件# 查看硬件识别情况 lspci -vv | grep -i controller dmesg | grep -i error # 测试磁盘IO性能 fio --filename/dev/nvme0n1 --rwrandread --ioenginelibaio --direct1 --nametest --bs4k --iodepth64 --runtime60分区方案优化直接影响后期运维效率。对于数据库服务器我推荐这种分区结构/boot 1GB (ext4) / 50GB (xfs) /var 100GB (xfs) # 日志和动态数据 /data 剩余空间 (xfs) # 业务数据 swap 内存大小的50% # 对于大内存服务器可适当减小系统安装后立即要做三件事注册到卫星服务器获取更新subscription-manager register --username账号 --password密码 subscription-manager attach --auto禁用不必要的服务systemctl disable bluetooth cups abrtd配置基础安全策略# 修改SSH默认端口 sed -i s/#Port 22/Port 51022/ /etc/ssh/sshd_config # 安装基础安全工具 yum install -y aide rkhunter2. 系统安全加固实战生产环境的安全加固不能停留在表面。有次我们的测试服务器被入侵溯源发现是SELinux配置不当导致的。KylinOS的安全模块需要特别关注以下几点SELinux策略定制往往被忽视。建议采用以下配置流程# 查看当前模式 getenforce # 切换为强制模式 setenforce 1 sed -i s/SELINUXpermissive/SELINUXenforcing/ /etc/selinux/config # 安装审计工具 yum install -y setroubleshoot-server # 生成自定义模块 grep AVC /var/log/audit/audit.log | audit2allow -M mypolicy semodule -i mypolicy.pp防火墙策略要遵循最小权限原则。这是我常用的firewalld配置模板# 创建业务专用zone firewall-cmd --permanent --new-zoneapp_zone firewall-cmd --permanent --zoneapp_zone --add-servicehttp firewall-cmd --permanent --zoneapp_zone --add-servicehttps firewall-cmd --permanent --zoneapp_zone --add-port8080/tcp # 应用默认拒绝策略 firewall-cmd --permanent --zoneapp_zone --set-targetDROP # 重载配置 firewall-cmd --reload账户安全需要多层防护配置密码复杂度策略sed -i s/minlen 8/minlen 12/ /etc/security/pwquality.conf echo password requisite pam_pwquality.so retry3 /etc/pam.d/system-auth设置登录失败锁定echo auth required pam_faillock.so preauth silent audit deny5 unlock_time900 /etc/pam.d/system-auth启用SSH双因素认证yum install -y google-authenticator echo auth required pam_google_authenticator.so /etc/pam.d/sshd3. 高可用集群部署金融行业的生产环境对可用性要求极高。我们曾用KylinOSDRBDPacemaker搭建过支付系统集群实现了99.99%的可用性。共享存储配置是集群的基础。DRBD的配置示例# 安装必要组件 yum install -y drbd84-utils kmod-drbd84 # 配置文件/etc/drbd.d/drbd0.res resource drbd0 { protocol C; disk { on-io-error detach; } on node1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.100.1:7788; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.100.2:7788; meta-disk internal; } } # 初始化资源 drbdadm create-md drbd0 systemctl enable drbd --nowPacemaker集群管理的关键配置# 禁用STONITH测试环境 pcs property set stonith-enabledfalse # 创建虚拟IP资源 pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip192.168.1.100 cidr_netmask24 op monitor interval30s # 配置DRBD主从切换 pcs resource create DrbdFS ocf:linbit:drbd drbd_resourcedrbd0 op monitor interval60s pcs resource promote DrbdFS master-max1 master-node-max1 clone-max2 clone-node-max1 notifytrue脑裂防护是生产环境必须考虑的。我推荐以下检测策略# 在/etc/corosync/corosync.conf中添加 quorum { provider: corosync_votequorum expected_votes: 2 } # 配置隔离设备 pcs stonith create ipmi-fence fence_ipmilan pcmk_host_listnode1 node2 ipaddr192.168.10.10 loginadmin passwdpassword4. 容器化部署实践在国产化平台上运行Kubernetes曾是个挑战直到我们在飞腾服务器上成功部署KylinOSK8s的生产集群。容器运行时适配需要注意# 安装定制版docker yum install -y docker-ce-18.09.9 # 配置cgroup驱动 cat /etc/docker/daemon.json EOF { exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue ] } EOFKubernetes集群初始化关键步骤# 禁用swap swapoff -a sed -i /swap/s/^/#/ /etc/fstab # 加载内核模块 modprobe br_netfilter echo br_netfilter /etc/modules-load.d/k8s.conf # 初始化控制节点 kubeadm init --pod-network-cidr10.244.0.0/16 \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers # 安装CNI插件 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml国产化适配经验龙芯架构的镜像需要重新编译FROM cr.loongnix.cn/library/debian:buster RUN apt update apt install -y crossbuild-essential-loongarch64 COPY ./app /app RUN cd /app make ARCHloongarch64遇到cgroup v2问题时需要降级grubby --update-kernelALL --argssystemd.unified_cgroup_hierarchy0 reboot5. 性能调优指南数据库服务器性能调优是个系统工程。我们通过以下优化使PostgreSQL性能提升了3倍。内核参数优化关键配置# /etc/sysctl.conf 添加 vm.swappiness 10 vm.dirty_ratio 30 vm.dirty_background_ratio 10 kernel.sched_migration_cost_ns 5000000 net.ipv4.tcp_slow_start_after_idle 0 # 针对大内存服务器 vm.nr_hugepages 1024 vm.hugetlb_shm_group 1001磁盘IO调度要根据存储类型调整# NVMe SSD使用none调度器 echo none /sys/block/nvme0n1/queue/scheduler # 机械硬盘使用deadline echo deadline /sys/block/sda/queue/scheduler # 调整预读值 blockdev --setra 8192 /dev/sda数据库专用优化# 修改PostgreSQL配置 shared_buffers 8GB # 内存的25% effective_cache_size 24GB # 内存的75% maintenance_work_mem 2GB # 大表维护用 random_page_cost 1.1 # SSD环境 max_worker_processes 8 # CPU核心数 max_parallel_workers_per_gather 4 # 并行查询6. 监控告警体系完善的监控能提前发现90%的问题。我们基于PrometheusGrafana构建的监控系统曾多次预警硬件故障。指标采集配置示例# prometheus.yml 片段 scrape_configs: - job_name: kylinos-node static_configs: - targets: [192.168.1.10:9100, 192.168.1.11:9100] - job_name: kafka metrics_path: /metrics static_configs: - targets: [kafka1:7071, kafka2:7071]关键告警规则# alert.rules groups: - name: host rules: - alert: HighCPU expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{modeidle}[5m])) * 100) 85 for: 10m labels: severity: warning annotations: summary: 高CPU使用率 ({{ $value }}%) - alert: DiskFull expr: (node_filesystem_avail_bytes{mountpoint/} * 100) / node_filesystem_size_bytes{mountpoint/} 10 for: 5m labels: severity: critical日志收集方案# 安装Filebeat yum install -y filebeat # 配置/etc/filebeat/filebeat.yml filebeat.inputs: - type: log paths: - /var/log/messages - /var/log/secure output.logstash: hosts: [logstash:5044] # 启动服务 systemctl enable filebeat --now7. 国产硬件专项优化在飞腾2000/64服务器上的优化经验值得分享。通过以下调整我们使Nginx的QPS从8000提升到15000。编译优化# 使用架构特定优化 CFLAGS-marcharmv8-acrccrypto -mtunetsv110 ./configure \ --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module make -j$(nproc)内核网络栈调优# 增加连接跟踪表大小 echo 524288 /proc/sys/net/netfilter/nf_conntrack_max # 调整TCP缓冲区 echo net.ipv4.tcp_rmem 4096 87380 16777216 /etc/sysctl.conf echo net.ipv4.tcp_wmem 4096 65536 16777216 /etc/sysctl.conf # 启用BBR拥塞控制 echo net.core.default_qdisc fq /etc/sysctl.conf echo net.ipv4.tcp_congestion_control bbr /etc/sysctl.confNUMA绑定对性能影响显著# 查看NUMA节点 numactl --hardware # 绑定进程到指定节点 numactl --cpunodebind0 --membind0 nginx -g daemon off;