Chinaunix

标题: 迁移应用系统要遇到的问题 [打印本页]

作者: Panyway    时间: 2014-08-18 16:13
标题: 迁移应用系统要遇到的问题
我想把linux上的一个应用系统(很大,有数据库,有自己的user和group,开了一些端口,很多文件链接==)打包,解压到另一个系统上运行。我能想到的是检查文件权限等一些简单的,请大神指导其他要注意的地方,可以写什么样的脚本完成这个操作等等,多谢了。
作者: q1208c    时间: 2014-08-18 16:23
没这么简单. 可能还需要很多系统的 lib. 所以, 这只能是懒人的做法, 但并一定保证成功.
作者: Panyway    时间: 2014-08-18 16:27
回复 2# q1208c
如果两者的OS大体相同,应用系统所需的库也一块儿打包呢?


   
作者: q1208c    时间: 2014-08-18 16:53
回复 3# Panyway

那差不多相当于整个OS打包. 那对于硬件不同的两台机器来说, 是不现实的.

更一般的做法是, 安装OS, 安装应用, 然后迁移数据和配置.

注意上面的两个 安装, 因为 安装的过程会保证所需要的lib都被正确的安装.
   
作者: Panyway    时间: 2014-08-18 17:19
回复 4# q1208c
多谢了,但因为安装过程相当漫长,而且之后要做许多配置,相当费时费力。那现在OS硬件完全一样这种情况呢?我想的是如果用脚本实现,要考虑的一些因素,

   
作者: jixuuse    时间: 2014-08-18 19:09
如果你的新服务器性能够,可以考虑安装vm系统,然后把原来的服务器p2v到新服务器

对于一些安装过程或者配置几乎无法重现的情况,这样是最好的选择
作者: q1208c    时间: 2014-08-18 19:54
回复 5# Panyway

这要看你是什么应用, 如果是 Oracle, 我建议你最好不要这么玩, 会很麻烦.


一般来说, 基于Linux的软件, 除了Oracle这样的奇葩之外, 安装都还是比较简单的.

配置的话, 你把原来的配置文件打包过去就可以了.
   
作者: Panyway    时间: 2014-08-18 21:49
回复 6# jixuuse
我刚才看了下p2v的概念,貌似迁移目标是虚拟机的话挺好的,但如果就是一个一模一样的环境呢?我是指内存磁盘什么的都充足。既然能用p2v迁移到虚拟机上,原理上还能到一般的系统上吧,我能想到的就是把需要的文件压缩然后到目标机上解压,第一在目标机上创建user和group,第二修改相应文件权限,第三根据原系统创建链接文件,第四启动相应的程序。但还需要创建相应的环境变量这个貌似有点麻烦

   
作者: Panyway    时间: 2014-08-18 21:51
回复 7# q1208c
不仅有oracle,还有db2,或者sybase。。我想都试试。
配置是指应用系统安装好后在应用系统上做的配置,这个得好长时间。所以我才想这么做。

   
作者: q1208c    时间: 2014-08-19 08:15
回复 9# Panyway

就算是专门配置的主备两台服务器, 也不能保证完全一样.

所以, 一般来说, OS 必须是独立安装的. 如果你能解决 所有的 依赖 lib, 可以试着打包一下, 不过, oracle 等数据库好象有部分配置与硬件有关, 所以, 我真的不认为你可以这么打包过去就可以使用了.

关于配置, 除了测试系统, 还没听说谁没事天天折腾数据库的机器.

   
作者: Shell_HAT    时间: 2014-08-19 08:17
停止所有应用
把硬盘数据全部拷贝走

dd if=/dev/hdx | gzip >/path/to/image.gz
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

gzip -dc /path/to/image.gz | dd of=/dev/hdx
将压缩的备份文件恢复到指定盘
作者: Panyway    时间: 2014-08-19 08:52
回复 10# q1208c
嗯,多谢指导,我试一下吧,比较头疼的就是数据库这一块儿,自己开了一些服务,这个现在还不知道怎么迁移。两者OS硬件一样理论上应该可以吧,我再想想办法,

   
作者: Panyway    时间: 2014-08-19 09:05
回复 11# Shell_HAT
多谢指导,你说的这种做法是存储到硬盘上然后把硬盘上东西解压到另一台服务器吧,如果只是把压缩后的介质传到服务期然后解压缩应该一样吧?
然而应用程序用到的环境变量和一些服务进程的处理这个有好的办法吗?我不确定其他有啥还需要考虑的,后面的感觉用脚本实现比较好,

   
作者: Shell_HAT    时间: 2014-08-19 09:14
回复 13# Panyway


如果你知道一件事情手工处理怎样操作,你可以试着把它转换成脚本;
连你自己都不知道有哪些东西需要处理,脚本就更不知道啦。
作者: dengbao2001    时间: 2014-08-19 09:19
最安全可靠的方式就是重新做系统,安装应用软件,导入数据库,配置参数

