Re: Распределение временных файлов по дискам

ash2k - ash2kk на gmail.com
Чт Май 6 08:48:13 MSD 2010


5 мая 2010 г. 13:58 пользователь Sergey Shepelev <temotor at gmail.com> написал:
>>> Один из вариантов такой: поднять кластерную файловую систему. По узлу
>>> на каждом диске. Этих ФС сейчас как грязи, многие работают поверх
>>> другой ФС. Примонтировать её в одну точку. Заодно потом будет
>>> прозрачный переход на несколько машин, когда на этой диски закончатся.
>>
>> Да, наверное так можно сделать, только у меня итак на всех этих дисках
>> MogileFS и файлы загружаются туда асинхронно скриптом после записи их
>> nginx'ом во временное место хранения.
>
> Хорошо, тогда классический вариант для раздачи с разных дисков:
> поднять по одному nginx на каждый диск, аплоады балансить на них.
У меня на двух фронт серверах стоит кроме всего прочего haproxy,
проксирующий загружаемые файлы на backend сервера-хранилища на nginx,
откуда они загружаются в MogileFS. Можно настроить haproxy для
распределения запросов не по серверам, а по их дискам - для каждого
диска в сервере создать отдельный "сервер" в конфиге haproxy:

Часть предполагаемого конфига haproxy:
backend uploadserver
        balance         url_param X-Progress-ID
        server          storage1 ip1:8001 #это винт 1 сервера 1
        server          storage1 ip1:8002 #это винт 2 сервера 1
        server          storage1 ip1:8003
        server          storage1 ip1:8004

        server          storage2 ip2:8001 #это винт 1 сервера 2
        server          storage2 ip2:8002
        server          storage2 ip2:8003

тогда потребуется один nginx на каждом сервере. Хотел сделать как-то
так, но upload_store оказывается переменные не понимает (почему?):

http {
	map $server_port $store_path {
		8001 /mnt/hd1;
		8002 /mnt/hd2;
		8003 /mnt/hd3;
		8004 /mnt/hd4;
	}
	server {
		listen ip1:8001;
		listen ip1:8002;
		listen ip1:8003;
		listen ip1:8004;
		...
	
		location = /upload {
			upload_store $store_path;
			...
		}
	}
}

Видимо придется делать несколько server на разных портах с разными
директивами upload_store, а include поможет избежать излишнего
дублирования.
Спасибо, то, что нужно.


Подробная информация о списке рассылки nginx-ru