Pull to refresh

Comments 14

Всегда пожалуйста :)
А какая у вас схема кластера? Интересно один ли балансировщик или используется два (три) сервера с HAProxy? И как они перехватывают управление?
А можно просто использовать LVS (linux virtual server) в режиме DR (direct routing) и не нести накладных расходов в юзерспейсе и не иметь таких проблем вообще — адрес будет оригинальный на nginx-е.
Можно и так конечно. Однако следует помнить, что haproxy довольно богат в функциональном плане и умеет еще массу полезных вещей, например проверять состояние backend'a при помощи кастомизируемых проверок, маршрутизировать через один ip разные домены при использовании TLS и т.д.

Правильно ли я понимаю, что способ маршрутизации на 4 уровне производительнее, но дает меньшую гибкость и работает не со всеми бэкэндами?
Не совсем так. В статье я показал как можно воспользоваться расширением proxy protocol, если frontend и backend его поддерживают. Без proxy protocol TCP-балансировку можно настроить на любой tcp-сервис, будь то FTP, IMAP, SQL и т.п.

И, пожалуй следует отметить, что в HAProxy так же можно использовать смешанную (http/tcp) маршрутизацию и балансировку [*]:
frontend mixed_frontend
	bind :80
	mode tcp
	option tcplog
	tcp-request inspect-delay 5s
	tcp-request content accept if HTTP
	use_backend http_backend if HTTP
	default_backend tcp_backend

   backend tcp_backend
        # tcp-only config

   backend http_backend
	# http-only config
	mode http

Таким образом можно, к примеру, расположить на 80 порту одновременно и веб-сервер и сервер SSH.
Интересная штука, надо будет попробовать.
А с HTTP протоколом оно действительно работать не должно, или я какой-то глюк словил?

nginx ругался ошибкой 400 при пустых логах. Отключаю send-proxy или перевожу haproxy в http режим — всё ок.
В Nginx обычно помогает увеличить уровень логированная до Debug.

Так же очень важно, чтобы одновременно с send-proxy на HAProxy был включен proxy_protocol на Nginx.
Попробую, но даже в access_log ничего не писалось, а там уровней логирования нет, насколько я знаю.

Включено было с обеих сторон естественно. Для HTTPS части сервера описанный тут метод у меня замечательно заработал. Хотел его же для HTTP применить.
Жаль, что Tomcat не понимает proxy protocol. Ищу возможность балансировки через tcp mode для Tomcat. Используется проприетарный протокол.
Пока все тщетно
Sign up to leave a comment.

Articles