一、Fail over
-----------------------------------------------------------------
clinet-side connect time fail over的TNS的配置
dbkt.world =
(DESCRIPTION =
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbkt.world)
))
------------------------------------------------------------------
TAF_failover
TAF fail over的配置
dbkt.world =
(DESCRIPTION =
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbkt.world)
(FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(backup= dbkt.bak))
)
)
dbkt.bak =
(DESCRIPTION =
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbkt.world)
(FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(backup= dbkt.world))
)
)
client-side connect time fail over和TAF fail over的区别, 在client-side connecnt time fail over
连接的节点挂了以后,必须重接连接。但是使用TAF fail over连接。用户感觉不到连接的节点的问题。
----------------------------------------------------------------------
server-side TAF
第3种方式是server-side taf,单从名字上就可以猜测和TAF有一定的联系。可以把server-side TAF看作是TAF的一个变种。
首先SERVER-SIDE TAF也是TAF,SERVIER-SIDE TAF是在服务器端配置,而不像是在客户端配置的。
server-side taf,从配置参数而言,server-side taf和taf相比多了一个instance role(实例角色)的概念,所谓实例角色
就是相当于多个instance参与了一个service时,可以优先配置使用哪一个instance为用户服务,用户共有两种可选角色。
preferred:首选角色:会优先选择拥有这个角色的实例提供服务。
available: 后备角色,用户连金额会优先选用preferred 的instance,当preferred的instance不可以用,才会转到available的
instance上。
要想使用server-side taf必须配置service ,service可以创建数据库时创建,也可以数据库创建以后修改,既可以通过配置向导
也可以通过命令行方式配置,下面采用手工配置。
使用srvctl命令配置service
1、创建service
srvctl add service -d -s -r "preferred-instance-list" -a "available-instance-list" -p ;
srvctl add service -d devdb -s test_devdb -r devdb1 -a devdb2 -P preconnect;
2、 查看配置
srvctl config service -d devdb -s test_devdb
3、是否自动运行service
srvctl enable/disable service -d devdb -s test_devdb -i devdb1
srvctl enable/disable service -d devdb -s test_devdb -i devdb2
测试:
srvctl enable service -d devdb -s test_devdb -i devdb1
srvctl enable service -d devdb -s test_devdb -i devdb2
4、启动service
srvctl start service -d -s -i instance-name -o start-option -c connect-string -q
如果不指定sevice-name,则所有的service都会被启动,可以使用逗号分隔方式,同时启动多个service,-i 指定在哪个实例上启动service.
srvctl start service -d devdb -s test_devdb -i devdb1
5、停止 service
srvctl stop service -d -s -i instance-name -c connect-string -q -f
其中-f选项可以强制关闭service,并中断了其所有的用户的连接。
6、查看service状态
srvctl status service -d database-name -s service-name -f -v
其中-f 选项可以显示被disable的instance信息,而-v选项可以详细输出。
7、 删除service
srvctl remove service -d database -name -s service-name -i instance-name [-f]
在使用srvctl创建service时,需要注意taf策略选项必须通过dbms_service包来配置。
(1)、添加之前,查看系统现有的service:
SQL>show parameter service;
(2)、使用srvctl命令创建 test_rac服务:
srvctl add service -d devdb -s test_devdb -r devdb1 -a devdb2 -P preconnect;
(3)、启动这个服务
srvctl start service -d devdb -s test_devdb
(4)、确认这个service可用
show parameter service
(5)、修改TAF的service端配置
begin
dbms_service.modify_service(
service_name=>'test_devdb',
failover_method=>dbms_service.failover_method_basic,
failover_type=>dbms_service.failover_type_select,
failover_retries=>180,
failover_delay=>5
);
end;
(6)、确认已经生效
select name,failover_method,failover_type,goal,clb_goal from dba_services;
(7) 测试完成清理测试环境
srvctl stop service -d devdb -s test_devdb
srvctl disable service -d devdb -s test_devdb
删除服务
srvctl remove service -d devdb -s test_devdb
OCR中的内容被删除了,但是数据字典里还是有service的内容,继续清除数据字典里的内容。
查看数据字典内容:
select name,failover_method,failover_type,goal,clb_goal from dba_services;
删除数据字典里的内容
begin
dbms_service.delete_service(service_name=>'test_devdb');
end;
确认数据字典清除
select name,failover_method,failover_type,goal,clb_goal from dba_services;
ORACLE Clusterware HA框架
Oracle clusterware 10是作为一个单独的产品发布,虽然基于它能够构建ORACLE DATABASE高可用
负载均衡集群RAC,但是Oracle clusterware功能绝不仅限与此,oracle把这个产品定位于独立的集群产品
Load Balance
load balance就是把负载平均分配到集群中的各个节点,从而提高整体的吞吐能力。oracle 10g rac
提供了两种手段分散负载,其一就是通过connection balancing,按照某种算法把用户分配到不同的节点,
其二,通过service在应用层面上进行分散
1、存技术的分散负载
2、面向业务的分散负载
connection balancing
connection balancing 这种负载均衡在用户连接这个层次进行的,也就是用户请求建立连接时,根据每个
节点的负载决定把连接分配给哪个实例上,而一旦连接建立以后,会话的所有的操作都在这个实例上完成,而不
再分配到其他实例。
connection balancing有客户端和服务器端的两种方式。
1、客户端均衡(client-side LB)
这个是oracle8使用的办法,配置方法是在tnsnames.ora中加入LOAD_BALANCE=YES条目,当客户端发起连接时,会从地址列表中
随机选取一个,再使用随机算法把请求分散到各个实例
一个客户端负载连接的实例:
Client-sid LB
devdb =
(DESCRIPTION =
(LOAD_BALANCE=YES)
(FAILOVER=ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.131)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.132)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test_devdb)
)
)
这种方法缺点很明星,因为在分配连接时没有考虑各个节点的真实负载,最后分配给不一定是平衡的,并且随机算法
需要时间片,如果在短时间内同时发起多个连接,这些连接都可能都被分配到一个节点上,甚至更坏的情况下,连接可能会
分配到故障节点上。
2、服务器端的负载均衡(server-side LB)
服务器端负载均衡的实现依赖于listener收集的负载信息,在数据库运行过程当中,PMON后台进程会收集系统的负载信息
然后登记到listener中,最少1分钟,最多10分钟PMON会更新一次信息,如果节点的负载过高,更新频率也越高,保证listener能够掌握
每个节点的准确的负载情况,如果listener关闭,PMON会每隔一秒检查listener是否重启
PMON进程不仅会向本地的listener注册,还可以向其他节点上的listener注册,但到底向何处注册,是由remote_listeners和local_listener
两个参数决定。local_listener和remote_listeners需要注册,参数项是一个tnsnames项。
在TNSNAMES.ORA中加入:
LISTENERS_DEVDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
)
)
在本地listener.ora中去掉SID_LIST动态注册的条目
alter system set remote_listener='LISTENERS_DEVDB' sid='*';
阅读(2362) | 评论(0) | 转发(0) |