LU是什么?
LU patch,顾名思义,在线升级。也就是说不用像传统的升级方式那样,把服务器设置到单用户模式来升级。这样就减少了服务器的down time,减少对业务的影响。
我们知道打Patch是像操作系统中添加一些补丁文件,对操作系统会产生较大的改动,为了安全起见,通常要在单用户模式下进行patch,这样是为了保证在patch的过程中不会受到其他用户和进程等的干扰。那么为什么Live Upgrade这种模式可以不进入单用户模式呢? 其原理如下:
LU的原理
要说Live Upgrade的原理首先要明白solaris的分区概念。 solaris有0-7共8个分区。其中2号分区是固定为代表整个磁盘。其他几个分区各有各的作用。比如说以下面这台机器为例:
bash-3.00# cat /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no nologging
/dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no nologging
/dev/md/dsk/d6 /dev/md/rdsk/d6 /opt/oracle ufs 2 yes logging
我们看到
d1用于 SWAP
d0用于 /
d4用于 /var
d6用于/opt/oracle
这4个分区加上已知的d2用于代表整个磁盘。还剩下 d7 d3 d5不明确他们的作用。实际上因为我们采用了磁盘镜像的方式来设计存储,那么要有一块盘存储metadb的信息,这块盘就是d7。 如下:
bash-3.00# metadb
flags first blk block count
a m p luo 16 8192 /dev/dsk/c3t500000E017CBA860d0s7
a p luo 8208 8192 /dev/dsk/c3t500000E017CBA860d0s7
a p luo 16400 8192 /dev/dsk/c3t500000E017CBA860d0s7
a p luo 16 8192 /dev/dsk/c3t500000E017CB21A0d0s7
a p luo 8208 8192 /dev/dsk/c3t500000E017CB21A0d0s7
a p luo 16400 8192 /dev/dsk/c3t500000E017CB21A0d0s7
那么这时候就剩下d3 d5不明确他们的用途了。而d3 , d5正是我们这个环境中LU的关键。我们看一下系统的df -h输出
bash-3.00# df -h
Filesystem size used avail capacity Mounted on
/dev/md/dsk/d0 16G 7.9G 7.7G 51% /
/dev/md/dsk/d4 7.9G 3.8G 4.0G 50% /var
swap 2.0G 22M 2.0G 2% /tmp
/dev/md/dsk/d6 12G 7.5G 4.2G 64% /opt/oracle
其实这是一个简化的结果,但是也能帮助我们说明问题了。我们看到其实只有/ 和 /var是我们的solaris正常运行所需要的。至于/opt/oracle,它是外部软件,没有这部分内容solaris一样能够运行。而对于/tmp,它对应的其实应该是一个虚拟文件系统,也就是说,关闭计算机之后,这部分内容就会消失。所以,要让solaris最小化运行起来我们只需要/和/var。这是LU的原理就好理解了。它的原理就是把当前的/和/var也就是d0和d4看做是一个BE(boot environment),而d3和d5这两块盘看成另一个BE。在LU的过程中,我们实际上是先把当前BE的所有内容拷贝到另一个BE上,也就是d3,d5上。这样我们就相当于拥有了当前操作系统的一份拷贝。然后对d3和d5进行打patch。当patch完毕后,我们把操作系统重启一下,但是重启到d3 , d5上。这样,我们就相当于拥有了一份原来系统的升级版本,也就是打过patch的版本。这样整个LU的过程中,所需要的down time只是重启切换的那一小段时间。 打patch的过程中服务器不需要关闭。不需要切换到单用户模式,这样就实现了我们所谓的LU。