Настроил репликацию между двумя серверами. Изменения на master реплицируются на slave. Но возникла проблема.....Сервера выполняют одни и те же функции, у них одинаковые OS (freebsd 5.3) и используются одинаковые скрипты.
В некоторые моменты скрипты на серверах должны менять записи в своем LDAPе.Работает система так: меняется что-то на Master, это сразу реплицируется на slave.
Но при этом slave server не может ничего изменить в своем ldap!
Без репликации тот же скрипт (вызывает ldapmodify)прекрасно работает. Стоит только закоментировать у slave строчки:
updatedn "cn=replicator,o=org,c=ru"
updateref ldap://localhost:636Естественно, при этом не работает репликация!
Если же работает репликация, получаю ошибку
ldap_modify: Referral
ldif_record() = 10и записи на slave посредством скрипта не меняются!
Как сделать, чтобы это работало одновременно?
Те нужно, чтобы:Изменения на master реплицируются на slave
Причем сам slave мог самостоятельно менять записи в ldap (не нужно, чтобы это отображалось на master)конфиги
MASTERinclude /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/samba.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
loglevel 64
database ldbm
cachesize 10000
dbcachesize 1000000
threads 128
dbnosync
dbsync 2 12 5
sizelimit 10000suffix "o=org,c=ru"
rootdn "cn=Manager,o=org,c=ru"
rootpw secret
directory /var/db/openldap-ldbmreplogfile /var/log/slurpd.replog
replica host=localhost:636
binddn="cn=replicator,o=org,c=ru"
bindmethod=simple
credentials=my_replicatorindex objectClass eq
index uid pres,eq
index rid eq
index uidNumber eq
index gidNumber eq
index cn eq,subinitial
index memberUid eqindex gecos eq
index description eq
index default subaccess to attr=userPassword,lmPassword,ntPassword
by self write
by * authaccess to *
by * read----------------
SLAVE:
----------------include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/samba.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
loglevel 64database ldbm
cachesize 10000
dbcachesize 1000000
threads 128
dbnosync
dbsync 2 12 5
sizelimit 10000suffix "o=org,c=ru"
rootdn "cn=Manager,o=org,c=ru"rootpw secret
directory /var/db/openldap-ldbmindex objectClass eq
index uid pres,eq
index rid eq
index uidNumber eq
index gidNumber eq
index cn eq,subinitial
index memberUid eqindex gecos eq
index description eq
index default subupdatedn "cn=replicator,o=org,c=ru"
updateref ldap://localhost:636access to * attr=userPassword,lmPassword,ntPassword
by dn="cn=replicator,o=org,c=ru" write
by self write
by * auth
access to *
by dn="cn=replicator,o=org,c=ru" write
by * read
а вообще такое возможно или нужно делать двустороннюю репликацию?
куда вообще копать? :)
>Настроил репликацию между двумя серверами. Изменения на master реплицируются на slave. Но
>возникла проблема.....
>
>Сервера выполняют одни и те же функции, у них одинаковые OS (freebsd
>5.3) и используются одинаковые скрипты.
>В некоторые моменты скрипты на серверах должны менять записи в своем LDAPе.
>
>
>Работает система так: меняется что-то на Master, это сразу реплицируется на slave.
>
>
>Но при этом slave server не может ничего изменить в своем ldap!
>
>Без репликации тот же скрипт (вызывает ldapmodify)прекрасно работает. Стоит только закоментировать у
>slave строчки:
>updatedn "cn=replicator,o=org,c=ru"
>updateref ldap://localhost:636
updateref должна ссылаться на master ldap (ldap://master.ldap.org)
>
>Естественно, при этом не работает репликация!
>
>Если же работает репликация, получаю ошибку
>
>ldap_modify: Referral
>ldif_record() = 10
>
>и записи на slave посредством скрипта не меняются!
>
>Как сделать, чтобы это работало одновременно?
>Те нужно, чтобы:
>
>Изменения на master реплицируются на slave
>Причем сам slave мог самостоятельно менять записи в ldap (не нужно, чтобы
>это отображалось на master)
>
>конфиги
>MASTER
>
>include /usr/local/etc/openldap/schema/core.schema
>include /usr/local/etc/openldap/schema/cosine.schema
>include /usr/local/etc/openldap/schema/nis.schema
>include /usr/local/etc/openldap/schema/inetorgperson.schema
>include /usr/local/etc/openldap/schema/samba.schema
>pidfile /var/run/openldap/slapd.pid
>argsfile /var/run/openldap/slapd.args
>loglevel 64
>database ldbm
>cachesize 10000
>dbcachesize 1000000
>threads 128
>dbnosync
>dbsync 2 12
>5
>sizelimit 10000
>
>suffix "o=org,c=ru"
>rootdn "cn=Manager,o=org,c=ru"
>rootpw secret
>
>
>directory /var/db/openldap-ldbm
>
>replogfile /var/log/slurpd.replog
>replica host=localhost:636
>
> binddn="cn=replicator,o=org,c=ru"
>
> bindmethod=simple
>
> credentials=my_replicator
>
>index objectClass
> eq
>index uid
> pres,eq
>
>index rid
> eq
>
>index uidNumber
> eq
>index gidNumber
> eq
>index cn
>
>eq,subinitial
>index memberUid
> eq
>
>index gecos
> eq
>index description
> eq
>index default
> sub
>
>access to attr=userPassword,lmPassword,ntPassword
> by self write
> by * auth
>
>access to *
> by * read
>
>----------------
>SLAVE:
>----------------
>
>include /usr/local/etc/openldap/schema/core.schema
>include /usr/local/etc/openldap/schema/cosine.schema
>include /usr/local/etc/openldap/schema/nis.schema
>include /usr/local/etc/openldap/schema/inetorgperson.schema
>include /usr/local/etc/openldap/schema/samba.schema
>pidfile /var/run/openldap/slapd.pid
>argsfile /var/run/openldap/slapd.args
>loglevel 64
>
>database ldbm
>cachesize 10000
>dbcachesize 1000000
>threads 128
>dbnosync
>dbsync 2 12
>5
>sizelimit 10000
>
>suffix "o=org,c=ru"
>rootdn "cn=Manager,o=org,c=ru"
>
>rootpw secret
>directory /var/db/openldap-ldbm
>
>index objectClass eq
>index uid
> pres,eq
>
>index rid
> eq
>
>index uidNumber
> eq
>index gidNumber
> eq
>index cn
>
>eq,subinitial
>index memberUid
> eq
>
>index gecos
> eq
>index description
> eq
>index default
> sub
>
>updatedn "cn=replicator,o=org,c=ru"
>updateref ldap://localhost:636
updateref должна ссылаться на master ldap (ldap://master.ldap.org)
>
>access to * attr=userPassword,lmPassword,ntPassword
> by dn="cn=replicator,o=org,c=ru" write
> by self write
> by * auth
>access to *
> by dn="cn=replicator,o=org,c=ru" write
> by * read
>>updatedn "cn=replicator,o=org,c=ru"
>>updateref ldap://localhost:636
>updateref должна ссылаться на master ldap (ldap://master.ldap.org)
у меня репликация шифруется stunnel, т.е.master,localhost:636-->шифруем-->slave,localhost:636--->расшифровываем-->slave,localhost,ldap:389
>
>>>updatedn "cn=replicator,o=org,c=ru"
>>>updateref ldap://localhost:636
>>updateref должна ссылаться на master ldap (ldap://master.ldap.org)
>
>
>у меня репликация шифруется stunnel, т.е.
>
>master,localhost:636-->шифруем-->slave,localhost:636--->расшифровываем-->slave,localhost,ldap:389вернее даже не так, а
master,localhost:636 --> шифруем --> slave,slave IP:636 --> расшифровываем --> slave,localhost,ldap:389
так что мне в этом случае писать?
Или может возвожно сделать двустороннюю репликацию?
Я тут попробовал и в итоге нельзя было ничего исправить ни на master, ни на slave...к тому же загадочным способом удалилось 200 записей из ldap, хорошо что backup есть :)