----------------------版权所有,转载请注明出处-----------------------------------------
在RAC中,两个机器用的是同一份数据文件,但由于两个机器使用的是两个不同的IP,所以需要F5把这两个机器虚拟成一个服务器,来达到负载均衡和灾难冗余。
在此介绍一下,F5(版本9.1.1)中设置Oracle‘s Monitor的过程和细节问题。
一,新建一个Monitor,类型(Type)为Oracle,然后选择高级设置(Advanced),高级设置比基本设置要多两个设置项的,一个是目标端口(Port),一个是目标地址(Address),具体设置会在后面介绍。
二,针对具体情况设置合适的监控间隔(Interval)和超时(Timeout),确定的是超时一定要比监控间隔要大,否则F5会认为服务是不可用的(Down)。
三,设置请求字符串(Send String),一般说来Send String是一个Select查询,通过执行Select 查询的返回值来确定Oracle数据库的服务是否是可用的,注意的是在这个请求字符串中,不用“;”做为结束标志,受SqlPlus影响可能会错误地设置“;”,这时如果打开DEBUG的话会看到这样的一句“ORA-00911: invalid character”。
四,设置收到字符串(Receive String ),收到字符串是期望从请求字符串得到的东西,通过收到字符串来认为Oracle数据库服务可用与否。
五,用户名和密码,这个是执行Select的认证,一般不正确的话,会在Debug中看到“ORA-01017: invalid username/password;”。建议不要使用sys用户。
六,数据库名和实例名,如果错误的话在Debug会报“Io exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093120)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))”这样的错误。
七,接收的行(Receive Row)和接收的列(Receive Column),这两个参数可以说是收到字符串的坐标,通过接收的行和接收的列来确定收到字符串在请求字符串在返回值中的位置,如果这个设置错了话,可以在Debug中看到有Select语句执行:
Recvd: 'Preparing SQL statement
'
Recvd: 'Executing the query: select monitor from f5
'
Recvd: 'MONITOR
'
Recvd: 'Checking the result...
'
Recvd: 'shiyan
'
Recvd: '!Down!
但结果还是Down!,这个说明在接收的行和接收的列以前的关于数据库和Select参数配置都正确,但收到字符串和期望的不同。
八,地址别名,建议不设置。
九,端口别名,建议设置为1521,这样的话可以在池(Pool)设置服务为所有的服务,推荐池中为所有服务。
十,另,如果在Oracle新建表,注意一定不要用char类型,这个类型为固定长度的,如果值的长度小于规定长度,就会出错,类似:
Recvd: 'Invalid result: 'shiyan ' does not equal 'shiyan*'!
'
Recvd: '!Down!
'
Error receiving up/down message
最好用Varchar字符类型,这个字符类型。
十一,关于于Debug,F5的Monitor是用JDBC做的,所以在Debug中可以看到很多JDBC的东西,根据Debug中的JDBC信息,很容易就可以设置一个Oracle Monitor。
附一个正确配置文件:
monitor Oracle_monitor_8_shiyan {
defaults from oracle
database "lbs2"
debug "no"
password "copyright"
recvcolumn "1"
recvrow "1"
recv "copyright"
send "select monitor from f5"
username "system"
}