Solaris10 SMF服务管理概要

概述
Solaris 10引入全新的后台服务管理机制,该机制被称为SMF,它包含了新的概念、管理工具和服务定义方式 。
SMF相对于传统的Unix后台服务管理机制具有以下突出的功能:
自动恢复因为软硬件故障或管理错误而意外终止的服务
支持服务的依赖关系
一个服务可以有多个实例
提供了丰富的命令行管理工具
系统启动时可根据依赖关系,并发启动服务,加快启动的速度
使用服务配置库存放服务定义和配置,提供服务配置库快照、备份、恢复功能
这些功能既方便了服务的管理,又提高了服务的可用性 。功能1也就是SMF服务的自愈功能,它是Solaris 10系统可预测自愈特性(Predictive Self-Healing)的一部分 。
SMF中的概念
服务和服务实例
SMF中的服务可以有多个实例,服务实例继承服务的属性 。
运行级别和服务里程碑
运行级别是指系统用户可用的服务和资源,里程碑是SMF引入的概念,在概念上它和运行级别是等价的 。两者的对应关系如下:
运行级别 里程碑FMRI
S milestone/single-user:default
2 milestone/multi-user:default
3 milestone/multi-user-server:default
使用svCADm milestone 命令可以改变里程碑,但是不能改变系统当前的运行级别 。
SMF组成要素
SMF包含两个进程、服务定义的manifest和profile、服务配置库和命令行管理工具等内容:
1. svc.startd, svc.configd
2. manifest, profile
3. repository(sqlite db)
4. CLI mgmt tool (svccfg, svcadm, svcprop, svcs, inetadm, inetconv, repository_restore)
svc.startd
svc.startd是SMF的主要进程,它根据系统管理员指令、系统故障、应用故障来启动、停止、重启服务 。
svc.configd
svc.configd是负责管理服务配置库的进程 。SMF命令行工具svccfg, svcprop, svcs, svCADm通过该进程访问服务配置库 。
manifest, profile
服务和服务的实例用xml文件定义,manifest定义服务,profile定义一组服务,通常还定义服务实例 。这些xml文件存放在/var/svc目录下 。
repository
服务配置库存放在/etc/svc/repository.db文件中 。服务配置库实际上是一个sqlite的关系数据库,它存放了服务的定义、配置等信息 。Solaris 10在两种情况下将自动备份该文件:第一种情况是系统启动后;第二种情况是manifest-import服务导入新的配置后 。系统会保留每种类别的备份4个历史版本,备份文件名称的格式为repository-type-YYYYMMDD_HHMMSWS 。运行以下命令:
-bash-3.00# ls -lh /etc/svc
total 26036
lrwxrwxrwx 1 root root 31 Feb 12 01:58 repository-boot -> repository-boot-20060212_015840
-rw------- 1 root root 2.1M Feb 10 20:42 repository-boot-20060210_204239
-rw------- 1 root root 2.1M Feb 12 00:02 repository-boot-20060212_000213
-rw------- 1 root root 2.1M Feb 12 00:04 repository-boot-20060212_000403
-rw------- 1 root root 2.1M Feb 12 01:58 repository-boot-20060212_015840
lrwxrwxrwx 1 root root 42 Jan 30 15:27 repository-manifest_import -> repository-manifest_import-20060130_152710
-rw------- 1 root root 2.1M Jan 30 15:27 repository-manifest_import-20060130_152710
-rw------- 1 root sys 2.1M Feb 13 04:17 repository.db
drwxr-xr-x 2 root sys 5.1K Feb 13 05:37 volatile
列出当前系统中repository的备份情况,可见该系统进行了至少四次启动和一次manifest-import 。如果需要将repository恢复到某个历史版本,可以使用/lib/svc/bin/restore_repository脚本 。
repository和manifest,profile的关系
/var/svc目录下的manifest和profile文件和/etc/svc/repository.db文件都包含了服务的定义、配置等信息,后者的信息是权威的 。
使用svccfg import命令可将SMF服务的manifest xml文件导入到repository中;

推荐阅读