local_listener 與 remote_listener 引數說明
http://blog.csdn.net/tianlesoftware/article/details/6087045
一. LOCAL_LISTENER 和 REMOTE_LISTENER說明
1.1 LOCAL_LISTENER
官網資訊如下:
Property |
Description |
Parameter type |
String |
Syntax |
LOCAL_LISTENER = network_name |
Default value |
(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)) where hostname is the network name of the local host. |
Modifiable |
ALTER SYSTEM |
Basic |
No |
LOCAL_LISTENER specifies a network name that resolves to an address or address list of Oracle Net local listeners (that is, listeners that are running on the same machine as this instance). The address or address list is specified in the TNSNAMES.ORA file or other address repository as configured for your system.
1.2 REMOTE_LISTENER
官網說明:
Property |
Description |
Parameter type |
String |
Syntax |
REMOTE_LISTENER = network_name |
Default value |
There is no default value. |
Modifiable |
ALTER SYSTEM |
Basic |
Yes |
REMOTE_LISTENER specifies a network name that resolves to an address or address list of Oracle Net remote listeners (that is, listeners that are not running on the same machine as this instance). The address or address list is specified in the TNSNAMES.ORA file or other address repository as configured for your system.
二. LOCAL_LISTENER 與動態註冊
關於動態註冊,參考我的Blog:
Oracle Listener 動態註冊 與 靜態註冊
動態註冊是在instance啟動的時候,PMON程式根據init.ora中的instance_name,service_names兩個引數將例項和服務動態註冊到listener中。
註冊到監聽器中的例項值從init.ora檔案中的instance_name引數取得。如果該引數沒有設定值,那麼它將取init.ora檔案中的db_name的值。如果在RAC中配置,您必須將叢集中每個例項的instance_name引數設定為一個唯一的值。
註冊到監聽器中的服務值從init.ora檔案中的引數service_names取得。如果該引數沒有設定值,資料庫將拼接init.ora檔案中的 db_name和db_domain的值來註冊自己。如果選擇提供service_names值,您可以使用完全限定的名稱(比如 orcl.oracle.com)或縮寫的名稱(比如orcl)。如果選擇縮寫的名稱並設定了db_domain引數,註冊到監聽器中的服務將是 service_name值和db_domain值的拼接。
這裡要注意的是:動態註冊預設只註冊到預設的監聽器上(名稱是LISTENER、埠是1521、協議是TCP),因為pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,如果需要向非預設監聽註冊,則需要配置local_listener引數。
因此我們看到了LOCAL_LISTENER的作用。 監聽的埠預設是1521,但是很多情況下,處於安裝考慮,不會使用1521埠,因為在這種情況下使用動態註冊就需要配置LOCAL_LISTENER引數。
將監聽的資訊新增到tnsnames.ora 檔案中。 因為pmon在動態註冊監聽時要從tnsnames.ora中讀取相關資訊。
LISTENER _RACDB1 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT =1522))
)
然後以sys使用者修改local_listener引數:
SQL> alter system set local_listener= LISTENER _RACDB1;
也可以直接指定:
SQL> alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1522))';
這樣,在DB啟動的時候,就會自動的把instence_name 和service_name註冊到監聽。 如果在這期間,監聽重啟了,監聽裡的資訊也會丟失,這時就需要手動的把資訊註冊到監聽:
SQL> alter system register;
三. LOCAL_LISTENER, REMOTE_LISTENER 與RAC CLIENT-SIDE TAF 和 LOAD BALCANING
3.1 引數說明
在Blog:
Oracle RAC Failover 詳解
中對RAC的Failover做了分類:Client-Side TAF 和 Server-side TAF.
Service-SideTAF是在伺服器上配置的,Client-Side TAF是在客戶端配置的。
Client-Side TAF 是在客戶端修改tnsnames.ora 檔案來配置的,如果有很多客戶端使用這個資料庫,那麼每次微笑調整都需要把所有的計算機更改一遍,既低效又容易出錯。而Service-Side TAF 透過結合Service,在資料庫裡儲存FAIL_MODE的配置,把所有的TAF配置儲存在資料字典中,從而省去了客戶端的配置工作,客戶端的TNS檔案就不需要任何TAF的配置選項了。
關於Server-side TAF 配置參考Blog:
How To Configure Server Side Transparent Application Failover [ID 460982.1]
http://blog.csdn.net/tianlesoftware/archive/2010/12/20/6086728.aspx
LOCAL_LISTENER 和 REMOTE_LISTENER 這2個引數就是配置Client-Side TAF的。
官網的配置參考:
10g & 11g Configuration of TAF(Transparent Application Failover) and Load Balancing [ID 453293.1]
http://blog.csdn.net/tianlesoftware/archive/2010/12/19/6085529.aspx
3.2 Client-Side TAF 配置
3.2.1主機資訊如下
Node1:
Hostname: node1.idc.oracle.com
VIP Hostname: node1-vip.idc.oracle.com
Database Service_names: service.idc.oracle.com
SID: sid1
Node2:
Hostname: node2.idc.oracle.com
VIP Hostname: node2-vip.idc.oracle.com
Database Service_names: service.idc.oracle.com
SID: sid2
3.2.2 Node1配置
(1)修改Listener.ora檔案
LISTENER_NODE1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip.idc.oracle.com)(PORT = 1521)(IP=FIRST)) --私有IP
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.idc.oracle.com)(PORT = 1521)(IP=FIRST)) --public IP
)
)
(2)啟動Listener
$ lsnrctl start LISTENER_NODE1
(3)修改Tnsnames.ora檔案
NODE1_LOCAL=
(ADDRESS = (PROTOCOL = TCP)(HOST=node1-vip.idc.oracle.com)(PORT = 1521))
測試:
$ tnsping node1_local
(4) 設定node1的local_listener引數
sql > alter system set LOCAL_LISTENER='node1_local' scope=both sid='sid1' ;
3.2.3 NODE2 配置
(1)修改Listener.ora檔案
LISTENER_NODE2=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST=node2.idc.oracle.com)(PORT=1521)(IP=FIRST))
(ADDRESS=(PROTOCOL=TCP)(HOST=node2-vip.idc.oracle.com)(PORT=1521)(IP=FIRST))
)
)
(2)啟動Listener
$ lsnrctl start LISTENER_NODE2
(3)修改Tnsnames.ora檔案
NODE2_LOCAL=
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip.idc.oracle.com)(PORT = 1521))
驗證:
$ tnsping node2_local
(4)設定local_listener 引數
sql > alter system set LOCAL_LISTENER='node2_local' scope=both sid='sid2' ;
3.2.4 在node1和node2的 tnsnames.ora 檔案新增如下內容
NODE_REMOTE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=node1-vip.idc.oracle.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST=node2-vip.idc.oracle.com)(PORT = 1521))
)
)
測試:
$ tnsping node_remote
3.2.5 在所有節點設定remote listener
sql> alter system set REMOTE_LISTENER='node_remote' scope=both;
3.2.6 在客戶端設定的tnsnames.ora 設定TAF
RACTAF=
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE = yes)
(FAILOVER=ON) -- 這個引數是預設值,可以不寫
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip.idc.oracle.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip.idc.oracle.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = service.idc.oracle.com)
(failover_mode=(type=select)(method=basic))
)
)
當客戶端發出連線請求給Server端listener的時候,透過local_listener註冊的服務接收這個連線請求,然後由master instance來決定這個連線請求應該由哪個目標instance發出server process響應這個連線請求。如果啟用負載均衡,那麼主節點會選擇cpu負載最小的那個instance,此時:
如果master分配的目標instance是local listener machine,那麼直接透過local
server listener,開啟後臺的server process,處理發出conn的客戶端,建立連線,處理會話;
如果master分配的目標instance不是local listener machine,那麼會透過remote_listener這個引數,把連線請求轉移到remote
machine上的listener, 然後由remote service listener發出一個server process返回客戶端,建立連線,處理會話.
當conn建立連線以後,listener就沒有用了,不會再用到了,如果這個時候,已經連線的那個instance down了,會重新由新分配的master instance透過remote_listener切換到可用instance,此時客戶不會發現連線中斷。conn 和 select操作是不會中斷的。
當例項1註冊監聽的時候,即使節點2的instance沒有啟動,也會透過remote_listener在節點2
server上註冊相應的listener1. 它是在資料庫啟動的時候,新增到相應的listener service裡的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2151297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysqldump引數說明MySql
- TOP引數說明
- Oracle Table建立引數說明Oracle
- GoldenGate HANDLECOLLISIONS引數使用說明Go
- linux常用核心引數說明Linux
- mydumper和myloader引數使用說明
- Nginx的gzip配置引數說明Nginx
- PHP中$_SERVER的常用引數與說明——收錄篇PHPServer
- Mysql my.cnf部分引數說明MySql
- /etc/sysctl.conf部分引數說明
- mysql relay log相關引數說明MySql
- Azure Blob (三)引數設定說明
- 所有初始化引數說明(轉)
- pytest(10)-常用執行引數說明
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- makefile中的一些引數說明
- MySQL Galera cluster叢集常用引數說明MySql
- MogDB 2.1.1 初始化引數概要說明
- 介紹tomcat Connector 引數優化說明Tomcat優化
- pt-online-schema-change使用引數說明
- 【cartographer_ros】七: 主要配置引數說明ROS
- Java Out Of Memory解決之JAVA_OPTS引數說明與配置Java
- remote_listener引發的故障分析REM
- 關於xtrabackup --slave-info引數的說明
- ABAP-BITMAP的命令引數的使用說明
- C10-05-1-Nmap常用引數說明
- 資料泵的TRANSFORM引數說明及使用ORM
- gnupg2 2.2.20版本,命令引數說明
- openssh版本更新與說明 openssl版本更新與說明
- 插曲:Kafka的生產者原理及重要引數說明Kafka
- 關於 navigator.mediaDevices.getUserMedia 的輸入引數說明dev
- 桌上型電腦電源相關引數說明
- jquery datatables各引數詳細說明及簡單應用jQuery
- PbootCMS模板呼叫幻燈片輪播圖及引數說明boot
- 細說函式返回值與引數函式
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- PHP擴充套件資料庫連線引數說明詳解PHP套件資料庫
- 【LVS】簡介與說明
- 瑞芯微平臺PX30處理器和晶片引數說明晶片