ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Linux服务器部署实战:Xmanager环境下安装Oracle 11g与Tomcat 8全流程

Linux服务器部署实战:Xmanager环境下安装Oracle 11g与Tomcat 8全流程 我有个老项目要部署一套业务系统环境是CentOS 7.6数据库选的Oracle 11g中间件用的Tomcat 8客户端机器是Windows。远程操作我直接用了Xmanager全家桶里的Xshell和Xstart这套流程从头到尾跑了三遍把踩过的坑都补齐了今天把这套全流程操作步骤整理出来。如果你也在折腾Linux服务器上装Oracle 11g和Tomcat这篇东西应该能帮你少走很多弯路。先说下为什么要用Xmanager来做安装操作。Oracle 11g的安装程序是图形界面虽然理论上可以用静默模式装但生产环境里你基本没法保证每台机器的参数都一样跑图形界面能看到实际校验信息出问题了也方便现场排查。而CentOS 7服务器大多是无桌面环境或者远程机房直接在服务器上操作图形界面并不现实Xmanager恰好解决了这个问题它能把服务端的图形界面重定向到你的Windows屏幕上。Xmanager全家桶里面我主要用两个组件Xshell负责SSH命令行操作Xstart负责把图形界面程序拉到本地显示。这套组合比直接用VNC轻量不少不用在服务器上装额外的桌面组件安全性也好一些毕竟走的是加密通道。1. 环境准备与初始配置1.1 服务器基础环境检查我拿到手的服务器是CentOS 7.6内存16G四核CPU磁盘200G。Oracle 11g在CentOS 7上跑对资源要求不算特别苛刻但有几个底线必须确认清楚。内存方面至少2G以上推荐4G起步swap分区建议至少2G生产环境最好配到内存的1.5倍。我见过有人用1G内存装Oracle 11g结果安装界面卡得跟幻灯片一样最后装到一半直接OOM崩溃。磁盘看情况Oracle软件本体加数据库文件至少要留出30G空间再加上Tomcat和业务系统的部署包40G起步比较稳妥。系统架构必须是64位这个不用多解释Oracle 11g对32位系统的支持早就不行了。操作系统版本最好选CentOS 7.6到7.9之间的版本太老的内核跟Oracle 11g的兼容性有问题太新又可能触发奇怪的库冲突。还要检查主机名和网络配置。主机名别用带下划线的Oracle的安装程序对主机名要求比较严格下划线这种字符可能导致监听器起不来。我在某台测试机上就吃过这个亏主机名设成prod_db_01结果netca配置监听时直接报错改回prod-db-01就正常了。1.2 Xmanager连接配置Xmanager连接服务器前我习惯先确认SSH端口通不通。CentOS 7默认开22端口用Xshell连接时填上IP和端口就能进。如果改了SSH端口记得在Xshell的会话属性里同步修改。Xstart的配置相对复杂一些这是很多新手容易卡住的地方。Xstart通过SSH协议连到服务器后它会执行你指定的命令并把图形输出重定向到本地显示。具体配置方法是这样的在Xmanager中新建一个Xstart会话协议选SSH主机填服务器IP用户名填root认证方式选密码或者密钥都行。最关键的是命令这一栏要填入你要执行的图形程序。比如装Oracle时命令填xhost 和 export DISPLAY:0.0 是不对的这些是本地显示用的Xstart会自动处理DISPLAY变量。直接填你要运行的程序路径即可比如/opt/oracle/database/runInstaller。如果只是想测试图形界面是否通了可以先跑/usr/bin/xterm能弹出终端窗口就说明Xstart链路通畅。Xstart还有一个需要注意的地方就是命令执行时要保持会话不退出。很多人配置完命令后程序启动起来Xstart窗口就关掉了结果图形界面跟着消失。实际上Xstart会持续维持这个会话让图形程序一直驻留在远程服务器上本地窗口只是负责显示关掉本地窗口程序不会中断。1.3 系统初始化与依赖包安装CentOS 7默认安装比较精简Oracle 11g需要的依赖包和库文件有很多没装所以系统准备阶段要先把这些补齐。我这里列一下我实际用到的包清单yum install -y binutils compat-libcap1 compat-libstdc-33 compat-libstdc-33.i686 \ elfutils-libelf elfutils-libelf-devel gcc gcc-c glibc glibc.i686 glibc-devel glibc-devel.i686 \ ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc libstdc.i686 \ libstdc-devel libXi libXi.i686 libXtst libXtst.i686 make sysstat unixODBC unixODBC-devel这里有个容易踩的坑compat-libstdc-33这个包在CentOS 7的默认yum源里其实没有如果你用默认源直接装会报找不到包。解决办法是安装EPEL源或者从CentOS 6的安装光盘中提取这个rpm包手动装。EPEL源装起来很简单yum install -y epel-release yum clean all yum makecache然后再执行上面的依赖包安装命令。有些老依赖包在当前yum源中找不到也没关系我后来测试发现Oracle 11g的安装程序在缺失某些兼容库时不会直接中止但会在后续启动监听器或者实例时暴露出问题。所以宁可一次装齐也别等到装完再折腾。另外还要确认libaio和libaio-devel这两个包没装的话Oracle数据库创建实例时会有rpm校验警告虽然可以跳过但会导致后续调用某些API报错。手动处理起来很麻烦所以还是老老实实装好。2. Oracle 11g安装前的系统调优2.1 内核参数调整Oracle官方文档要求修改/etc/sysctl.conf文件来调整内核参数。这里说的参数直接决定了Oracle数据库能否正常启动和分配足够的内存所以不能只盯着安装步骤这步得确保数值和你实际机器配置匹配才行。我用的参数配置如下fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 2097152 kernel.shmmax 4294967295 kernel.shmmni 4096 kernel.sem 250 32000 100 128 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576配置完成后执行sysctl -p使其生效。如果你服务器物理内存特别大比如32Gkernel.shmmax建议设成物理内存的一半左右。这个参数控制的是共享内存段的最大大小Oracle SGA在启动时会尝试申请一个或者多个共享内存段如果shmmax太小Oracle只能创建多个共享内存段来凑够SGA大小性能会有明显下降。还有一个参数容易忘记就是kernel.sem的四段含义。250是每个信号量集合的最大信号量数32000是系统范围内最大信号量数100是每个信号量集合的最大操作数128是系统范围内最大信号量集合数。Oracle安装程序在环境检查时会校验这些值不达标会直接打红叉。2.2 用户与目录规划Oracle 11g不允许直接用root用户安装必须创建专属用户和用户组。我按官方最佳实践创建了oinstall组和dba组oracle用户的主组设为oinstall附加组设为dba。这样做的好处是后续备份、恢复、安装补丁时权限管理清晰不容易出现DBA组权限不足的问题。创建命令如下groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle目录结构方面我习惯把Oracle的软件安装目录和数据目录分开。软件目录放在/u01/app/oracle数据目录放在/u02/oradata或者直接用Oracle默认的/u01/app/oracle/oradata。如果你服务器上就一块磁盘那放在一起问题不大但如果有独立的数据盘强烈建议把数据目录指到独立磁盘上对IO性能和故障隔离都有好处。目录权限记得要改成oracle用户有权限访问mkdir -p /u01/app/oracle mkdir -p /u02/oradata chown -R oracle:oinstall /u01 chown -R oracle:oinstall /u02 chmod -R 775 /u01 chmod -R 775 /u02这里有个细节目录的属主最好设置成oracle用户不要用root。我试过一次用root创建目录没改属主就直接装Oracle等Oracle的安装程序往里写文件时才提示权限不足又回头改权限白白浪费了十几分钟。2.3 安全级别与防火墙调整CentOS 7默认开了firewalld如果这个防火墙没放行Oracle需要的端口即使Oracle本身装好了远程客户端也连不上数据库。Oracle 11g默认的监听端口是1521Tomcat默认端口是8080这两个都要在防火墙里放行。操作命令firewall-cmd --zonepublic --add-port1521/tcp --permanent firewall-cmd --zonepublic --add-port8080/tcp --permanent firewall-cmd --reload如果嫌麻烦也可以直接把防火墙停掉生产环境建议还是用白名单方式放行特定IP访问。另外还要注意SELinux的影响CentOS 7的SELinux默认是enforcing模式Oracle的安装文档里并没有要求一定关闭SELinux但实际安装过程中我发现SELinux会对Oracle的某些文件访问权限做限制尤其是监听器启动时绑定端口那一步。为了避免不必要的麻烦我统一把SELinux设成了permissive模式sed -i s/SELINUXenforcing/SELINUXpermissive/g /etc/selinux/config setenforce 0注意setenforce 0只是临时关闭当前内核的SELinux重启后还是会变成enforcing所以必须同步修改配置文件。3. Oracle 11g安装全流程走通3.1 安装介质准备与解压Oracle 11g的安装包分两个zip文件一个是linux.x64_11gR2_database_1of2.zip另一个是linux.x64_11gR2_database_2of2.zip。下载好之后传到服务器的某个临时目录下比如/home/oracle/db_install。解压必须用oracle用户身份解压否则解压出来的文件属主会变成root后面Oracle安装程序会有文件权限校验很可能会被卡住。解压命令su - oracle mkdir -p /home/oracle/db_install cd /home/oracle/db_install unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip解压完会在当前目录下生成一个database目录里面就是全套安装程序。解压时如果提示某个zip文件损坏大概率是传输过程中出了问题重新传一遍就能解决不需要重新下载整个包。3.2 通过Xstart启动图形化安装装好系统依赖、配置好用户和内核参数之后重头戏来了用Xstart启动Oracle的安装程序。打开Xmanager的Xstart工具填写如下信息主机服务器IP地址协议SSH用户名oracle认证密码方式命令/home/oracle/db_install/database/runInstaller初次点击执行按钮后Xstart会弹出一个日志窗口显示SSH连接的建立过程和DISPLAY环境变量的设置情况。过几秒钟Windows桌面就会弹出Oracle Universal Installer的图形界面看到这个界面就是成功了。这个环节有个最常见的坑就是点了Xstart后报错提示无法打开DISPLAY或者连接不上X server。原因往往是服务器上的X11转发依赖包没装。CentOS 7的SSHd配置文件里X11Forwarding默认是启用的但如果没有xorg-x11-xauth这个包转发链路就会断掉。解决方法是yum install -y xorg-x11-xauth装完之后重新用Xstart执行命令基本上就正常了。如果Xstart启动图形界面过程中弹出了java异常窗口这多半是因为CentOS 7自带的OpenJDK版本跟Oracle安装程序不兼容。解决思路是在启动runInstaller之前先卸载系统自带的OpenJDK或者设置JAVA_HOME指向Oracle安装包自带的JDK。Oracle 11g的安装程序里其实自带了jdk目录不需要额外装Java直接设置环境变量JAVA_HOME指向database目录下的jdk即可。3.3 图形界面中的安装选项配置Oracle Universal Installer启动后第一步是配置安全更新和接收邮件通知这里直接取消勾选即可。接下来会让你选择安装类型我一般选创建和配置单实例数据库这样装完后数据库实例就直接创建好了省得再单独运行DBCA建库。高级安装模式比典型安装多几个自定义步骤比如字符集、内存分配、存储路径、ASM等选项。首次安装建议走高级模式可以提前指定很多关键参数省得装完后又要改配置。关键是字符集我选的是AL32UTF8这个字符集支持中文存储和各种语言如果业务系统只跑中文用ZHS16GBK也行但我个人更推荐UTF8兼容性更好也方便后续数据迁移。内存分配这里需要注意Oracle 11g的自动内存管理AMM功能默认是开启的如果你设置的SGA和PGA总和超过了实际物理内存数据库实例可能在启动时直接失败。我这里内存16G给Oracle分配了SGA 4GPGA 2G这个比例够用。如果你服务器内存小SGA给2GPGA给1G也能跑。重要的是给操作系统留够余量别把内存全部分完。数据库身份验证那里设置的是SYS和SYSTEM用户的密码这个密码要记好建议用大小写字母加数字组成的强密码。Oracle 11g对密码复杂度默认有校验太简单的密码比如oracle123这种可以直接过但类似123456这种纯数字的会提示太弱无法通过。3.4 安装过程中的组校验与脚本执行安装过程中有个环节会卡住不少人就是在指定Oracle用户属组的时候安装程序会自动检测oinstall组和dba组是否存在并显示绿色对勾或黄色警告。如果警告提示找不到dba组说明之前的groupadd没有成功回头执行groups oracle命令确认一下如果没有dba附加组用usermod -G dba oracle补上。安装进行到70%左右时会弹出一个窗口要求以root身份执行两个脚本一个是orainstRoot.sh另一个是root.sh。这一步很多人会疑惑到底要不要执行答案是必须执行而且要等脚本跑完才能点确定继续。操作方式是另开一个Xshell窗口用root登录服务器依次执行/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.shroot.sh执行时会有交互提示问你是否把oracle用户加到dba组直接填y回车就行。整个root.sh脚本执行过程会创建一些系统级别的目录和启动脚本确保Oracle监听和数据库随系统自动启动的脚本能正常运行。这里要特别说一下root.sh脚本的输出信息绿色文本显示的是脚本创建的关键目录和文件红色文本一般是警告或者错误。我遇到过root.sh执行时报错说不能写/etc/oratab原因就是/etc目录空间满了清理掉一些无用的日志文件后重新执行就好了。3.5 修改环境变量与验证安装结果Oracle安装完最后一件事是配置oracle用户的环境变量。编辑/home/oracle/.bash_profile文件加入以下内容export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SIDorcl export PATH$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH$ORACLE_HOME/lib保存后执行source .bash_profile使其生效。然后运行sqlplus / as sysdba进入SQL*Plus执行select status from v$instance;看到OPEN状态就说明数据库实例正常起来了。监听器状态可以通过lsnrctl status命令查看正常会显示服务orcl已有1个实例处理程序。如果监听没启动用lsnrctl start手动拉起之后可以检查1521端口是否出现在LISTEN状态。4. Tomcat 8安装与部署4.1 JDK环境配置Tomcat是Java应用服务器依赖JDK运行。Oracle 11g安装过程会自带一个JDK但这个JDK版本比较老不建议直接拿给Tomcat用。我这边是单独安装了OpenJDK 1.8Tomcat 8.5对JDK版本要求是1.8及以上。安装JDK的方式有很多种最简单就是用yum装yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel装完后执行java -version确认版本然后设置JAVA_HOME。一般OpenJDK装完路径在/usr/lib/jvm/java-1.8.0-openjdk把这个路径写进/etc/profile里export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk export PATH$PATH:$JAVA_HOME/bin export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile后执行echo $JAVA_HOME验证环境变量是否生效。这里有个容易出现的问题如果服务器上同时装了多个Java版本要注意PATH的优先级确保指向1.8这个版本。4.2 Tomcat解压与目录规划Tomcat的安装方式非常直接下载apache-tomcat-8.5.x.tar.gz包解压到指定目录就行。我习惯放在/opt/tomcat下面结构清晰备份也方便。下载和安装命令mkdir -p /opt/tomcat tar -zxvf apache-tomcat-8.5.100.tar.gz -C /opt/tomcat --strip-components1 chmod x /opt/tomcat/bin/*.sh这里用到--strip-components1参数意思是解压时去掉包内最顶层目录名直接解压到/opt/tomcat下。如果不加这个参数文件会被解压到/opt/tomcat/apache-tomcat-8.5.100目录下还要多一层目录嵌套看起来很别扭。Tomcat目录结构里bin目录存放启动关闭脚本conf目录存放配置文件webapps目录是部署Web应用的位置。下面重点看几个配置文件因为如果配置有问题项目部署上去跑不起来排查很浪费时间。4.3 Tomcat核心配置调整首先是conf/server.xml这是Tomcat的主配置文件。要关注三块内容。端口监听配置默认8080如果项目有特殊要求可以改成其他端口但要和防火墙放行规则保持一致。连接器参数主要调整maxThreads和minSpareThreads这两个参数控制Tomcat的线程池大小。我没改动线程池但要注意的是connectionTimeout别设置太短否则上传大文件时容易被掐断连接。然后是conf/catalina.sh的配置JAVA_OPTS环境变量在这里设置。内存优化的参数如下JAVA_OPTS-Xms512m -Xmx1024m -XX:MaxPermSize256m如果是JDK 1.8MaxPermSize参数已经没有意义了JVM用Metaspace代替了永久代所以可以去掉这个参数。推荐配置JAVA_OPTS-server -Xms512m -Xmx2048m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m这里-Xms和-Xmx建议设成相同值可以避免JVM在运行过程中动态调整堆大小带来的性能抖动。-XX:MetaspaceSize和MaxMetaspaceSize也是同理直接设成一致能减少Full GC频率。最后是部署业务系统WAR包的方式。有两种一种是直接把WAR包扔到webapps目录下Tomcat启动时自动解压并部署另一种是在conf/Catalina/localhost目录下创建XML配置文件通过docBase指定WAR包的绝对路径。生产环境我推荐用第二种好处是部署路径可以在外部灵活控制不用把业务包混在Tomcat默认目录结构里同时方便多个应用独立管理。4.4 Tomcat开机自启动配置为了让Tomcat在服务器重启后自动启动我写了一个systemd服务脚本。创建/usr/lib/systemd/system/tomcat.service文件内容如下[Unit] DescriptionApache Tomcat Web Application Container Afternetwork.target [Service] Typeforking EnvironmentJAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk EnvironmentCATALINA_HOME/opt/tomcat EnvironmentCATALINA_BASE/opt/tomcat ExecStart/opt/tomcat/bin/startup.sh ExecStop/opt/tomcat/bin/shutdown.sh Userroot Grouproot Restartalways [Install] WantedBymulti-user.target保存后依次执行以下命令设置开机自启并立即验证systemctl daemon-reload systemctl enable tomcat.service systemctl start tomcat.service systemctl status tomcat.service注意Typeforking这个配置很关键startup.sh脚本启动Tomcat后会立即返回真正的Tomcat进程以子进程方式在后台运行所以必须用Typeforking来告诉systemd这是forking类型服务否则systemd会认为启动脚本执行完就退出了不会持续追踪Tomcat进程。上面Userroot是图方便才设置成root生产环境建议单独创建一个tomcat用户来跑Tomcat进程这样可以实现权限隔离即使Tomcat被攻破了攻击者拿到的也只是tomcat用户权限对系统整体危害会小很多。4.5 验证Tomcat与业务系统联调Tomcat部署完成后通过浏览器访问http://服务器IP:8080看到Tomcat默认首页就说明Tomcat本身跑起来了。如果页面打不开排查顺序是第一看systemctl status tomcat服务状态是否active第二看8080端口有没有LISTEN第三看防火墙放行了没有最后看SELinux有没有拦把SELinux设置成permissive模式可以排除这个因素的影响。业务系统WAR包部署后如果应用依赖Oracle数据库需要把Oracle JDBC驱动包ojdbc6.jar放到Tomcat的lib目录下。Tomcat 8.5对驱动包的管理有讲究全局共享的驱动放在lib目录单个应用独享的驱动放在webapps/WEB-INF/lib目录。如果驱动版本不对最常见的报错是ClassNotFoundException或者SQLState异常解决办法就是到Maven仓库里下载对应版本的ojdbc6.jar替换。部署完WAR包后重启Tomcatsystemctl restart tomcat.service观察日志输出tail -f /opt/tomcat/logs/catalina.out启动日志中看到Deployment of web application archive has finished说明业务系统部署成功。再配合数据库监听状态确认整条链路就通了。5. 常见问题与排查技巧实录5.1 Xstart无法显示图形界面Xstart连接服务器后报错提示Cant connect to X11 window server这是最典型的图形界面转发问题。排查步骤是确认服务器上是否安装了xorg-x11-xauth包没有就装上。确认SSH服务端的X11Forwarding设置为yes确认/etc/ssh/sshd_config配置中有X11UseLocalhost yes这个参数。真正处理这个坑时我发现还有个更隐蔽的问题就是Xstart的配置文件里指定了错误的SSH端口或者密钥认证方式。如果服务器改了SSH端口Xstart里也要同步修改。还有如果服务器上配置了SSH key并且禁用了密码登录Xstart认证方式要改成Public Key并把本地私钥路径填进去。另一个少见但特别麻烦的问题是CentOS 7.5及以上版本默认的/etc/ssh/sshd_config里X11Forwarding被注释掉了需要手动取消注释并重启sshd服务。重启sshd前要注意会不会影响已有的SSH连接其实不会重启sshd服务对已建立的连接没有影响只对新的连接生效。5.2 Oracle安装程序环境检查不通过Oracle Universal Installer在正式安装前会做环境预检经常见到某个检查项是红色的叉号。比如内核参数中的kernel.sem不满足要求、依赖包缺失、内存大小不满足最小限制等等。出现红叉不要直接点忽略因为后续安装或者运行时还会暴露问题。回顾我安装过程中预检不通过的情况大部分是缺少32位兼容库比如glibc.i686和libaio.i686。Oracle 11g虽然是64位版本但它的某些组件会调用32位库不装好直接装Oracle后面创建数据库时容易报ORA-12547错误。等价交换的话如果你对依赖包没底可以在预检失败后点Check Another然后查看对应的日志文件。日志文件通常放在/tmp目录下文件名带OraInstall前缀打开后可以看到具体的检查结果和缺失项比官方界面弹窗提示的粒度细得多。5.3 Oracle监听器起不来Listener启动失败也是高发问题常见的情况是监听器已启动但状态显示unknown或service not registered。最直接的原因是listener.ora文件配置错误监听的位置写错了端口或者主机IP。用netca重新配置监听是最省事的办法命令行输入netca根据图形界面提示一步步操作就行。还有种情况是Oracle数据库实例没有注册到监听器导致客户端连接时报ORA-12514: TNS listener does not currently know of service requested in connect descriptor。解决办法是检查listener.ora里是否配置了静态的SID信息或者在数据库本地通过sqlplus执行alter system register;手动注册实例到监听器。动态注册是Oracle 11g的默认机制实例启动时会自动向监听器注册但前提是实例的service_name和监听器的监听端口匹配。如果不匹配就要修改initSID.ora里的local_listener参数指定正确的监听器地址。5.4 端口冲突排查端口冲突这个坑在Tomcat启动时特别常见。Tomcat默认8080端口如果服务器上已经部署了其他Web服务比如Nginx、Apache或者另一个Tomcat实例端口就会被占用Tomcat启动报Address already in use错误。排查命令很简单ss -tlnp | grep 8080 netstat -tlnp | grep 8080找到占用端口的进程后要么把占用进程停掉要么修改Tomcat的server.xml端口配置换一个可用端口。提醒一下如果Tomcat作为自启动服务端口修改后要确认配置文件里没有其他地方写死监听端口否则Tomcat会加载旧配置导致端口冲突问题复发。Oracle 1521端口也有类似问题如果服务器上装了多个版本的Oracle或者监听器配置错误都会导致端口冲突。通过lsnrctl status查看监听的IP和端口确认没有和其他服务重叠。5.5 中文显示乱码问题我遇到过一次Oracle数据库中的数据是中文但通过Java应用查询出来是问号的情况。原因是数据库的字符集和JDBC连接字符串中的字符集不一致。解决办法是把数据库字符集改成AL32UTF8同时JDBC连接URL加上characterEncodingUTF-8参数。还有一个可能是Tomcat连接器配置里添加URIEncodingUTF-8。记住改数据库字符集不是改一个参数就能完成的事情要修改数据库的locale、nls_lang环境变量、以及数据库的national character set。如果是在建库之前就发现这个问题直接在建库时选对字符集最省事建库之后再改会牵扯数据迁移工作量翻倍。6. 运维踩坑经验总结装完这套环境后我复盘了一遍整个流程有些心得值得单独拎出来说。第一个经验是Oracle安装目录和数据目录尽量独立规划不要什么都扔在根分区。我的服务器根分区50GOracle安装加数据文件很快就占了一半后来日志一膨胀直接导致根分区满了Oracle和Tomcat同时罢工。应急办法是清理日志文件但要想根治还是得把Oracle数据目录、归档日志目录、Tomcat日志目录都单独挂载到独立分区用df -h提前确认各分区容量留有足够余量。第二个经验是Oracle的数据库备份不能只依赖数据库自身的物理备份需要结合逻辑备份。物理备份适合灾难恢复逻辑备份适合数据迁移和误操作恢复。我自己就是用RMAN做物理备份每周跑一次expdp逻辑导出双保险机制。一旦数据库崩溃RMAN恢复整库万一只是某个表被误删expdp的dmp文件恢复起来更灵活。第三个经验是Tomcat的日志轮转必须配置好。默认情况下Tomcat的catalina.out日志是不滚动切割的时间一长能膨胀到几十G服务器磁盘会被吃光。解决方案是用Linux自带的logrotate工具配置/etc/logrotate.d/tomcat按天切割并压缩保留最近30天日志就够。这个配置特别重要我见过有生产服务器一个月没看日志直接占用30G磁盘应用直接因为磁盘满宕机。第四个经验是关于安全的尤其是生产环境千万别为了方便直接关防火墙和将SELinux设成disabled。我建议防火墙按需放行端口SELinux设成permissive并仔细查看日志中的违规记录手动放行Oracle和Tomcat需要的操作。这样既不影响功能又保留了一层安全防线。第五个经验是快照备份。装这套系统前我给服务器做了个快照后面所有踩坑操作都能一键回滚。如果别的环境没法做快照至少把修改过的配置文件提前复制一份到/tmp/backup目录下出了问题还能对照原始版本恢复。这套环境我前后折腾了三次才走通所有细节前面两次就是没有快照每次配置改乱了都只能从头再来。第六个经验也是最重要的就是不要盲目复制别人给的参数值。服务器配置不同内存、CPU、磁盘完全一样才能直接用别人的配置。比如kernel.shmmax这个参数机器内存是4G的话设成4294967295就太大了反而可能导致Oracle的共享内存申请不到系统整体性能下降。根据实际硬件资源配参数才是正路。这套环境装好之后业务系统在Tomcat里跑着数据落在Oracle里稳定运行了一段时间没有出过重启问题。后续如果需要扩容无外乎加内存、加磁盘、调Tomcat线程池、加Oracle SGA这些都是同样的思路方法论已经通了。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表