从你的描述来说, “很大,有数据库,有自己的user和group” ,我想用户和组应该是数据库中吧?导入了数据库,这些信息可以还原的,一般系统没有这么多用户和组

也有朋友说DD的方式,你很难搞到这么大的磁盘来回迁移的,而且DD过程中会消耗很长时间,中间你都不知道发生了什么事情,而且,如果此过程中有问题出来,就比较麻烦。

我们曾经也遇到这样的问题,而且更麻烦的是只有两台做群集的机器,系统与软件从一般版本升级到另外一个版本,也是通过重组系统,导入数据库,重新配置来完成的
作者: dengbao2001    时间: 2014-08-19 09:59
补充下,这么大项目,你应该需要多个团队来配合的,服务器的,数据库的,存储的,多个团队合作完成。当然,如果只有一个人,那就充分考虑风险
作者: bakgho    时间: 2014-08-19 11:31
Vm先p2v,后v2p能否行得通?大神解释一下。
作者: Panyway    时间: 2014-08-19 11:45
回复 14# Shell_HAT
是呀。。知道原理了就容易用脚本实现了,现在问题是那几个地方我不很清楚,所以来看下大家有没有好的想法。。

   
作者: Panyway    时间: 2014-08-19 11:58
回复 15# dengbao2001
多谢您的指教,不仅数据库有user和group,应用程序也有。。通常情况下安装加配置要好几天时间,我的想法就是将配置好的系统做成一个介质,以后要用直接用相应的脚本运行安装,这样虽然前期要投入一些effort,但后期省时省力。
我现在是先在内部做个测试版的,整个系统不大,不到200G,磁盘资源什么的都有,但主要是远程的方式,将压缩后的包相互传就可以。风险也不是问题,肯定是先调稳定了才开始使用。依我现在的知识感觉是不够用,所以来向大神咨询看有什么特别注意的。。


   
作者: phanx    时间: 2014-08-19 13:23
本帖最后由 phanx 于 2014-08-19 13:27 编辑

回复 19# Panyway


你的想法是可行的,但是有很多细节需要注意。  数据库什么的问题也不大,无非就是一些依赖库而已。
例如Oracle,首先确定源系统和目标系统是否一直,源系统在安装数据库库前安装的RPM包等,目标系统是否已经安装了,没有就用脚本装上。
然后用脚本创建Oracle相关的用户oracle、组oinstall,dba,oper 等
把ORACLE_BASE打包解压到目标系统后,执行
  1. cd /xxxxxxxxxxx/clone/bin
  2. su - oracle perl clone.pl ORACLE_HOME=/xxxxxxxxxx ORACLE_HOME_NAME=XXXXXXXX ORACLE_BASE=/yyyy -ignoreSysPrereqs
  3. /xxxxxxxxxxx/root.sh
复制代码
如果你目标系统和源系统版本不一致,那么还需要做relink

/xxxxxxxxxxx/bin/relink all


/xxxxxxxxxxx 代表 ORACLE_HOME 的路径, /yyyy 代表ORACLE_BASE路径

如果还提示执行什么脚本,就加到你的脚本执行步骤中。
这样Oracle就算安装好了。如果不涉及ASM的话就很简单了数据文件,参数文件,控制文件,Redo日志文件解压后已经按照原来目录放好了,
修改一下Listener的参数,库就可以起来了正常使用了。
应用的迁移一般比数据库更简单。无非就是创建用户,拷贝目录,修改配置文件。
作者: dengbao2001    时间: 2014-08-19 13:35
回复 19# Panyway


我记得Linux下面有类似GHOST的软件,可以考虑看看,不过你的描述只有200GB的数据,可能还好,如果达到了TB的级别,做成一个介质,可能代价非常大

你可以换位在通常熟悉的Windows下面思考,备份一个200G的磁盘不是太大的问题,但是一旦到了200TB,你从哪儿找这么大的介质出来

还有,做介质方面只能应付简单的迁移,如果系统跨版本的升级或者软件跨大版本升级,你还是的从头开始配置,目前来说,Linux下面的应用基本都是修改些配置文件+数据,熟悉如何配置,数据迁移都是小问题

另外一方面,生产环境下,更多考虑的是安全和可靠,然后尽可能节省时间

   
作者: Panyway    时间: 2014-08-19 14:59
回复 20# phanx
多谢大神指导,弱弱的问下,你说如果目标系统版本和源系统版本不一致,这个指什么版本?那个relink是要自己写吧,还有listener的参数要修改哪一部分?

我现在思路是这样子:
1、打包/oracle,打包应用程序部分文件,打包/home
2、切换到db user和应用程序user下执行env命令,将其结果纪录进EnvironmentVariable.txt,
3、自己写个precheck的脚本,主要在目标系统上检查一些基本的配置,如端口号是否占用,一些必须的内核参数是否合适之类的,在目标系统上运行
4、将第一步三个包传至目标系统,解压
5、创建对应的user和group
6、根据EnvironmentVariable.txt给每个user设置环境变量(这一步感觉有点麻烦,还没有很好的想法)
7、修改解压后文件的权限,owner和group,根据源系统创建链接文件
8、到user的shell下启动程序

