Добрый день, уважаемые читатели! Хочу дать несколько простых рецептов, пока сам не забыл. На днях пришлось разбираться с балансировщиками нагрузки, не смотря на совершенную непохожесть на IOS-based устройства, эти железки оказались удивительно просты в конфигурировании.
Первое, с чего мы начнем — это обновление программного обеспечения и создание комфортного режима работы.
Настройка управляющего интерфейса:
CSS11503# conf t
CSS11503(config)# boot
CSS11503(config-boot)# ip address 192.168.1.2
CSS11503(config-boot)# subnet mask 255.255.255.0
CSS11503(config-boot)# gateway address 192.168.1.1
Зададим отображаемое в консоли имя устройства (не более 16 символов):
CSS11503# prompt megabalanser
megabalanser# save_profile
Обновим программное обеспечение:
megabalanser# archive script admin-profile
megabalanser# save_profile
megabalanser(config)# ftp-record ftpname 10.10.10.10 ftpuser "ftppassword"
megabalanser# copy ftp ftpname sg0820601.adi boot-image
megabalanser(config)# boot
megabalanser(config-boot)# unpack sg0820601.adi
megabalanser(config-boot)# primary boot-file sg0820601
megabalanser(config-boot)# reboot
Are you sure you want to reboot the system, [y/n]:y
** Message from [admin] **
System Reboot from:vty1, All sessions will terminate...
**
...
megabalanser# restore admin-profile script
Создаем нашу конфигурацию. Предположим, что у нас есть сеть 192.168.200.0/24, в кторой расположены 2 сервера: 192.168.200.100 и 192.168.200.101. Адрес балансировщика в этой сети — 192.168.200.10. Адрес внешнего интерфейса балансировцика — 192.168.100.10/24. Здесь и далее приводятся примеры из конфигурационного файла, без указания заголовка командной строки.
ip route 0.0.0.0 0.0.0.0 192.168.100.1 1
interface 2/1
bridge vlan 10
interface 3/1
bridge vlan 20
circuit VLAN10
description "--- External ---"
ip address 192.168.100.10 255.255.255.0
circuit VLAN20
description "--- Internal ---"
ip address 192.168.200.10 255.255.255.0
Выполним конфигурирование простой балансировки между двумя серверами. Для того, чтобы нас на спрашивали подтверждения на создание сервисов, можно включить режим expert. В моем случае, проверка доступности серверов осуществляется путем отправки GET запроса к серверу, получаемый ответ (я оправляю «OK») анализируется и сравнивается с эталонным значением. Первым этапом описываем сервисы.
service server-1
port 80
ip address 192.168.200.100
keepalive type http
keepalive method get
keepalive uri "/ping.html"
keepalive hash "e0aa021e21dddbd6d8cecec71e9cf564"
active
service server-2
port 80
ip address 192.168.200.101
keepalive type http
keepalive method get
keepalive uri "/ping.html"
keepalive hash "e0aa021e21dddbd6d8cecec71e9cf564"
active
Создаем владельца («owner») и контент. Понятие «владелец» необходимо только для удобства администрирования. обратите внимание на используемый метод балансировки — большинство современных приложений потребуют что бы пользователь, в рамках сессии, общался с одной и той же нодой. В качестве адреса контента, куда будут обращаться пользователи, будет выступать 192.168.100.11.
owner site-1
content site-http
vip address 192.168.100.11
add service server-1
add service server-2
advanced-balance sticky-srcip-dstport
port 80
protocol tcp
active
Так как мы, наверняка, хотим, чтобы ответы пользователям так же возвращались с адреса 192.168.100.11, то необходимо создать соответствующую группу:
group site-http
add destination service server-1
add destination service server-2
vip address 192.168.100.11
active
Давайте проверим, что же у нас получилось:
megabalanser# sh group site-http
Group: site-http - Active (192.168.100.11 Not Redundant)
Session Redundancy: Disabled
Last Clearing of Stats Counters: 01/24/2013 21:44:18
Associated ACLs: NONE
Source Services:
NONE
Destination Services:
DNS
Name: Hits: State: Load: Trans: Keepalive: Conn:
----- ----- ------ ----- ------ ---------- -----
server-1
0 Alive 2 0 HTTP-80:GET 0
server-2
0 Alive 2 0 HTTP-80:GET 0
Group Service Total Counters:
Hits/Frames/Bytes: 0/0/0
Connections Total/Current: 0/0
FTP Control Total/Current: 0/0
Total No Portmap Errors: 0
А теперь представим, что у вашего балансировщика есть SSL-модуль, и вы хотите им поспользоваться для организации безопасного подключения пользователей к сервису. Нам понадобиться сформировать запрос на сертификат (или сделать самоподписанный), настроить модуль и создать группы.
Генерируем ключ:
ssl genrsa rsakeyfiletest 1024 "password"
Привязываем ключ к файлу:
ssl associate rsakey rsa-test-name rsakeyfiletest
Вот тут мы можем пойти двумя путями — или создаем самоподписанный сертификат или генерируем Certificate Signing Request (CSR). В случае CSR нам необходимо скопировать вывод и предоставить его в CA, для выдачи сертификата:
ssl gencsr rsa-test-name
-----BEGIN CERTIFICATE REQUEST-----
MIIB0DCCATkCAQAwgY8xCzAJBgNVBAYTAlJVMQ8wDQYDVQQIEwZNb3Njb3cxDzAN
BgNVBAcTBk1vc2NvdzEcMBoGA1UEChQTUm9zc2dvc3N0YWtoIExyf3RkLjEQMA4G
A1UECxQHVGVsY28gfzERMA8GA1UEAxQIKi5yZ3MucnUxGzAZBgkqhkiG9w0BCQEW
DHRlbGNvQHJncy5ydTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxZTYAx/o
VA4KzpX7pq4013egDFC1BfVDRzWJJhno7k5K4ydPrmVZhECKormSebSGBL00cFKs
M8ve7WGW370YxaIKbKZBFF88Dz+PbtphpcneN1DWakmz7H063tiUl4zb2cv09cMn
XTKIgL6z5RyVyqjMtC5ba5XWVGdeD25N6OkCAwEAAaAAMA0GCSqGSIb3DQEBBAUA
A4GBABRNbvf4a3SC8RZdSoaOjwuRvqs5rgO3z+CPlgqER7xQZx/FVOHu6y9fv6bZ
hiq0bP1meRmMDmb2aXbk2RysVeKRIY6c6fYrhuddT8gd4E0BkIVF299D4m2nqLyQ
SK0X9VaLIVD59oX2BYNBXpFiXNdv1nmwZL4uNP6I4D5dXgVo
-----END CERTIFICATE REQUEST-----
Генерируем самоподписанный сертификат:
ssl gencert certkey rsa-test-name signkey rsa-test-name certfiletest "password"
Привязываем сертификат к файлу:
ssl associate cert cert-test-name certfiletest
Или импортируем сертификат, после чего привязываем его к файлую Обратите внимание, что пароль должен соответствовать паролю ключа, с которым генерировался CSR. Как вы могли заметить, при использовании SSL модуля у нас появляется функционал сжатия трафика. Если вы используете несколько SSL-модулей, то можно настроить балансировку между ними, добавив строку advanced-balance ssl в описание контента (в примере — «content site-https»).
copy ssl ftp ftpname import mycert.crt PEM "password"
ssl associate cert mycert-name mycert.crt
С сертификатами разобрались, теперь настраиваем логику:
ssl-proxy-list my-ssl
ssl-server 10
ssl-server 10 rsacert mycert-name
ssl-server 10 rsakey rsa-test-name
ssl-server 10 cipher rsa-with-rc4-128-md5 192.168.100.11 80
ssl-server 10 vip address 192.168.100.11
service ssl_module
type ssl-accel
keepalive type none
compress encode force-gzip
slot 3
compress accept-omit gzip
compress type default
add ssl-proxy-list my-ssl
active
content site-https
vip address 192.168.100.11
add service ssl_module
port 443
protocol tcp
application ssl
active
Обратите внимание, что балансировщик весьма вольно обращается с порядком строк внутри сервисов :-(. Если вы привыкли, чтобы все было параллельно и перпендикулярно, то лучше удалять сервис целиком и заводить его заново, а не удалять старые и вставлять новые строки.
Используемая литература:
Cisco CSS 11500 Series Content Services Switches Configuration Guides
P.S. С учетом того, сколько такая техника стоит на ebay, я считаю, это неплохой вариант для организации балансировки ресурсов. Большая часть балансировщиков, сделанных до 2008 года, имеет маркировку «Made in USA», имеет приличный вес(для тщедушных инженеров это может стать проблемой) и возможность установки нескольких блоков питания, что некоторым образом говорит о надежности этих устройств 🙂
[ad name=»Google Adsense»]
Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!