当前位置 博文首页 > LuciferLiu_DBA:一步步教你Linux7安装Oracle RAC(11GR2版本)

    LuciferLiu_DBA:一步步教你Linux7安装Oracle RAC(11GR2版本)

    作者:[db:作者] 时间:2021-06-29 09:33

    作者简介:

    作者:LuciferLiu
    中国DBA联盟(ACDU)成员。目前从事Oracle DBA工作,曾从事 Oracle 数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有Oracle OCP,OceanBase OBCA认证,擅长Oracle数据库运维开发,备份恢复,安装迁移,Linux自动化运维脚本编写等。

    前言

    Oracle RAC是什么?

    Oracle Real Application Clusters (RAC) 允许客户跨多台服务器运行单个 Oracle 数据库,以最大限度地提高可用性并实现水平可扩展性,同时访问共享存储。 连接到 Oracle RAC 实例的用户会话可以在中断期间进行故障转移并安全地重放更改,而无需对最终用户应用程序进行任何更改,从而对最终用户隐藏了中断的影响。
    rac架构描述
    Oracle RAC 运行于集群之上,为 Oracle 数据库提供了最高级别的可用性、可伸缩性和低成本计算能力。如果集群内的一个节点发生故障,Oracle 将可以继续在其余的节点上运行。Oracle 的主要创新是一项称为高速缓存合并的技术。高速缓存合并使得集群中的节点可以通过高速集群互联高效地同步其内存高速缓存,从而最大限度地低降低磁盘 I/O。高速缓存最重要的优势在于它能够使集群中所有节点的磁盘共享对所有数据的访问,数据无需在节点间进行分区。

    特点:

    1、多台互连计算机组成,使用共享存储。
    2、用户无感知,对于最终用户和应用程序而言,它们似乎是一台服务器。
    3、高可用,只要有一个节点存活,就能正常对外提供服务,避免单点故障。
    4、高性能,多节点负载均衡。
    5、易伸缩,可以容易地添加、删除节点,以满足系统自身的调整。

    那么,如何部署一套RAC数据库环境呢?

    大致步骤如下:

    1.安装两台redhat7.3版本Linux系统(物理内存至少2G)
    2.网络配置(双网卡,准备IP:Public IP,Virtual IP,Private IP,Scan IP)
    3.存储配置(6块5G共享盘做ASM盘,根目录留50G用于安装grid和oracle)
    4.预安装准备(系统参数/etc/sysctl.conf修改,防火墙selinux关闭,ntpd时钟定时同步,yum源配置安装
    用户组及用户、目录新建,环境变量配置,用户资源限制/etc/security/limits.conf配置,/etc/pam.d/login修改pam_limits.so等等)
    5.安装Grid软件
    6.安装Oracle软件并建库
    7.修改数据库内存配置,密码不过期,开启归档,布置归档定时删除脚本,布置rman备份机制)
    ??rac安装思维导图
    本文主机配置为 Redhat 7.3 x86_64内存2G硬盘100G双网卡iscsi共享存储盘5G*6

    节点主机版本主机名实例名Oracle版本Public IPPrivate IPVirtual IPScan IP
    节点一redhat 7.3rac01orcl111.2.0.4192.168.56.10172.0.0.1192.168.56.20192.168.56.110
    节点二redhat 7.3rac02orcl211.2.0.4192.168.56.11172.0.0.2192.168.56.21192.168.56.110
    注意:以下标题中(rac01&rac02)代表节点一和节点二都需要执行,(rac01)代表只需要节点一执行。

    一、安装前配置

    1、Linux主机安装(rac01&rac02)

    安装Linux服务器可选择:Centos,Redhat,Oracle Linux。
    RedHat下载:https://developers.redhat.com/products/rhel/download
    OracleLinux下载:https://yum.oracle.com/oracle-linux-isos.html
    Centos下载:https://vault.centos.org/
    11G版本支持
    Linux系统安装可参考:
    Windows主机如何玩转虚拟机Linux安装,只需参透本篇文章
    教你三步在MacOS上安装Linux系统

    2、配置yum源并安装依赖包(rac01&rac02)

    Linux远程连接工具
    本文将使用XShell和Xftp工具,安装包可以在官网下载,也可私信博主获取。
    其他工具也可以,比如:putty,SecureCRT 等等工具。

    注意:需要提前挂载系统镜像iso。

    Parallels Desktop挂载Linux主机镜像:
    Parallels Desktop
    VMware Workstation挂载Linux镜像:
    VMware Workstation

    ##挂载镜像源
    mount /dev/cdrom /mnt
    ##配置yum源
    cat <<EOF>>/etc/yum.repos.d/local.repo
    [local]
    name=local
    baseurl=file:///mnt
    gpgcheck=0
    enabled=1
    EOF
    ##安装依赖包
    yum groupinstall -y "Server with GUI"
    yum install -y bc \
    binutils \
    compat-libcap1 \
    compat-libstdc++-33 \
    gcc \
    gcc-c++ \
    elfutils-libelf \
    elfutils-libelf-devel \
    glibc \
    glibc-devel \
    ksh \
    libaio \
    libaio-devel \
    libgcc \
    libstdc++ \
    libstdc++-devel \
    libxcb \
    libX11 \
    libXau \
    libXi \
    libXtst \
    libXrender \
    libXrender-devel \
    make \
    net-tools \
    nfs-utils \
    smartmontools \
    sysstat \
    e2fsprogs \
    e2fsprogs-libs \
    fontconfig-devel \
    expect \
    unzip \
    openssh-clients \
    readline* \
    tigervnc* \
    psmisc --skip-broken
    ##手动上传并安装依赖包:pdksh-5.2.14-37.el5.x86_64.rpm和compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
    rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
    rpm -e ksh-20120801-142.el7.x86_64
    rpm -ivh pdksh-5.2.14-37.el5.x86_64.rpm
    ##检查依赖包安装情况
    rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline | grep "not installed"
    

    rpm check

    3、网络配置

    rac01:

    ##配置Public IP
    nmcli connection modify eth0 ipv4.addresses 192.168.56.10/24 ipv4.gateway 192.168.56.1 ipv4.method manual autoconnect yes
    ##配置Private IP
    nmcli connection modify eth1 ipv4.addresses 172.0.0.1/24 ipv4.method manual autoconnect yes
    ##生效
    nmcli connection up eth0
    nmcli connection up eth1
    

    rac02:

    ##配置Public IP
    nmcli connection modify eth0 ipv4.addresses 192.168.56.11/24 ipv4.gateway 192.168.56.1 ipv4.method manual autoconnect yes
    ##配置Private IP
    nmcli connection modify eth1 ipv4.addresses 172.0.0.2/24 ipv4.method manual autoconnect yes
    ##生效
    nmcli connection up eth0
    nmcli connection up eth1
    
    4、存储配置(rac01&rac02)
    ISCSI共享存储配置可参考:共享存储之–StarWind高级配置
    ##iscsi识别共享存储
    yum install -y iscsi-initiator-utils*
    ##输出targetname,10.211.55.18为iscsi共享存储设备IP地址
    iscsiadm -m discovery -t st -p 10.211.55.18
    ##连接共享存储
    iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:10.211.55.18-lucifer -p 10.211.55.18 -l
    lsblk
    ##安装multipath
    yum install -y device-mapper*
    mpathconf --enable --with_multipathd y
    ##查看共享盘的scsi_id
    /usr/lib/udev/scsi_id -g -u /dev/sdb
    /usr/lib/udev/scsi_id -g -u /dev/sdc
    /usr/lib/udev/scsi_id -g -u /dev/sdd
    /usr/lib/udev/scsi_id -g -u /dev/sde
    /usr/lib/udev/scsi_id -g -u /dev/sdf
    /usr/lib/udev/scsi_id -g -u /dev/sdg
    ##配置multipath,wwid的值为上面获取的scsi_id,alias可自定义,这里配置3块OCR盘,3块DATA盘
    cat <<EOF>/etc/multipath.conf
    defaults {
        user_friendly_names yes
    }
     
    blacklist {
      devnode "^sda"
    }
    
    multipaths {
      multipath {
      wwid "27e2b3ddbd14752bb"
      alias ocr_1
      }
      multipath {
      wwid "27e2b3ddb87ff88ee"
      alias ocr_2
      }
      multipath {
      wwid "27e2b3ddb39fd2463"
      alias ocr_3
      }
      multipath {
      wwid "2852b96c1283206bf6"
      alias data_1
      }
      multipath {
      wwid "2852b96c12e8449cb9"
      alias data_2
      }
      multipath {
      wwid "2852b96c12fc938e95"
      alias data_3
      }
    }
    EOF
    ##激活multipath多路径
    multipath -F
    multipath -v2
    multipath -ll
    ##配置UDEV绑盘
    for i in ocr_* data_*; do
    	printf "%s %s\n" "$i" "$(udevadm info --query=all --name=/dev/mapper/"$i" | grep -i dm_uuid)" >>/dev/mapper/udev_info
    done
    while read -r line; do
    	dm_uuid=$(echo "$line" | awk -F'=' '{print $2}')
    	disk_name=$(echo "$line" | awk '{print $1}')
    	echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${dm_uuid}\",SYMLINK+=\"asm_${disk_name}\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
    done </dev/mapper/udev_info
    ##重载udev
    udevadm control --reload-rules
    udevadm trigger --type=devices
    
    5、hosts文件配置(rac01&rac02)
    cat <<EOF>>/etc/hosts
    #Public IP
    192.168.56.10 rac01
    192.168.56.11 rac02
    
    #Private IP
    172.0.0.1 rac01-priv
    172.0.0.2 rac02-priv
    
    #Vip IP
    192.168.56.20 rac01-vip
    192.168.56.21 rac02-vip
    
    #Scan IP
    192.168.56.110 rac-scan
    EOF
    
    6、防火墙配置(rac01&rac02)
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    systemctl status firewalld.service
    

    firewalld

    7、SELinux配置(rac01&rac02)
    ##重启后生效
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    setenforce 0
    ##重启后检查
    getenforce
    

    selinux

    8、时间同步配置(rac01&rac02)
    ##禁用chronyd
    yum install -y chrony
    timedatectl set-timezone Asia/Shanghai
    systemctl stop chronyd.service
    systemctl disable chronyd.service
    ##禁用ntpd
    yum install -y ntpdate
    ##10.211.55.200为时间服务器IP,每天12点同步系统时间
    cat <<EOF>>/var/spool/cron/root
    00 12 * * * /usr/sbin/ntpdate -u 10.211.55.200 && /usr/sbin/hwclock -w
    EOF
    ##查看计划任务
    crontab -l
    ##手动执行
    /usr/sbin/ntpdate -u 10.211.55.200 && /usr/sbin/hwclock -w
    

    crontab

    9、关闭透明大页和NUMA(rac01&rac02)
    ##关闭透明大页和numa,重启生效
    sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
    grub2-mkconfig -o /boot/grub2/grub.cfg
    ##重启后检查是否生效
    cat /sys/kernel/mm/transparent_hugepage/enabled
    cat /proc/cmdline
    

    transparent&&numa

    10、avahi-daemon配置(rac01&rac02)
    yum install -y avahi*
    systemctl stop avahi-daemon.socket
    systemctl stop avahi-daemon.service
    pgrep -f avahi-daemon | awk '{print "kill -9 "$2}'
    ##配置NOZEROCONF=yes
    cat <<EOF>>/etc/sysconfig/network
    NOZEROCONF=yes
    EOF
    

    avahi-daemon

    11、系统参数配置(rac01&rac02)
    ##配置参数文件
    memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    totalMemory=$((memTotal / 2048))
    shmall=$((memTotal / 4))
    if [ $shmall -lt 2097152 ]; then
    	shmall=2097152
    fi
    shmmax=$((memTotal * 1024 - 1))
    if [ "$shmmax" -lt 4294967295 ]; then
    	shmmax=4294967295
    fi
    cat <<EOF>>/etc/sysctl.conf
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = $shmall
    kernel.shmmax = $shmmax
    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
    net.ipv4.conf.eth0.rp_filter = 1
    net.ipv4.conf.eth1.rp_filter = 2
    EOF
    ##生效
    sysctl -p
    

    sysctl

    12、系统资源限制配置(rac01&rac02)
    ##配置limits.conf
    cat <<EOF>>/etc/security/limits.conf
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240
    oracle hard stack 32768
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle hard memlock 134217728
    oracle soft memlock 134217728
    
    grid soft nofile 1024
    grid hard nofile 65536
    grid soft stack 10240
    grid hard stack 32768
    grid soft nproc 2047
    grid hard nproc 16384
    EOF
    ##配置pam.d/login
    cat <<EOF>>/etc/pam.d/login
    session required pam_limits.so 
    session required /lib64/security/pam_limits.so
    EOF
    

    limits
    pam.d/login

    13、用户及组、目录创建(rac01&rac02)
    ##组创建
    /usr/sbin/groupadd -g 54321 oinstall
    /usr/sbin/groupadd -g 54322 dba
    /usr/sbin/groupadd -g 54323 oper
    /usr/sbin/groupadd -g 54324 backupdba
    /usr/sbin/groupadd -g 54325 dgdba
    /usr/sbin/groupadd -g 54326 kmdba
    /usr/sbin/groupadd -g 54327 asmdba
    /usr/sbin/groupadd -g 54328 asmoper
    /usr/sbin/groupadd -g 54329 asmadmin
    /usr/sbin/groupadd -g 54330 racdba
    ##用户创建
    /usr/sbin/useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba,oper grid
    /usr/sbin/useradd -u 54321 -g oinstall -G asmdba,dba,backupdba,dgdba,kmdba,racdba,oper oracle
    ##修改用户密码为oracle
    echo "oracle" |passwd oracle --stdin
    echo "oracle" |passwd grid --stdin
    ##创建软件目录
    mkdir -p /u01/app/11.2.0/grid
    mkdir -p /u01/app/grid
    mkdir -p /u01/app/oracle/product/11.2.0/db
    mkdir -p /u01/app/oraInventory
    mkdir -p /backup
    mkdir -p /home/oracle/scripts
    chown -R oracle:oinstall /backup
    chown -R oracle:oinstall /home/oracle/scripts
    chown -R grid:oinstall /u01
    chown -R grid:oinstall /u01/app/grid
    chown -R grid:oinstall /u01/app/11.2.0/grid
    chown -R grid:oinstall /u01/app/oraInventory
    chown -R oracle:oinstall /u01/app/oracle
    chmod -R 775 /u01
    

    oracle&grid

    14、环境变量配置(rac01&rac02)
    grid用户:
    注意:每个节点的ORACLE_SID不一样(+ASM1/+ASM2),自行修改。
    cat <<EOF>>/home/grid/.bash_profile
    ################OracleBegin#########################
    umask 022
    export TMP=/tmp
    export TMPDIR=\$TMP
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export ORACLE_BASE=/u01/app/grid
    export ORACLE_HOME=/u01/app/11.2.0/grid
    export ORACLE_TERM=xterm
    export TNS_ADMIN=\$ORACLE_HOME/network/admin
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export ORACLE_SID=+ASM1
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
    alias sas='sqlplus / as sysasm'
    export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
    EOF
    
    oracle用户:
    注意:每个节点的ORACLE_HOSTNAME(rac01/rac02)和ORACLE_SID(orcl1/orcl2)不一样,自行修改。
    cat <<EOF>>/home/oracle/.bash_profile
    ################OracleBegin#########################
    umask 022
    export TMP=/tmp
    export TMPDIR=\$TMP
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
    export ORACLE_HOSTNAME=rac01
    export ORACLE_TERM=xterm
    export TNS_ADMIN=\$ORACLE_HOME/network/admin
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export ORACLE_SID=orcl1
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
    alias sas='sqlplus / as sysdba'
    export PS1="[\`whoami\`@\`hostname\`