Oracle10gR2 RAC+RHEL4+ VMWare GSX简明安装步骤
2007-11-09 23:33:35 来源:WEB开发网核心提示:来源:http://www.chinaunix.net前几天做了这个测试,看到我们这个板里面有很多同学对学习RAC感兴趣,Oracle10gR2 RAC+RHEL4+ VMWare GSX简明安装步骤,但是又苦于没有条件. 我的风格大家也熟悉了,我也不多废话,你选择Add你一个新的service, 随便叫名字,比如ra
来源:http://www.chinaunix.net
前几天做了这个测试,看到我们这个板里面有很多同学对学习RAC感兴趣,但是又苦于没有条件.
我的风格大家也熟悉了,我也不多废话,也不愿意写什么手册,我认为搞稍微复杂一点技术的工程技术人员的最基本的能力就是去做调研和信息搜集,什么 事情光靠别人很详细的喂给你,你是永远无法成为高手的,过程本身很麻烦,有时候甚至很让人痛苦和气恼,但是这才是真正能够把你推动到一个"高手"的位置的 真正动力. 动手越少,水平越糟。
下面是我前几天做的一个简明步骤,不想写复杂的.我觉得已经足够帮有动手能力的同学过关了.
********************************************
Oracle(大型网站数据库平台) 10gR2 RAC + RHEL AS4U2 +VMWare GSX 3.2.0
Deployment brifing guide 0.9
Author: nntp 20060119
转载不得修改,请注明作者时间和出处
********************************************
1. 环境
自用的测试工作站一台,如果你的配置环境和我差很远,你就不要玩乐,你会很痛苦的.
------------硬件环境--------------------------------------------------------
CPU: AMD Althon64 3200+ x1
Mem: 2G DDR400
Storage: 1x10GB ATA for Host OS, 2x80G SATA for application
------------Host 的环境----------------------------------------------------------
SuSE Enterprise Linux Server 9 SP3 with latest errata Kernel from Novell YOU
(AMD64/EM64T version)
10GB上安装的是我的上面的这个OS,用来做Host OS, 并且已经调优过. (不会这种环境下linux调优的同学,你做出来的性能会和我有不少差距)
2个80GB硬盘,我用linux MD 做软RAID, RAID level 是0, 并且作了调优(不会这种环境下linux阵列配置和优化的同学,你做出来的性能会和我有不少差距)
VMWare gsx3.2.0 安装在 10GB硬盘上,也作了一些小的优化工作(你在VTN上查得到怎么做优化).
80GB做RAID0就变成一个160GB的LUN. 我划乐40GB出来, mount 到 /vmegg上
我用的这个文件系统是ReiserFS, 并作了文件系统级的性能优化.
vmegg的结构如下
/vmegg
....../rac
........./rhel4
............/n1
............/n2
............/share
各位同学自己建好上面这些目录.
-------------------安装的大概步骤------------------------
步骤一: 安装前准备及Guest OS安装配置
步骤二: 安装Oracle(大型网站数据库平台) 10gR2 clusterware
步骤三: 安装Oracle(大型网站数据库平台) 10gR2 database
步骤四: 配置netca
步骤五: 配置dbca创建数据库
步骤六: 校验RAC
------------------------------------------------------------
============ 步骤一 安装前准备及Guest OS安装配置=======
Host OS 准备
1. 从Oracle(大型网站数据库平台) OTN下载 Oracle(大型网站数据库平台) 10gR2 for x86 linux,下2个zip, 一个是clusterware zip,一个是database zip, comp CD你可以下,我是懒的弄
2. 准备的RHEL AS4U2(x86), 你也可以用CentOS 4.2(x86)
3. 搞清楚你的linux的kernel version
4. 从Oracle(大型网站数据库平台) OTN下载 ocfs2 , ocfs tools, ocfs console, ASMLib, ASMLib support & utility,记住这些都是针对你的kernel的,不要下错
5. VMWare gsx 3.2.0 for linux
6. 我的工作站是没有显示器的,我的工作都是在笔记本上作的, 大家都知道Oracle(大型网站数据库平台)的安装是需要X的,所以你可以VNC过去,也可以在本地用Xserver.
我用的是ReflectionX,因为还可用来连其他的Unix(HP-UX, AIX等). 这个完全是个人喜好,你搞得定什么用什么.
7. 在笔记本上配置好RelfectionX,做好连接host上的vmware console
Guest OS安装
1. 泡杯茶,会耗不少时间, 我一边安装一边看DVD的,当中会有很多等待时间. 虽然我后来用了几个自动化的方式 .
2. 在vmware console 创建你的 vmware guest OS, 取名 node1, node2, 选择 custome create-> Redhat Enterprise Linux ,其它都是默认. 内存选择1G(>800MB你就看 不到warning乐), 硬盘选择 LSI bus controller, 大小选择10GB, 建立方式选择 pre-allocated ,也就 是马上就创建这个vmdk, 我不喜欢split to 2GB,就把默认的打勾给去掉了.因为我的Host OS以及mount filesystem 已经做过优化,我喜欢一个独立的大文件,你们按照自立的路子来做,不要盲目跟我.
3. 创建好后vmware guest OS之后, 给每一个guest 加上一块NIC
4. 关掉vmware console, 这个时候你的两个vmware guest OS都创建好了,分别在n1 n2目录下面,而且每个都加了1个NIC,硬盘都是LSI, 并且大小10GB,而且都预创建好了,并且没有分割成2GB一块
6. 看到很多cluster in vmware的介绍在创建share disk的时候,都是什么用一个vmware guest OS添 加vmdk然后修改vmx,然后把另外一个vmware guest的vmx再添加进去,我很不喜欢这种套路。我很少用 vmware workstation,所以不知道最新版本是否有vdiskmanager.反正我在gsx里面一直用vdiskmanager.
ssh到你的 Host OS里面(现在是我的SLES9SP3). 到 /vmware/rac/rhel4/share下面,运行 vmware-vdiskmanager 创建几个vmdk. 这里就有点讲究了
如果你在看我的这个文章之前,还没有搞清楚Oracle(大型网站数据库平台) RAC的基本结构, raw, ASM, ocfs2的概念,你就不要看下去了,浪费时间.
Oracle(大型网站数据库平台) RAC 本质上是借鉴了很多Alpha TruCluster的技术,但是也有了很多折衷的设计。 它需要存放OCR, CRS voting 信息的共享空间, 还需要空间给ASM for Oracle(大型网站数据库平台) data, 所以
在存储的布局上,有两种方式,要么是 raw for OCR, CRS voting , ASM for data, 要么是 ocfs2 for OCR, CRS voting, ASM for data.
至于以前那种 raw for OCR, CRS voting, CRS for data的做法,我是不考虑了,做做学习用途还可以,用在production环境是给自己吃药.
所以,如果你选择第一种,你的vmdk这样建,
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 200MB 一个 for raw for OCR
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 200MB 一个 for raw for CRS voting
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB 四个, 2个 for ASM Oracle(大型网站数据库平台) data, 2个for flash recovery area, 你不玩flash recovery也可以省略掉
如果你选择第二种,你的vmdk这样建,
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB一个 for ocfs2 for OCR + CRS voting
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB 四个for ASM for Oracle(大型网站数据库平台) data & flash recovery area (同上)
raw没有什么有意思的,我因为还要在这个环境作其他的test,所以就选择第二种.
这样做好后,你的 /vmware/rac/rhel4/share目录就会产生你刚才创建的这些vmdk了.
7. 分别到 n1和n2的目录,打开node1.vmx 和node2.vmx, 在最后空白处添加这几段内容
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "virtual"
这段是打开 scsi1上的使用,并且设置成virtual, controller设置成lsilogic
然后依次添加
scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.filename = "/vmegg/rac/rhel4/share/ocfs.vmdk"
scsi1:1.deviceType = "plainDisk"
scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.filename = "/vmegg/rac/rhel4/share/asm1.vmdk"
scsi1:2.deviceType = "plainDisk"
scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.filename = "/vmegg/rac/rhel4/share/asm2.vmdk"
scsi1:3.deviceType = "plainDisk"
scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.filename = "/vmegg/rac/rhel4/share/asm3.vmdk"
scsi1:4.deviceType = "plainDisk"
scsi1:5.present = "TRUE"
scsi1:5.mode = "independent-persistent"
scsi1:5.filename = "/vmegg/rac/rhel4/share/asm4.vmdk"
scsi1:5.deviceType = "plainDisk"
这样就把刚才创建的那几个vmdk添加好了
最后添加这个
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
这段是对vmware使用共享硬盘的方式进行定义,我经常看到很多同学在装RHCS in vmware的时候说这个不正常,那个不正常,你们也可以借鉴一下这个配置
大多数人都知道设置 disk.locking ="false" 却漏掉dataCache
保存退出之后,重新打开你的vmware-console,你就可以看到2个vmware guest OS的配置中,都有这些硬盘出现了.
其实到现在为止还是一个超级简单的工作.
在你的vmware-console里面edit config 点进看看,但是不要修改和save. !切记,而且之前修改vmx的时候,关掉你的vmware-console
8. 然后就安装你的vmware guest OS, 安装的时候,包选择default,然后点custom进去加几个必需的, Development Tools, Legacy Software Development Libraries, Kernel Development, Editor, System tools
9. 配置你的2个网卡的固定IP,hostname, DNS, gateway, time server (NTP)
node1:
hostname node1pub
eth0 192.168.0.11
eth1 10.1.1.1.1
node2
hostanme node2pub
eth0 192.168.0.22
eth1 10.1.1.1.2
gateway, DNS就按照自己的需要配
NTP我强烈建议你们配一个,不知道NTP的,后面有古怪事情不要问我.
10. 安装结束后,进入guest OS
修改 /etc/hosts
如下
127.0.0.1 localhost (必须要这样)
192.168.0.11 node1pub
192.168.0.22 node2pub
10.1.1.1 node1prv
10.1.1.2 node2prv
192.168.0.111 node1vip
192.168.0.222 node2vip
两个node都要一样.
修改后要确认这个hosts 都正确 (ping)
11. ssh-keygen for root, dsa/rsa 1024bit 我选择空的 passphase,你可以加你的passphase,但是后面你要ssh-agent $SHELL建立等效,我怕麻烦就省略掉了.
cd ~/.ssh
cat *rsa.pub >> authorized_keys
cat *dsa.pub >> authorized_keys2
copy .ssh/下面这些到 node2 的 ~/.ssh下面
这些都是基本功,我就不废话了,不熟悉这个的就不要往下看了.
12. 分别在每个node 上做这些事情
ssh localhost
ssh node1pub
ssh node2pub
ssh node1prv
ssh node2prv
13. 这个步骤和RAC没有关系,但是也是好习惯之一,检查你的service 状况,disable掉所有不需要用的service ,腾出resource给你的RAC, 什么cups之类乱七八糟的.
14. group add dba oinstall 组在两个node上, 创建Oracle(大型网站数据库平台) 用户, 主组oinstall, 附加组是dba和disk
然后和前面执行root ssh的操作完全一样,执行一次,这步非常重要,漏掉了肯定过不下去.
15. mkdir /u01/app/Oracle(大型网站数据库平台) 在2个node上
chown -R Oracle(大型网站数据库平台).oinstall
chmod -R 775
这个目录给Oracle(大型网站数据库平台)和clusterware系统的
mkdir /u02/oradata/orcl
chown -R Oracle(大型网站数据库平台).dba
这个目录给 ocfs2用来装OCR, CRS voting 的
16. 修改你的 /etc/sysctl.conf ,添加这些kernel 参数,这些都是老一套了,大家应该都很熟悉了
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
17. 修改 ulimits 如果你想要修改的话
vi /etc/sysconfig/limits.conf
Oracle(大型网站数据库平台) soft nproc 2047
Oracle(大型网站数据库平台) hard nproc 16384
Oracle(大型网站数据库平台) soft nofile 1024
Oracle(大型网站数据库平台) hard nofile 65536
18. 修改 pam.d login
vi /etc/pam.d/login
最后添加 session required /lib/security/pam_limits.so
19. 增加 hancheck-timer 模块在2个node上
先看一下有没有 find /lib/modules -name "hangcheck-timer.ko"
然后加上去 echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
然后把这个模块调起来 modprobe hangcheck-timer
然后检查是否工作正常了 grep Hangcheck /var/log/messages | tail -2
看到类似这个的信息就表明工作正常了 Jan 18 01:08:19 n1pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds).
20. 安装ocfs2 , ocfs2的console的rpm
21. 在每个node 上这样操作
进入X, 然后运行 ocfs2console, 把你的2个node都添加进去
然后编辑 /etc/init.d/o2cb, 删除掉 靠近配置开头的那些带 #的配置行
然后 /etc/init.d/o2cb offline ocfs2
/etc/init.d/o2cb unload ocfs2
/etc/init.d/o2cb configure ocfs2 回答y 就可以了
22. 在一个 node上 mkfs.ocfs2 -b 4k -C 32k -L oradatafiles /dev/sdb1 (就是前面创建的第一个vmdk)
23. 在每个node上
mount -t ocfs2 -o datavolume /dev/sdb1 /u02/oradata/orcl
修改你的 /etc/fstab , 添加 类似这样的行
/dev/sdb1 /u02/oradata/orcl ocfs2 _netdev,datavolume 0 0
到这里,我们的ocfs2 for OCR, CRS voting 就OK了
24. 修改 /etc/sysconfig/o2cb
把threshhold 的 值设置成 601
25. 在每个node上
安装你的 ASMLibs, tools, support 三个rpm文件
然后运行 /etc/init.d/Oracle(大型网站数据库平台)asm configure
回答 Oracle(大型网站数据库平台) , dba, y, y 就可以了
26. 创建ASM
在一个node上:
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL1 /dev/sdc1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL2 /dev/sdd1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL3 /dev/sde1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL4 /dev/sdf1
记住,ASM在linux下面处理的对象是 partition,不是disk, 所以你那些vmdk要linux 下面partition好才能用,fdisk 就用type 83就可以了
创建好后, 在这个node 上运行 /etc/init.d/Oracle(大型网站数据库平台)asm listdisks 查看
27, 在另外一个node 上
/etc/init.d/Oracle(大型网站数据库平台)asm scandisks
/etc/init.d/Oracle(大型网站数据库平台)asm listdisks 查看
28. 在每个node上
修改 Oracle(大型网站数据库平台)用户家目录下的 .bash_profile
修改成大概这个样子
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
export Oracle(大型网站数据库平台)_HOME=$Oracle(大型网站数据库平台)_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$Oracle(大型网站数据库平台)_BASE/product/crs
export Oracle(大型网站数据库平台)_SID=orcl1
export PATH=.:${PATH}:$HOME/bin:$Oracle(大型网站数据库平台)_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$Oracle(大型网站数据库平台)_BASE/common/Oracle(大型网站数据库平台)/bin
export Oracle(大型网站数据库平台)_TERM=xterm
export TNS_ADMIN=$Oracle(大型网站数据库平台)_HOME/network/admin
export ORA_NLS10=$Oracle(大型网站数据库平台)_HOME/nls/data
export LD_LIBRARY_PATH=$Oracle(大型网站数据库平台)_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$Oracle(大型网站数据库平台)_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$Oracle(大型网站数据库平台)_HOME/JRE
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/jlib
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
第二个节点的 Oracle(大型网站数据库平台)_SID=orcl2 其他都一样
=============步骤二: 安装Oracle(大型网站数据库平台) 10gR2 clusterware========
1. unset 一些环境变量
$ unset ORA_CRS_HOME
$ unset Oracle(大型网站数据库平台)_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
检查你的变量
$ env | grep ORA
Oracle(大型网站数据库平台)_SID=orcl2
Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
Oracle(大型网站数据库平台)_TERM=xterm
2. 用Oracle(大型网站数据库平台) 用户login , 然后运行你的unzip 之后的那个clusterware目录下的runInsaller 进入图形安装
3. 确认你的安装目录是/u01/app/Oracle(大型网站数据库平台)/product/crs
4. 修改 你的clustername 从crs到一个随便你想要的名字
然后增加
node1pub node1prv node1vip
node2pub node2prv node2vip
5. 然后指定 eth0 的类型时public
6. 然后制定你的OCR 和mirror
/u02/oradata/orcl/OCRFile
/u02/oradata/orcl/OCRFile_mirror
7. 然后指定你的voting
/u02/oradata/orcl/VotingFile
/u02/oradata/orcl/VotingFile_mirror1
/u02/oradata/orcl/VotingFile_mirror2
8. 然后就开始安装了,当众会让你用完全的root身份在每个节点上运行orainstRoot.sh,你就一个节点一个节点运行,不要抢时间,一个个来
9. 然后要求你在每个节点上用完全的root权限执行 root.sh,你也一样,一个个来,一定要等一个做好了,然后做另外一个
10. 做第二个时候,如果告诉你你的eth0不是public,你就在第二个节点,用Oracle(大型网站数据库平台)用户在 X里面运行vipca, 然后配置好你的vip 信息(虚拟IP的信息,很容易配的)
11. clusterware 就安装好了.
确认一下.
$ /u01/app/Oracle(大型网站数据库平台)/product/crs/bin/olsnodes -n
node1pub 1
node2pub 2
或
$ ls -l /etc/init.d/init.*
-r-xr-xr-x 1 root root 1951 Oct 4 14:21 /etc/init.d/init.crs*
-r-xr-xr-x 1 root root 4714 Oct 4 14:21 /etc/init.d/init.crsd*
-r-xr-xr-x 1 root root 35394 Oct 4 14:21 /etc/init.d/init.cssd*
-r-xr-xr-x 1 root root 3190 Oct 4 14:21 /etc/init.d/init.evmd*
===============步骤三: 安装Oracle(大型网站数据库平台) 10gR2 database=======
1.1. unset 一些环境变量
$ unset ORA_CRS_HOME
$ unset Oracle(大型网站数据库平台)_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
检查你的变量
$ env | grep ORA
Oracle(大型网站数据库平台)_SID=orcl2
Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
Oracle(大型网站数据库平台)_TERM=xterm
2. 用Oracle(大型网站数据库平台)用户,运行你unzip之后的那个database目录下的runInstaller
3. Oracle(大型网站数据库平台)安装目录指定到 /u01/app/Oracle(大型网站数据库平台)/product/10.2.0/db_1
4. 把2个node选择上
5. 选择 Install database Software only
6. 会要求你用完全的root权限运行 root.sh ,分别在2个node上一一运行,不要抢时间
7. 安装完毕
==================步骤四: 配置netca=================
1. Oracle(大型网站数据库平台) 用户在一个node上运行 netca
2. 选择所有node
3. 选择 Listener configuration
4.添加一个LISTEN, 1521 port
5. 回到开始界面,选择Naming Methods configuration
6. 把Local Naming和Easy Naming 添加进去.然后结束配置
7. 确认一下
$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_NODE1PUB
==============步骤五: 配置dbca创建数据库=============
1. 用Oracle(大型网站数据库平台)用户运行 dbca
2. 选择custom database
3. 输入数据库的全局名,比如orcl
4. 给你的系统的不同角色建立密码,我都选择same as ....
5. 选择用ASM管理数据库
6. 输入你前面设定的管理员密码,并把SPFILE 设定成/u02/oradata/orcl/dbs/spfile+ASM.ora
7.进入ASM配置界面, create NEW, 名字叫做DATA
然后下面你会看到你前面创建的4个ASM VOL1-4, 你选择 1 和2, "Redundancy" 选择 Normal.
这样 DATA diskgroup就创建好了
8. 回到ASM界面后. 仍旧选择create new, 然后名字叫做FLASH_RECOVERY_AREA, 选择第3和4两个卷,然后"Redundancy" 选择External
9. 然后OK结束ASM配置
10.Database File Locations 选择DATA
11. Recovery Configuration 选择刚才创建的 FLASH_RECOVERY_AREA diskgroup
12. 接下来默认的就可以了
13. Database Services 这里,你选择Add你一个新的service, 随便叫名字,比如ractest
然后选择 TAF Policy,是Basic
14. 开始创建数据库
===================步骤六: 校验RAC===============
1.用Oracle(大型网站数据库平台)用户login, 运行
$ srvctl status database -d orcl
Instance orcl1 is running on node node1pub
Instance orcl2 is running on node node2pub
2.
$ srvctl status service -d orcl -s ractest
Service orcltest is running on instance(s) orcl2, orcl1
3.
$ srvctl status nodeapps -n node1pub
VIP is running on node: node1pub
GSD is running on node: node1pub
Listener is running on node: node1pub
ONS daemon is running on node: node1pub
4.
$ srvctl status asm -n node1pub
ASM instance +ASM1 is running on node node1pub.
5.
$ srvctl config nodeapps -n node1pub -a -g -s -l
VIP exists.: /node1vip/192.168.1.111/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.
6. 运行 sqlplus /nolog
SQL> connect /as sysdba
SQL>
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1 1 orcl1 YES OPEN ACTIVE NORMAL node1pub
2 2 orcl2 YES OPEN ACTIVE NORMAL node2pub
7.其他的测试,测试方法n多,你用sqlplus, asmcmd, 或者通过Web进 enterprise manager都可以.
随便你了.
前几天做了这个测试,看到我们这个板里面有很多同学对学习RAC感兴趣,但是又苦于没有条件.
我的风格大家也熟悉了,我也不多废话,也不愿意写什么手册,我认为搞稍微复杂一点技术的工程技术人员的最基本的能力就是去做调研和信息搜集,什么 事情光靠别人很详细的喂给你,你是永远无法成为高手的,过程本身很麻烦,有时候甚至很让人痛苦和气恼,但是这才是真正能够把你推动到一个"高手"的位置的 真正动力. 动手越少,水平越糟。
下面是我前几天做的一个简明步骤,不想写复杂的.我觉得已经足够帮有动手能力的同学过关了.
********************************************
Oracle(大型网站数据库平台) 10gR2 RAC + RHEL AS4U2 +VMWare GSX 3.2.0
Deployment brifing guide 0.9
Author: nntp 20060119
转载不得修改,请注明作者时间和出处
********************************************
1. 环境
自用的测试工作站一台,如果你的配置环境和我差很远,你就不要玩乐,你会很痛苦的.
------------硬件环境--------------------------------------------------------
CPU: AMD Althon64 3200+ x1
Mem: 2G DDR400
Storage: 1x10GB ATA for Host OS, 2x80G SATA for application
------------Host 的环境----------------------------------------------------------
SuSE Enterprise Linux Server 9 SP3 with latest errata Kernel from Novell YOU
(AMD64/EM64T version)
10GB上安装的是我的上面的这个OS,用来做Host OS, 并且已经调优过. (不会这种环境下linux调优的同学,你做出来的性能会和我有不少差距)
2个80GB硬盘,我用linux MD 做软RAID, RAID level 是0, 并且作了调优(不会这种环境下linux阵列配置和优化的同学,你做出来的性能会和我有不少差距)
VMWare gsx3.2.0 安装在 10GB硬盘上,也作了一些小的优化工作(你在VTN上查得到怎么做优化).
80GB做RAID0就变成一个160GB的LUN. 我划乐40GB出来, mount 到 /vmegg上
我用的这个文件系统是ReiserFS, 并作了文件系统级的性能优化.
vmegg的结构如下
/vmegg
....../rac
........./rhel4
............/n1
............/n2
............/share
各位同学自己建好上面这些目录.
-------------------安装的大概步骤------------------------
步骤一: 安装前准备及Guest OS安装配置
步骤二: 安装Oracle(大型网站数据库平台) 10gR2 clusterware
步骤三: 安装Oracle(大型网站数据库平台) 10gR2 database
步骤四: 配置netca
步骤五: 配置dbca创建数据库
步骤六: 校验RAC
------------------------------------------------------------
============ 步骤一 安装前准备及Guest OS安装配置=======
Host OS 准备
1. 从Oracle(大型网站数据库平台) OTN下载 Oracle(大型网站数据库平台) 10gR2 for x86 linux,下2个zip, 一个是clusterware zip,一个是database zip, comp CD你可以下,我是懒的弄
2. 准备的RHEL AS4U2(x86), 你也可以用CentOS 4.2(x86)
3. 搞清楚你的linux的kernel version
4. 从Oracle(大型网站数据库平台) OTN下载 ocfs2 , ocfs tools, ocfs console, ASMLib, ASMLib support & utility,记住这些都是针对你的kernel的,不要下错
5. VMWare gsx 3.2.0 for linux
6. 我的工作站是没有显示器的,我的工作都是在笔记本上作的, 大家都知道Oracle(大型网站数据库平台)的安装是需要X的,所以你可以VNC过去,也可以在本地用Xserver.
我用的是ReflectionX,因为还可用来连其他的Unix(HP-UX, AIX等). 这个完全是个人喜好,你搞得定什么用什么.
7. 在笔记本上配置好RelfectionX,做好连接host上的vmware console
Guest OS安装
1. 泡杯茶,会耗不少时间, 我一边安装一边看DVD的,当中会有很多等待时间. 虽然我后来用了几个自动化的方式 .
2. 在vmware console 创建你的 vmware guest OS, 取名 node1, node2, 选择 custome create-> Redhat Enterprise Linux ,其它都是默认. 内存选择1G(>800MB你就看 不到warning乐), 硬盘选择 LSI bus controller, 大小选择10GB, 建立方式选择 pre-allocated ,也就 是马上就创建这个vmdk, 我不喜欢split to 2GB,就把默认的打勾给去掉了.因为我的Host OS以及mount filesystem 已经做过优化,我喜欢一个独立的大文件,你们按照自立的路子来做,不要盲目跟我.
3. 创建好后vmware guest OS之后, 给每一个guest 加上一块NIC
4. 关掉vmware console, 这个时候你的两个vmware guest OS都创建好了,分别在n1 n2目录下面,而且每个都加了1个NIC,硬盘都是LSI, 并且大小10GB,而且都预创建好了,并且没有分割成2GB一块
6. 看到很多cluster in vmware的介绍在创建share disk的时候,都是什么用一个vmware guest OS添 加vmdk然后修改vmx,然后把另外一个vmware guest的vmx再添加进去,我很不喜欢这种套路。我很少用 vmware workstation,所以不知道最新版本是否有vdiskmanager.反正我在gsx里面一直用vdiskmanager.
ssh到你的 Host OS里面(现在是我的SLES9SP3). 到 /vmware/rac/rhel4/share下面,运行 vmware-vdiskmanager 创建几个vmdk. 这里就有点讲究了
如果你在看我的这个文章之前,还没有搞清楚Oracle(大型网站数据库平台) RAC的基本结构, raw, ASM, ocfs2的概念,你就不要看下去了,浪费时间.
Oracle(大型网站数据库平台) RAC 本质上是借鉴了很多Alpha TruCluster的技术,但是也有了很多折衷的设计。 它需要存放OCR, CRS voting 信息的共享空间, 还需要空间给ASM for Oracle(大型网站数据库平台) data, 所以
在存储的布局上,有两种方式,要么是 raw for OCR, CRS voting , ASM for data, 要么是 ocfs2 for OCR, CRS voting, ASM for data.
至于以前那种 raw for OCR, CRS voting, CRS for data的做法,我是不考虑了,做做学习用途还可以,用在production环境是给自己吃药.
所以,如果你选择第一种,你的vmdk这样建,
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 200MB 一个 for raw for OCR
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 200MB 一个 for raw for CRS voting
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB 四个, 2个 for ASM Oracle(大型网站数据库平台) data, 2个for flash recovery area, 你不玩flash recovery也可以省略掉
如果你选择第二种,你的vmdk这样建,
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB一个 for ocfs2 for OCR + CRS voting
vmware-vdiskmanager 创建 pre-allocated并且是lsi contoller的硬盘 1GB 四个for ASM for Oracle(大型网站数据库平台) data & flash recovery area (同上)
raw没有什么有意思的,我因为还要在这个环境作其他的test,所以就选择第二种.
这样做好后,你的 /vmware/rac/rhel4/share目录就会产生你刚才创建的这些vmdk了.
7. 分别到 n1和n2的目录,打开node1.vmx 和node2.vmx, 在最后空白处添加这几段内容
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "virtual"
这段是打开 scsi1上的使用,并且设置成virtual, controller设置成lsilogic
然后依次添加
scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.filename = "/vmegg/rac/rhel4/share/ocfs.vmdk"
scsi1:1.deviceType = "plainDisk"
scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.filename = "/vmegg/rac/rhel4/share/asm1.vmdk"
scsi1:2.deviceType = "plainDisk"
scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.filename = "/vmegg/rac/rhel4/share/asm2.vmdk"
scsi1:3.deviceType = "plainDisk"
scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.filename = "/vmegg/rac/rhel4/share/asm3.vmdk"
scsi1:4.deviceType = "plainDisk"
scsi1:5.present = "TRUE"
scsi1:5.mode = "independent-persistent"
scsi1:5.filename = "/vmegg/rac/rhel4/share/asm4.vmdk"
scsi1:5.deviceType = "plainDisk"
这样就把刚才创建的那几个vmdk添加好了
最后添加这个
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
这段是对vmware使用共享硬盘的方式进行定义,我经常看到很多同学在装RHCS in vmware的时候说这个不正常,那个不正常,你们也可以借鉴一下这个配置
大多数人都知道设置 disk.locking ="false" 却漏掉dataCache
保存退出之后,重新打开你的vmware-console,你就可以看到2个vmware guest OS的配置中,都有这些硬盘出现了.
其实到现在为止还是一个超级简单的工作.
在你的vmware-console里面edit config 点进看看,但是不要修改和save. !切记,而且之前修改vmx的时候,关掉你的vmware-console
8. 然后就安装你的vmware guest OS, 安装的时候,包选择default,然后点custom进去加几个必需的, Development Tools, Legacy Software Development Libraries, Kernel Development, Editor, System tools
9. 配置你的2个网卡的固定IP,hostname, DNS, gateway, time server (NTP)
node1:
hostname node1pub
eth0 192.168.0.11
eth1 10.1.1.1.1
node2
hostanme node2pub
eth0 192.168.0.22
eth1 10.1.1.1.2
gateway, DNS就按照自己的需要配
NTP我强烈建议你们配一个,不知道NTP的,后面有古怪事情不要问我.
10. 安装结束后,进入guest OS
修改 /etc/hosts
如下
127.0.0.1 localhost (必须要这样)
192.168.0.11 node1pub
192.168.0.22 node2pub
10.1.1.1 node1prv
10.1.1.2 node2prv
192.168.0.111 node1vip
192.168.0.222 node2vip
两个node都要一样.
修改后要确认这个hosts 都正确 (ping)
11. ssh-keygen for root, dsa/rsa 1024bit 我选择空的 passphase,你可以加你的passphase,但是后面你要ssh-agent $SHELL建立等效,我怕麻烦就省略掉了.
cd ~/.ssh
cat *rsa.pub >> authorized_keys
cat *dsa.pub >> authorized_keys2
copy .ssh/下面这些到 node2 的 ~/.ssh下面
这些都是基本功,我就不废话了,不熟悉这个的就不要往下看了.
12. 分别在每个node 上做这些事情
ssh localhost
ssh node1pub
ssh node2pub
ssh node1prv
ssh node2prv
13. 这个步骤和RAC没有关系,但是也是好习惯之一,检查你的service 状况,disable掉所有不需要用的service ,腾出resource给你的RAC, 什么cups之类乱七八糟的.
14. group add dba oinstall 组在两个node上, 创建Oracle(大型网站数据库平台) 用户, 主组oinstall, 附加组是dba和disk
然后和前面执行root ssh的操作完全一样,执行一次,这步非常重要,漏掉了肯定过不下去.
15. mkdir /u01/app/Oracle(大型网站数据库平台) 在2个node上
chown -R Oracle(大型网站数据库平台).oinstall
chmod -R 775
这个目录给Oracle(大型网站数据库平台)和clusterware系统的
mkdir /u02/oradata/orcl
chown -R Oracle(大型网站数据库平台).dba
这个目录给 ocfs2用来装OCR, CRS voting 的
16. 修改你的 /etc/sysctl.conf ,添加这些kernel 参数,这些都是老一套了,大家应该都很熟悉了
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
17. 修改 ulimits 如果你想要修改的话
vi /etc/sysconfig/limits.conf
Oracle(大型网站数据库平台) soft nproc 2047
Oracle(大型网站数据库平台) hard nproc 16384
Oracle(大型网站数据库平台) soft nofile 1024
Oracle(大型网站数据库平台) hard nofile 65536
18. 修改 pam.d login
vi /etc/pam.d/login
最后添加 session required /lib/security/pam_limits.so
19. 增加 hancheck-timer 模块在2个node上
先看一下有没有 find /lib/modules -name "hangcheck-timer.ko"
然后加上去 echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
然后把这个模块调起来 modprobe hangcheck-timer
然后检查是否工作正常了 grep Hangcheck /var/log/messages | tail -2
看到类似这个的信息就表明工作正常了 Jan 18 01:08:19 n1pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds).
20. 安装ocfs2 , ocfs2的console的rpm
21. 在每个node 上这样操作
进入X, 然后运行 ocfs2console, 把你的2个node都添加进去
然后编辑 /etc/init.d/o2cb, 删除掉 靠近配置开头的那些带 #的配置行
然后 /etc/init.d/o2cb offline ocfs2
/etc/init.d/o2cb unload ocfs2
/etc/init.d/o2cb configure ocfs2 回答y 就可以了
22. 在一个 node上 mkfs.ocfs2 -b 4k -C 32k -L oradatafiles /dev/sdb1 (就是前面创建的第一个vmdk)
23. 在每个node上
mount -t ocfs2 -o datavolume /dev/sdb1 /u02/oradata/orcl
修改你的 /etc/fstab , 添加 类似这样的行
/dev/sdb1 /u02/oradata/orcl ocfs2 _netdev,datavolume 0 0
到这里,我们的ocfs2 for OCR, CRS voting 就OK了
24. 修改 /etc/sysconfig/o2cb
把threshhold 的 值设置成 601
25. 在每个node上
安装你的 ASMLibs, tools, support 三个rpm文件
然后运行 /etc/init.d/Oracle(大型网站数据库平台)asm configure
回答 Oracle(大型网站数据库平台) , dba, y, y 就可以了
26. 创建ASM
在一个node上:
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL1 /dev/sdc1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL2 /dev/sdd1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL3 /dev/sde1
/etc/init.d/Oracle(大型网站数据库平台)asm createdisk VOL4 /dev/sdf1
记住,ASM在linux下面处理的对象是 partition,不是disk, 所以你那些vmdk要linux 下面partition好才能用,fdisk 就用type 83就可以了
创建好后, 在这个node 上运行 /etc/init.d/Oracle(大型网站数据库平台)asm listdisks 查看
27, 在另外一个node 上
/etc/init.d/Oracle(大型网站数据库平台)asm scandisks
/etc/init.d/Oracle(大型网站数据库平台)asm listdisks 查看
28. 在每个node上
修改 Oracle(大型网站数据库平台)用户家目录下的 .bash_profile
修改成大概这个样子
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
export Oracle(大型网站数据库平台)_HOME=$Oracle(大型网站数据库平台)_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$Oracle(大型网站数据库平台)_BASE/product/crs
export Oracle(大型网站数据库平台)_SID=orcl1
export PATH=.:${PATH}:$HOME/bin:$Oracle(大型网站数据库平台)_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$Oracle(大型网站数据库平台)_BASE/common/Oracle(大型网站数据库平台)/bin
export Oracle(大型网站数据库平台)_TERM=xterm
export TNS_ADMIN=$Oracle(大型网站数据库平台)_HOME/network/admin
export ORA_NLS10=$Oracle(大型网站数据库平台)_HOME/nls/data
export LD_LIBRARY_PATH=$Oracle(大型网站数据库平台)_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$Oracle(大型网站数据库平台)_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$Oracle(大型网站数据库平台)_HOME/JRE
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/jlib
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$Oracle(大型网站数据库平台)_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
第二个节点的 Oracle(大型网站数据库平台)_SID=orcl2 其他都一样
=============步骤二: 安装Oracle(大型网站数据库平台) 10gR2 clusterware========
1. unset 一些环境变量
$ unset ORA_CRS_HOME
$ unset Oracle(大型网站数据库平台)_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
检查你的变量
$ env | grep ORA
Oracle(大型网站数据库平台)_SID=orcl2
Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
Oracle(大型网站数据库平台)_TERM=xterm
2. 用Oracle(大型网站数据库平台) 用户login , 然后运行你的unzip 之后的那个clusterware目录下的runInsaller 进入图形安装
3. 确认你的安装目录是/u01/app/Oracle(大型网站数据库平台)/product/crs
4. 修改 你的clustername 从crs到一个随便你想要的名字
然后增加
node1pub node1prv node1vip
node2pub node2prv node2vip
5. 然后指定 eth0 的类型时public
6. 然后制定你的OCR 和mirror
/u02/oradata/orcl/OCRFile
/u02/oradata/orcl/OCRFile_mirror
7. 然后指定你的voting
/u02/oradata/orcl/VotingFile
/u02/oradata/orcl/VotingFile_mirror1
/u02/oradata/orcl/VotingFile_mirror2
8. 然后就开始安装了,当众会让你用完全的root身份在每个节点上运行orainstRoot.sh,你就一个节点一个节点运行,不要抢时间,一个个来
9. 然后要求你在每个节点上用完全的root权限执行 root.sh,你也一样,一个个来,一定要等一个做好了,然后做另外一个
10. 做第二个时候,如果告诉你你的eth0不是public,你就在第二个节点,用Oracle(大型网站数据库平台)用户在 X里面运行vipca, 然后配置好你的vip 信息(虚拟IP的信息,很容易配的)
11. clusterware 就安装好了.
确认一下.
$ /u01/app/Oracle(大型网站数据库平台)/product/crs/bin/olsnodes -n
node1pub 1
node2pub 2
或
$ ls -l /etc/init.d/init.*
-r-xr-xr-x 1 root root 1951 Oct 4 14:21 /etc/init.d/init.crs*
-r-xr-xr-x 1 root root 4714 Oct 4 14:21 /etc/init.d/init.crsd*
-r-xr-xr-x 1 root root 35394 Oct 4 14:21 /etc/init.d/init.cssd*
-r-xr-xr-x 1 root root 3190 Oct 4 14:21 /etc/init.d/init.evmd*
===============步骤三: 安装Oracle(大型网站数据库平台) 10gR2 database=======
1.1. unset 一些环境变量
$ unset ORA_CRS_HOME
$ unset Oracle(大型网站数据库平台)_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
检查你的变量
$ env | grep ORA
Oracle(大型网站数据库平台)_SID=orcl2
Oracle(大型网站数据库平台)_BASE=/u01/app/Oracle(大型网站数据库平台)
Oracle(大型网站数据库平台)_TERM=xterm
2. 用Oracle(大型网站数据库平台)用户,运行你unzip之后的那个database目录下的runInstaller
3. Oracle(大型网站数据库平台)安装目录指定到 /u01/app/Oracle(大型网站数据库平台)/product/10.2.0/db_1
4. 把2个node选择上
5. 选择 Install database Software only
6. 会要求你用完全的root权限运行 root.sh ,分别在2个node上一一运行,不要抢时间
7. 安装完毕
==================步骤四: 配置netca=================
1. Oracle(大型网站数据库平台) 用户在一个node上运行 netca
2. 选择所有node
3. 选择 Listener configuration
4.添加一个LISTEN, 1521 port
5. 回到开始界面,选择Naming Methods configuration
6. 把Local Naming和Easy Naming 添加进去.然后结束配置
7. 确认一下
$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_NODE1PUB
==============步骤五: 配置dbca创建数据库=============
1. 用Oracle(大型网站数据库平台)用户运行 dbca
2. 选择custom database
3. 输入数据库的全局名,比如orcl
4. 给你的系统的不同角色建立密码,我都选择same as ....
5. 选择用ASM管理数据库
6. 输入你前面设定的管理员密码,并把SPFILE 设定成/u02/oradata/orcl/dbs/spfile+ASM.ora
7.进入ASM配置界面, create NEW, 名字叫做DATA
然后下面你会看到你前面创建的4个ASM VOL1-4, 你选择 1 和2, "Redundancy" 选择 Normal.
这样 DATA diskgroup就创建好了
8. 回到ASM界面后. 仍旧选择create new, 然后名字叫做FLASH_RECOVERY_AREA, 选择第3和4两个卷,然后"Redundancy" 选择External
9. 然后OK结束ASM配置
10.Database File Locations 选择DATA
11. Recovery Configuration 选择刚才创建的 FLASH_RECOVERY_AREA diskgroup
12. 接下来默认的就可以了
13. Database Services 这里,你选择Add你一个新的service, 随便叫名字,比如ractest
然后选择 TAF Policy,是Basic
14. 开始创建数据库
===================步骤六: 校验RAC===============
1.用Oracle(大型网站数据库平台)用户login, 运行
$ srvctl status database -d orcl
Instance orcl1 is running on node node1pub
Instance orcl2 is running on node node2pub
2.
$ srvctl status service -d orcl -s ractest
Service orcltest is running on instance(s) orcl2, orcl1
3.
$ srvctl status nodeapps -n node1pub
VIP is running on node: node1pub
GSD is running on node: node1pub
Listener is running on node: node1pub
ONS daemon is running on node: node1pub
4.
$ srvctl status asm -n node1pub
ASM instance +ASM1 is running on node node1pub.
5.
$ srvctl config nodeapps -n node1pub -a -g -s -l
VIP exists.: /node1vip/192.168.1.111/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.
6. 运行 sqlplus /nolog
SQL> connect /as sysdba
SQL>
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1 1 orcl1 YES OPEN ACTIVE NORMAL node1pub
2 2 orcl2 YES OPEN ACTIVE NORMAL node2pub
7.其他的测试,测试方法n多,你用sqlplus, asmcmd, 或者通过Web进 enterprise manager都可以.
随便你了.
更多精彩
赞助商链接