你感觉哪一步有问题吗?多谢指导!
作者: Panyway    时间: 2014-08-19 15:07
回复 21# dengbao2001
嗯,ghost倒是很好的工具,不过如果是客户用他的OS都是固定的啊。。而且我们一般是远程操作。
前期系统上倒没多少数据,我想的是这个快速部署的思路,如果做好后应用能跑起来后期问题不大。
事实上升级比较麻烦,我直接从比较高的一个版本做迁移,这样弄好后就可以直接用了。虽然以后可能要再升级,但已经省了很多时间。

   
作者: phanx    时间: 2014-08-19 15:41
回复 22# Panyway

版本不一致指的是小版本差异。例如RHEL 6.3 和 RHEL6.5
relink是oracle目录bin下面的一个命令。 直接执行。
listner参数主要修改监听的主机名或者IP地址。

建议还是要执行 clone.pl   这样才能保证正确写入Oracle很多在系统的注册信息,例如 /etc/oracle 下面的和oraInventroy等。

用户的环境变量什么的,如果没有特殊的配置那么 用户home目录下的.bash_profile和.bashrc应该已经包含了。只要没有在/etc/bashrc和/etc/profile下面配置。
不需要再记录EnvironmentVariable.txt了。
作者: Panyway    时间: 2014-08-19 17:31
回复 24# phanx
好的,多谢,那个“在系统的注册信息”指什么,是类似widows下的注册表吗?印象中linux好像没这一类的,特定程序和操作只跟一些文件相关。除了oracle其他“在系统的注册信息”的程序常见吗?因为我还想试下db2,sybase的迁移。环境变量那个倒是很好的提示,env之后出来有几十个变量,回头查查是在哪个文件中定义的。

   
作者: Panyway    时间: 2014-08-19 18:08
回复 24# phanx
突然想到对数据库和应用程序user 密码的问题不好处理,把/home解压缩了user还得创建吧,这个指定他以前的密码应该没关系吧,

   
作者: phanx    时间: 2014-08-19 18:11
回复 25# Panyway


   都是文件,例如 /etc/oratab 一类的或者chkconfig的服务。  那个脚本会帮你自动设置一些基础信息。   DB2和Sybase 不太熟悉。
作者: phanx    时间: 2014-08-19 18:22
回复 26# Panyway


    没有问题,系统用户的密文可以从/etc/shadow读取。 DB2用户如果采用系统认证就是用到系统级的用户。Oracle的用户密码保存在数据库中,sys用户密码也在ORACLE_HOME里面,所以问题应该不大。
作者: action08    时间: 2014-08-19 18:24
感觉给线上环境做备份设计,还是蛮复杂的哈,

怎么从事操作工的干活都很简单轻松的样子呢??
作者: Panyway    时间: 2014-08-19 19:00
回复 28# phanx
嗯,那就好,我也感觉要是把/etc/shadow也copy了不太靠谱,还是再创建user password重新生成shadow文件比较好。回去试验下,中间有问题了再想办法解决,多谢先生指导了哈!

   
作者: Panyway    时间: 2014-08-19 19:05
回复 29# action08
这不是备份设计,我想的是安装一次,到处运行。
即使是操作工想给工作提高效率有时也不那么容易吧

   
作者: hexilanlan    时间: 2014-08-19 19:58
顶。。。。。。。。。。。
作者: hexilanlan    时间: 2014-08-19 19:58
顶。。。。。。。。。。。   
作者: phanx    时间: 2014-08-19 20:46
回复 30# Panyway


    不是copy整个shadow文件,而是应该读出shadow文件的内容,在目标系统上用useradd命令创建好对应用户后,覆盖目标系统上shadow文件对应用户的密码字段就好了。
这样就可以保证源系统和目标系统用户和口令一致。 因为有些场景有可能没有用户密码的明文,例如用户已经被4A系统接管的情况。
作者: Panyway    时间: 2014-08-19 21:47
回复 34# phanx
嗯,我说的就是这个意思,我回去多试试,先生真是好厉害。。。

   
作者: action08    时间: 2014-08-20 01:44
不管什么工作,做好都不容易
作者: Panyway    时间: 2014-08-27 17:44
回复 34# phanx
经过几天尝试,证明应该是可以的,数据库可以正常启了,但应用系统还有点问题,应该是里面配置文件太多了我没有把hostname完全改过来,这个再努力下应该比较好解决。通过这个过程我又学了很多新东西,总之多谢先生指教!

   
作者: phanx    时间: 2014-08-27 17:48
回复 37# Panyway


    不客气,你的思路是正确的,很多事情做之前如果了解了其原理那么做起来就自然有底气了。
    并且,你尝试将重复性的劳动用自动化来代替也是很好的做法。 可惜大部分人只会墨守成规、按部就班。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2