最近遇到很多 RHEL 5.X 平台安装 10G RAC的活,虽然没什么难度,但是重复的体力劳动还是比较大的。因此顺便整理了一份半自动安装的脚本。
主要完成操作系统补丁安装,数据库用户创建,用户配置文件修改等内容。
待解决的问题:
1、主机名自动配置,这块需要单独的配置文件,而且配置过程中,和主机名相关的配置不是很多;
2、共享磁盘多路径配置,因为使用裸设备和UDEV的方式不一,存储隐射出来的结果有些在/dev/mapper,有些在/dev/sd*,磁盘大小和顺序也不一致,因此没有做处理;
3、shell不熟,没有加入校验和控制;
4、ssh认证配置,使用的是11g rac中的自动配置脚本;
具体内容如下:RAC_AUTO_CONFIG_10G.sh
#!/bin/bash
###################################################################################
## 本文档针对 Red Hat Enterprise Linux Server release 5.X 极其兼容内核 进行 10G RAC 部署的操作
## 0. 环境信息检查
## 1. 关闭多余的服务,提高操作系统性能和安全性
## 2. 配置远程图形界面(Xmanager或VNC)
## 3. 配置本地YUM源,安装操作系统补丁包
## 4. 修改操作系统内核参数
## 5. 配置共享存储
## 6. 创建 oracle 用户及安装目录
## 7. 重启操作系统进行修改验证
## 8. 执行 CRS 安装
## 9. 安装 CRS 10.2.0.5 补丁
## 10. 执行数据库安装
## 11. 安装数据库 10.2.0.5 补丁
## 12. 安装 PSU 补丁
## 13. 手工建库
## 14. 参数调整
###################################################################################
###################################################################################
## 0. 环境信息检查
###################################################################################
echo "###################################################################################"
echo "0. 环境信息检查"
echo
echo "memory info"
grep MemTotal /proc/meminfo
echo
echo
echo "swap info"
grep SwapTotal /proc/meminfo
echo
echo
echo "tmp info"
df -h /tmp
echo
echo
echo "disk info"
df -h
echo
echo
echo "cpu info"
grep "model name" /proc/cpuinfo
echo
echo
echo "kernel info"
uname -a
echo
echo
echo "release info"
more /etc/redhat-release
RELEASE=`more /etc/redhat-release | awk '{print $1}'`
echo "###################################################################################"
echo
echo
echo
###################################################################################
## 1. 关闭多余的服务,提高操作系统性能和安全性
## 根据环境及需要自定义
###################################################################################
echo "###################################################################################"
echo "1. 关闭多余的服务,提高操作系统性能和安全性"
echo
chkconfig --level 345 bluetooth off
chkconfig --level 345 cups off
chkconfig --level 345 ip6tables off
chkconfig --level 345 iptables off
chkconfig --level 345 sendmail off
echo
echo
echo "turn off selinux"
SELINUX=`grep ^SELINUX= /etc/selinux/config`
if [ $SELINUX != "SELINUX=disabled" ];then
cp /etc/selinux/config /etc/selinux/config.bak
sed -i 's/^SELINUX=/#SELINUX=/g' /etc/selinux/config
sed -i '$a SELINUX=disabled' /etc/selinux/config
else
echo "SELINUX is already disabled"
fi
echo
echo "###################################################################################"
echo
echo
echo
###################################################################################
## 2. 配置远程图形界面(Xmanager或VNC)
## 根据环境不同,需要进行手工配置,建议使用 Xmanager - Passive 或 VNC 方式
###################################################################################
## | 2.1 通过 xshell 方式登录
## | 打开 Xmanager - Passive 工具, 使用 Xshell 连接远程服务器
##
## | #export DISPLAY=客户端IP:0.0
## | #xclock
###################################################################################
## 3. 配置本地YUM源,安装操作系统补丁包
###################################################################################
echo "###################################################################################"
echo "3. 配置本地YUM源,安装操作系统补丁包"
echo
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
cd /etc/yum.repos.d/
mkdir bak
mv *.repo ./bak/
touch local.repo
# 注意RHEL和CENTOS的YUM配置方式有所不同,根据操作系统进行对应调整
# --RHEL
# [RHEL]
# name = RHEL
# baseurl=file:///media/cdrom/Server/
# gpgcheck=0
# enabled=1
#
# --CENTOS
# [CENTOS]
# name = CENTOS
# baseurl=file:///media/cdrom/
# gpgcheck=0
# enabled=1
cat >> local.repo << "EOF"
[LOCAL]
name=LOCAL
gpgcheck=0
enabled=1
EOF
echo
if [ $RELEASE = "CentOS" ];then
sed -i '$a baseurl=file:\/\/\/media\/cdrom\/' local.repo
else
sed -i '$a baseurl=file:\/\/\/media\/cdrom\/Server\/' local.repo
fi
echo
echo "install package"
yum install -y binutils compat-db compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-296 compat-libstdc++-33 control-center elfutils-libelf-devel gcc gcc-c++ gdb gdbm glibc glibc-common glibc-devel glibc-headers libgomp libstdc++-devel ksh libaio libaio-devel libgcc libgnome libstdc++ libstdc++-devel libXp libXtst make openmotif setarch sysstat unixODBC unixODBC-devel util-linux xorg-x11-xinit
yum install -y compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-33 compat-libstdc++-296 gcc gcc-c++ glibc-devel glibc-headers glibc libgomp libaio.i386 libgcc.i386 libstdc++-devel libXp libXtst openssl sysstat
echo "finish package install"
echo
echo
echo "check package info"
rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils compat-db compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-33 compat-libstdc++-296 compat-libstdc++-33 control-center elfutils-libelf-devel gcc gcc-c++ gdb gdbm glibc glibc-common glibc-devel glibc-headers libgomp libstdc++-devel ksh libaio libaio-devel libgcc libgnome libgnomeui libgomp libstdc++ libstdc++-devel libXp libXtst make openmotif setarch sysstat unixODBC unixODBC-devel util-linux xorg-x11-xinit | grep "not installed"
echo
echo "###################################################################################"
echo
echo
echo
###################################################################################
## 4. 修改操作系统内核参数
###################################################################################
echo "###################################################################################"
echo "4. 修改操作系统内核参数"
echo
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat >> /etc/sysctl.conf << "EOF"
###################################################################################
# change for oracle install
fs.file-max = 6815744
fs.aio-max-nr = 3145728
kernel.msgmni = 2878
kernel.msgmax = 8192
kernel.msgmnb = 65536
kernel.sem = 250 32000 100 142
kernel.shmmax=34359738368
kernel.shmmni=4096
kernel.shmall=16777216
#vm.nr_hugepages=16384
#kernel.sysrq = 1
net.core.rmem_default = 1048576
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
net.ipv4.tcp_rmem=4096 262144 4194304
net.ipv4.tcp_wmem=4096 262144 262144
net.ipv4.ip_local_port_range = 1024 65500
net.ipv4.tcp_keepalive_time=30
net.ipv4.tcp_keepalive_intvl=60
net.ipv4.tcp_keepalive_probes=9
net.ipv4.tcp_retries2=3
net.ipv4.tcp_syn_retries=2
vm.min_free_kbytes = 51200
vm.swappiness=20
vm.dirty_background_ratio=3
vm.dirty_ratio=15
vm.dirty_expire_centisecs=500
vm.dirty_writeback_centisecs=100
EOF
echo
echo
echo "make kernel change take effect"
/sbin/sysctl -p
echo
echo
echo "add hangcheck-timer mode"
cp /etc/modprobe.conf /etc/modprobe.conf.bak
cat >> /etc/modprobe.conf << "EOF"
options hangcheck-timer hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1
EOF
echo
echo
/sbin/modprobe -v hangcheck-timer
echo
echo
modprobe -l | grep -i hang
echo "###################################################################################"
echo
echo
echo
###################################################################################
## 5. 配置共享存储
## 需要手工完成,通过脚本查看磁盘的scsi_id信息和分区大小
###################################################################################
# # vi diskinfo.sh
# > diskinfo.tmp
#
# for i in a b c d e f g h i j k l m n o p q r s t u v w x y z;
# do
# diskinfo=`fdisk -l /dev/sd$i | grep "Disk /dev/sd$i"`
# echo 'scsi_id:' `scsi_id -gus /block/sd$i` $diskinfo | awk -F',' '{print $1}' >> diskinfo.tmp
# done
#
# sort diskinfo.tmp > diskinfo.rs
# more diskinfo.rs
# rm -f diskinfo.tmp
###################################################################################
## 6. 创建 oracle 用户及安装目录
###################################################################################
echo "###################################################################################"
echo "6. 创建 oracle 用户及安装目录"
echo
echo "创建oracle用户及组"
/usr/sbin/groupadd -g 500 oinstall
/usr/sbin/groupadd -g 501 dba
/usr/sbin/useradd -u 500 -g oinstall -G dba oracle
echo oracle | passwd --stdin oracle
echo
echo "创建oracle安装目录"
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
echo
echo "修改oracle用户会话限制"
cp /etc/security/limits.conf /etc/security/limits.conf.bak
cat >> /etc/security/limits.conf << "EOF"
#########################################
#add for oracle
oraclesoftnofile131072
oraclehardnofile131072
oraclesoftnproc131072
oraclehardnproc131072
oraclesoftcoreunlimited
oraclehardcoreunlimited
oraclesoftmemlock50000000
oraclehardmemlock50000000
EOF
echo
echo
cp /etc/pam.d/login /etc/pam.d/login.bak
cat >> /etc/pam.d/login << "EOF"
##############################################
#add for oracle
session required pam_limits.so
EOF
echo
echo
echo "修改oracle用户资源限制"
cp /etc/profile /etc/profile.bak
cat >> /etc/profile << "EOF"
#########################################
#add for oracle
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
echo
echo
echo "编辑oracle用户环境变量"
cp /home/oracle/.bash_profile /home/oracle/.bash_profile.bak
cat >> /home/oracle/.bash_profile << "EOF"
#########################################
export LANG=C
export ORACLE_BASE=/u01/app/oracle
export CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$CRS_HOME/bin:/usr/sbin:/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022
EOF
echo
###################################################################################
## 7. 重启操作系统进行修改验证
## 需要人工干预
###################################################################################
###################################################################################
## 检查修改信息
###################################################################################
echo "###################################################################################"
echo "检查修改信息"
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/selinux/config"
cat /etc/selinux/config
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/sysctl.conf"
cat /etc/sysctl.conf
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/modprobe.conf"
cat /etc/modprobe.conf
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/security/limits.conf"
cat /etc/security/limits.conf
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/pam.d/login"
cat /etc/pam.d/login
echo
echo "-----------------------------------------------------------------------------------"
echo "/etc/profile"
cat /etc/profile
echo
echo "-----------------------------------------------------------------------------------"
echo "/home/oracle/.bash_profile"
cat /home/oracle/.bash_profile
echo
echo "完成安装初始化配置"