listeners in 11gR2 RAC
Посмотрев в listener.ora в на узле 11gR2 я сильно удивился.
Теперь там дословно написано вот это:
и появился файл endpoints_listener.ora
в котором написано вот это:
Мне не удалось найти в документации что такое 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
Что такое 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
Теперь там дословно написано вот это:
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
Этот комментарий был удален автором.
ОтветитьУдалить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.
Ну вот и познал я на своей шкурке зачем именно нужен SCAN Listener.
ОтветитьУдалитьПогасил одну ноду кластера. vip перешел на другую. И казалось бы, все хорошо, ан нет! Listener на узле 2 ен сконфигурирован чтобы слушать новый для него ip-адрес!
И приложение колбасится в vip (который живет), по которому нет листенера.
Конечно, можно ручками сделать alter system, задать remote и local листенеры. Кстати, я не вполне понимаю почему oracle сам этого не сделал.
Но можно использовать для этого связку scan+services+vip.
При сбое узла vip перекидывается на свободный узел, service надо чтобы пошел за ним же, а scan должен пропасти какие листенеры живы и где какие сервисы. И дальше уже форвардить запросы пользователя.
Вот и полезное применение для scan-листенера.
Или оно все-таки само должно переконфигурить и перестартить листенер на том хосту куда vip переместился? Лично у меня (11.2.0.2) этого не произошло.
>перестартить листенер на том хосту куда vip переместился?
ОтветитьУдалитьНет, не должно. Нужно соединяться через scan, все остальные способы не поддерживаются, по крайне мере by design. Я так понимаю.