Hi everyone,
I'm trying to convert from MS based platform to *nix/Linux, specifically
FreeBSD. I have a few questions and concerns about OpenLDAP's backend for
performance and high reliability.
I have no problems setting OpenLDAP 2.3.38 to run with BDB 4.4.20.4 inside
FreeBSD's (6.2 RELEASE) jail, using core, cosine, and inetorgperson schemas.
Using the Quick-Start guide at openldap.org's website, I manage to create the
layout of OUs, CNs, etc. to my needs using phpLDAPadmin after adding the base
ldif file via command line:
dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: Example Company
dc: example
After thinking about the robustness of OpenLDAP due to it's BDB backend, I
tried to convert over to back-sql and use MySQL 5.0.45 for it's backend. The
SQL account is granted with full permission, including reference, to the
specified database. The tables are populated using sample sql files
- testdb_create.sql
- backsql_create.sql
- testdb_metadata.sql
Then I tried to add the same base ldif file via command line and get this error:
ldapadd: Server is unwilling to perform (53)
additional info: operation not permitted within namingContext
and all of my problems begin even though the unixODBC connection is working
properly, despite it's not logging to a file via syslog (not a big concern
ATM). After a few days of frustration, research on documentation, and log
analyzing, am I wrong to conclude after reading the contents of the sql files
and this snip from log:
...
slapd startup: initiated.
backend_startup_one: starting "cn=config"
config_back_db_open
config_build_entry: "cn=config"
config_build_entry: "cn=include{0}"
config_build_entry: "cn=include{1}"
config_build_entry: "cn=include{2}"
config_build_entry: "cn=module{0}"
config_build_entry: "cn=schema"
config_build_entry: "cn={0}core"
config_build_entry: "cn={1}cosine"
config_build_entry: "cn={2}inetorgperson"
config_build_entry: "olcDatabase={-1}frontend"
config_build_entry: "olcDatabase={0}config"
WARNING: No dynamic config support for database sql.
config_build_entry: "olcDatabase={1}sql"
backend_startup_one: starting "dc=sointe,dc=net"
==>backsql_db_open(): testing RDBMS connection
backsql_db_open(): concat func not specified (use "concat_pattern" directive in
slapd.conf)
backsql_db_open(): subtree search SQL condition not specified (use
"subtree_cond" directive in slapd.conf)
backsql_db_open(): setting "ldap_entries.dn LIKE CONCAT('%',?)" as default
backsql_db_open(): setting "ldap_entries.dn=?" as default
backsql_db_open(): objectclass mapping SQL statement not specified (use
"oc_query" directive in slapd.conf)
backsql_db_open(): setting "SELECT
id,name,keytbl,keycol,create_proc,delete_proc,expect_return FROM
ldap_oc_mappings" by default
...
to conclude for me to use any RDBMS for OpenLDAP's back-sql, I have to setup
all the tables, functions and/or stored procedures, and insert all of those
appropriately as data into the 4 tables:
- ldap_attr_mappings
- ldap_entries
- ldap_entry_objclasses
- ldap_oc_mappings
before I can add the base ldif file via command line and use phpLDAPadmin to
build & maintain it? What happens when I need to change directory
layout/structure because my needs change? Is it feasible?
Here are a few case studies scenario where I see issues:
A) Small company
This can be accomplished with OpenLDAP and the database servers on the same
box. If the need requires more, OpenLDAP and the database server on separate
boxes. (This scenario can also be accomplished using BDB for backend.)
A - 1) Small company grows (still 1 site)
OpenLDAP becomes it's own box if it's not already and act as master. Add more
OpenLDAP box(es) for proxy requests while the master handles updates/additions.
The database server is then reconfigured to be clustered. All OpenLDAP
servers connect to the database cluster. (Alternatives? Still possible with
OpenLDAP+back-bdb in master/slave replication? What about performance and high
reliability?)
A - 2) Company grows and expand to multi-site
HQ (is the above scenario A - 1) and each site will have it's own OpenLDAP and
database (as in scenario A) depending on requirements of each site and data
connection to HQ. (Alternatives? Still possible with OpenLDAP+back-bdb in
master/slave replication? What about performance and high reliability?)
B) Enterprise ( or company in scenario A - 2 grows even more)
HQ will be setup as in scenario A - 1 but with more servers, both OpenLDAP and
databases. Each site will be setup as in scenario A or A - 1 depending upon
the requirement and function of each site.
C) What happens (to performance and reliability) when the total entries in
OpenLDAP reaches 250,000? 1 million? or 1 billion (most likely to happen in
scenario B)? Will it "shrugs it's shoulders as if nothing happens" and still
function?
Based on the above the scenarios, should I invest the time to create all the
tables, functions/stored procedures, and insert them as data into the 4 core
tables as mentioned above? I guess there could be work around for all the
scenarios except scenario C. Or should I go elsewhere for my directory
service/server like OpenDS or Sun's Directory Server?
Thanks,
Tommy