|
|||||||
Samba, 1C, блокировки, файловая база данных
Время создания: 04.02.2012 15:59
Текстовые метки: 1C, 1С
Раздел: Компьютер - Linux - Samba
Запись: xintrea/mytetra_syncro/master/base/1328360384n358oksn0o/text.html на raw.github.com
|
|||||||
|
|||||||
Samba 1с7.7 и блокировки Уже где-то на протяжении недели танцую самбу с бубном в руках. Целью сих увлекательных манипуляций,среди всего прочего, является наличие в месте, где я осуществляю свою проф-ую деят-ть работающего(это важно)) файлового сервера Samba с базами 1с на борту (дистрибутив - ubuntu 9.10 Desktop, в начале эпопеи стоял Debian Lenny, но он не выдержал моих издевательств)). В Дебиане использовалась самба 3.25, в бубунте - 3.4.0. То, что проделывают самба на пару с 1ской после того, как к расшаренным базам подключаются хотя бы 2 пользователя, совместной работой назвать трудно. Тормоза неприемлемые однозначно и дело тут совершенно точно не в пропускной способности сети, производительности файловой системы и жёстких дисков и т.д. и иже с ними. В инете по форумам народ носится с блокировками и экспериментами в smb.conf(комбинируют аттрибуты конфигурационного файла различными способами с целью, видимо посчитать максимально-возможное число комбинаций)). Потому как ни у кого не работает, окромя тех, у кого работает с самого начала с коробки без лишних манипуляций или тех, кто является или являлся счастливым обладателем самбы под версиями в районе 2.0.7-2.0.10.(ну плюс-минус чуть-чуть, не помню, может и 2.2 у кого-то работала). На более менее адекватное, на мой взгляд, объяснение этой оказии я наткнулся на opennet.ru (http://opennet.ru/base/net/1csamba.txt.html). ЦИТИРУЮ самое главное: Для того, чтобы никому больше не пришлось с этим возиться, сообщаю, что виндовозная 1С-бухгалтерия не просто использует блокировки несуществующих байтов за концом файлов (прием вобщем-то известный), а использует ну очень большие смещения этих байтов, и на таких гигантских числах Самба начинает спотыкаться. Чтобы она вела себя культурно - надо залезть в исходники Самбы, в файл util.c, найти там функцию fcntl_lock, и обнаружить, что авторы предлагают там два варианта куска кода, выделенные директивами условной компиляции. Так вот тот вариант, что выбран по умолчанию - не работает нормально. адо выбрать второй - и все проблемы исчезают. Искреннее спасибо автору за зацепку, но блин не знаю я C. И хрен его знает как работают эти директивы и как выбрать второй вариант, тем более что в самбе поздних версий файлик util.c имеет несколько другой вид и функция fcntl_lock отсутствует, есть только похожая и кусок кода, напоминающий таковой в более ранних исходниках. Самбу версий 2.0.7 и 2.0.10 пытался компилить на Дебиане после сноса 3.25 через aptitude, но фокус не удался то ли из-за разницы в годах выхода моего Дебиана и самбы(то ли структура каталогов в корневой фс настолько изменилась, то ли хрен его знает), а может просто руки кривые пока что(опыта не так много). Всё компилилось как положено, но не сказать чтобы так же и работало). Вижу для себя три выхода: 1)Найдутся умные дяди-линуксоиды (может и тёти-линуксюхи, кто знает) с добрыми красными глазами и безвозмездно помогут; 2) Выход(самый простой))): Я по-бырому выучу язык С, по-бырому разберусь с исходниками, подправлю чего где надо и буду потом своим детям рассказывать страшную историю о том, как я стал программером; 3) Откопаю на каком-нибудь сайте пыльный, засалившийся образ какого-нибудь престарелого дистриба, чтоб нормально скомпилить самбу версии 2.0.10 на нём (надеясь, что wine, по-любому необходимая мне для запуска специфической проги, не откажется, в свою очередь, ставится на старый дистриб). Приветствуются как квалифицированные советы, так и вообще любая новая информация, можно тоже в виде поэмы, как и всё вышеизложенное). Наверняка тема всё ещё животрепещущая. Ответы 1. veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/ в конфиге самбы может помочь... но на самом деле из-за этой проблемы в свое время перешли на sql... 2. У меня базы 1С лежат на самбе с почти дефолтными настройками. Есдинственное, что добавил, это csc policy = disable для шары с базами. Блокировки и какие-либо другие специфические настройки не трогал. Вот весь конфиг: [global] # Main settings netbios name = Server workgroup = CALOCAL server string = interfaces = lo, brlan bind interfaces only = Yes socket options = IPTOS_LOWDELAY TCP_NODELAY wins support = Yes dns proxy = No time server = Yes domain logons = Yes preferred master = Yes utmp = Yes logon home = logon path = template homedir = logon script = logon.bat load printers = No printing = bsd printcap name = /dev/null disable spoolss = yes passdb backend = ldapsam:ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock ldap admin dn = cn=ldapadmin,dc=calocal ldap suffix = dc=calocal ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap machine suffix = ou=Machines ldap idmap suffix = ou=Idmaps ldap passwd sync = Only add machine script = /usr/sbin/ldapaddmachine '%u' smb-domain-computers add user script = /usr/sbin/ldapadduser '%u' smb-domain-users add group script = /usr/sbin/ldapaddgroup '%g' add user to group script = /usr/sbin/ldapaddusertogroup '%u' '%g' delete user script = /usr/sbin/ldapdeleteuser '%u' delete group script = /usr/sbin/ldapdeletegroup '%g' delete user from group script = /usr/sbin/ldapdeleteuserfromgroup '%u' '%g' set primary group script = /usr/sbin/ldapsetprimarygroup '%u' '%g' rename user script = /usr/sbin/ldaprenameuser '%uold' '%unew' # Global share settings admin users = @smb-domain-admins write list = @smb-domain-admins @ftpadmins browseable = Yes # We use POSIX ACLs to control real permissions writeable = Yes inherit acls = Yes inherit owner = Yes [netlogon] path = /home/ftp/netlogon browseable = No [pub] path = /home/ftp/pub [shared] path = /home/ftp/shared [private] path = /home/ftp/private/%u root preexec = /etc/samba/scripts/create-private-dir %u [private-all] path = /home/ftp/private valid users = @ftpadmins [1c-databases] path = /home/ftp/1c-databases valid users = @smb-1c-users csc policy = disable 3. Для ускорения работы можно вынести базы 1С на отдельный раздел с какой-нибудь быстрой ФС (типа ext4) и монтировать с опцией noatime. Ещё можно покрутить настройки TCP/IP-стека. У меня после добавления вот этого в sysctl.conf: net.core.rmem_default = 1048576 net.core.rmem_max = 1048576 net.core.wmem_default = 1048576 net.core.wmem_max = 1048576 kernel.shmmax = 167772160 Скорость самбы увеличилась в среднем процентов на 10 (тестировал iozone'ом, запущенным с вендового клиента). 4. Всё дело в оплоках. Кусок smb.conf для 1с-ной шары: [1C-bases] comment = Our 1C tank-a-drom path = /home/1С public = no valid users = lu mari dina writeable = yes printable = no create mask = 0770 browseable = yes share modes = yes >oplocks = no >level2 oplocks = no >blocking locks = no >locking = yes >strict locking = no force create mode = 0770 force directory mode = 0770 Необходимые установки выделены '>' Работает уже лет пять под любыми версиями самбы. Текущих версий две: 3.0.4 и 3.2.5. Дистриб: Слака. Во многих рекомендациях по настройке 1с-ной шары рекомендуют эти опции не трогать из-за того, что скорость сетевых файловых операций снизится. Однако этого не произошло и быстродействие именно 1С:Бухгалтерии даже превышало виндовозные. 5. >oplocks = no >level2 oplocks = no >blocking locks = no >locking = yes >strict locking = no Как ни странно, но при таких настройках у меня юзвери 1с не получали сообщение о том, что кто-то уже юзает базу и в один и тот же документ писали разом несколько человек. При нижеследующей настройке - 2й год полет отличный (3 тьфу!). Сервер с базами 1с член домена DOM на Win 2003. Дистр - слака 12.0, самба 3.2.15. Вот конфиг: [global] interfaces = eth0 lo hosts allow = 192.168.0. 127. netbios name = dom-1c workgroup = dom password server = 192.168.0.1 server string = 1c bases security = ADS realm = DOM #passdb backend = tdbsam allow trusted domains = yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 os level = 1 preferred master = No local master = No domain master = No dns proxy = No ldap ssl = no strict locking = No time server = no auth methods = winbind encrypt passwords = yes winbind use default domain = yes idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes log file = /var/log/samba/log.%m max log size = 1024 log level = 1 display charset = koi8-r unix charset = koi8-r dos charset = cp866 nt acl support = yes printcap name = /etc/printcap max xmit = 65535 dead time = 15 use sendfile = no max open files = 65535 kernel oplocks = yes [1c-buh] comment = 1c for Buhgalteriya path = /1c/buh admin users = @"DOM\администраторы домена" read only = no create mask = 1775 directory mask = 1775 printable = no available = yes map acl inherit = yes inherit owner = no inherit acls = no inherit permissions = no acl check permissions = true acl map full control = true blocking locks = yes level2 oplocks = yes locking = yes oplocks = yes strict locking = no posix locking = yes browseable = yes share modes = yes |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|