listeners in 11gR2 RAC

Посмотрев   в listener.ora в на узле 11gR2 я сильно удивился.

Теперь там дословно написано вот это:

LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent

и появился файл endpoints_listener.ora

в котором написано вот это:

LISTENER_PROD01=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=prod01-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.25)(PORT=1521)(IP=FIRST))))          # line added by Agent



Мне не удалось найти в документации что такое endpoints_listener, что значит  ENABLE_GLOBAL**.   Если кто-нибудь меня ткнет в документацию - будет замечательно. Понятно, что теперь пользователи подсоединяются на scan и потом уже на listener  конкретной ноды, понятно что теперь нужно ставить local_listener на LISTENER (теперь имена листенеров одинаковы на всех узлах) а remote_listener на listener-scan, т.е. мне кажется я понимаю как это работает - но я не понимаю что значат слова в конфигурационых файлах и зачем их два.

Появилось несколько новых параметров команды srvctl

prod01-> srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node prod01
prod01-> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): prod02,prod01
prod01-> srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node prod01


И наконец феерическое:


Bug 8595653
The endpoints_listener.ora file is used to get endpoints of the default listener when data files of Oracle Database 11g Release 1 or Oracle Database 10g Release 2 are created on a release 11.2 Oracle ASM disk group. However, when the listener is modified (such as changing a port number using Network Configuration Assistant), the endpoints_listener.ora file is not updated.

Что такое scan достаточно хорошо описано тут.  Но сегодня мне задали идиотский вопрос - если один из scan listener'ов упадет ведь клиенты будут попадать на него и получать tcp/ip timeout ? Оказывается нет, потому что scan живет поверх scan vip ip, его поднимут другие узлы и клиент быстро поймет что его там никто не ждет. Теперь на public interface любого узла кластера живет 3 адреса - vip, scan vip, public этого узла. Никто не отменял что в случае падения узла, на выживших появится vip с упавшего.  Объяснить почему у меня на интерфейсе 4 новых ip адреса я затруднился ограничившись техническим термином "так надо, главное ничего не менять".

Коротко - scan приляпали сверху ко всем,  что существовало в 10g/11gR1 постаравшись все сохранить. Обяъяснить зачем все это нужно стало практически нереально. Просто ничего не трогайте после установки  -)

Update 1: совсем просмотрел во что installer поставил параметры local/remote listener. Теперь их хотя бы стали ставить при установке (на самом деле деваться некуда), но вот почему не через tnsnames, опять загадка -)


SQL> show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                 DRESS=(PROTOCOL=TCP)(HOST=192.
                                                 168.1.31)(PORT=1521))))

SQL> show parameter remote

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_dependencies_mode             string      TIMESTAMP
remote_listener                      string      rac-scan.us.oracle.com:1521

4 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. SCAN, похоже, дополняет TAF в какой-то мере.

    Допустим у нас есть java-приложение, которое использует следующий connect string:
    jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
    (ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=service)))

    А теперь внимание, вопрос. Что делать если у нас добавляется новый узел в кластер БД?
    Приложение же про него ничегошеньки не знает! Если б оно использовало LDAP в качестве определения TNS-имен, то пропасло бы при следующем обращении. А если прописано статиком как в примере выше - тогда как говорится, ой. Требуется переконфигурирование JDBC Connection Pool. С (о, ужас) возможным перестартом веб-сервера!
    С sqlplus то же самое. Требуется как минимум переконфигурирование tnsnames.ora. И перестарт сессии для перечитки файла.

    А тут все типа упрощается. Прописал что-то вроде
    jdbc:oracle:thin:@sales1-scan:1521/oltp и добавляй себе узлы в кластер на здоровье. Прописать новые ноды в SCAN-листенер и он направит клиента на TNS-листенер, в том числе и на новый.

    Ну а почему SCAN висит на virtual ip понятно - вдруг одна нода со scan-листенером упадет - его поднимет другая нода.

    Это типа такое удобство администрирования кластера БД в динамичной среде, к примеру, из веб-серверов и тыщи простых TNS-клиентов. :-)

    Другого объяснения пока нет.
    Для обычного резолвинга TNS прекрасно работает LDAP.

    ОтветитьУдалить
  3. Ну вот и познал я на своей шкурке зачем именно нужен SCAN Listener.
    Погасил одну ноду кластера. vip перешел на другую. И казалось бы, все хорошо, ан нет! Listener на узле 2 ен сконфигурирован чтобы слушать новый для него ip-адрес!
    И приложение колбасится в vip (который живет), по которому нет листенера.
    Конечно, можно ручками сделать alter system, задать remote и local листенеры. Кстати, я не вполне понимаю почему oracle сам этого не сделал.
    Но можно использовать для этого связку scan+services+vip.
    При сбое узла vip перекидывается на свободный узел, service надо чтобы пошел за ним же, а scan должен пропасти какие листенеры живы и где какие сервисы. И дальше уже форвардить запросы пользователя.
    Вот и полезное применение для scan-листенера.

    Или оно все-таки само должно переконфигурить и перестартить листенер на том хосту куда vip переместился? Лично у меня (11.2.0.2) этого не произошло.

    ОтветитьУдалить
  4. >перестартить листенер на том хосту куда vip переместился?

    Нет, не должно. Нужно соединяться через scan, все остальные способы не поддерживаются, по крайне мере by design. Я так понимаю.

    ОтветитьУдалить