Apache服务之数据库连接


纸上得来终觉浅,绝知此事要躬行。

Apache服务之数据库连接


1. mod_dbd模块

mod_dbd模块并不是一个数据库连接和管理的模块,只是为了需要数据库连接的模块提供一个与其他数据库连接的支持的功能,并且负责管理数据库而已。

在最早的时候,Apache是不支持数据库连接的,但后来因为需求越来越多,导致开发出连接数据库的API,即mod_dbd模块。这样任何程序都可以通过API直接对数据库进行访问,而不需担心身份认证、如何连接等问题了。

模块优点

  • (1) 在线程化MPM上,提供了更具伸缩性和更多有效的连接池,如worker
  • (2) 在非线程的MPM上,可以提供持久连接,如profork
  • (3) 独立于数据库系统,可以通过不同的数据库驱动模块实现对各种数据库的支持
  • (4) HTMLXML页面可以直接访问数据库
  • (5) 无须再次进行身份认证

虽然mod_dbd模块可以用于连接和管理数据库支持,但是需要其他数据库驱动模块进行配合才能正常工作,而在数据库驱动方面,apr工具程序提供了很好的帮助,用户可以通过使用apr-util工具来建立底层的数据库驱动模块,其支持多种数据库类型。

两者关系

  • httpd程序通过mod_dbd模块访问apr_dbd的数据库支持模块来实现对数据库的SQL操作
  • 整个过程对于其他程序来说是透明的,从而节省了开发底层数据库驱动的时间
  • apr_dbd模块并不会在你编译安装时默认安装,而是需要手动安装它,包含在Apache的源代码中

Apache服务之数据库连接

安装 apr_dbd 模块

# (1) 如果没有编译好的apr程序,需要如下操作
# 完成之后,便可以在编译apr-util模块的时候通过--with-apr参数来指定apr工具的位置
cd httpd-2.2.21/srclib/apr/
./configure --prefix=/usr
make
# (2) 确保安装了完整的数据库程序
# 不同的操作系统有可能需要额外的依赖关系
cd httpd-2.2.21/srclib/apr-util/ && ./buildconf

# 当buildconf脚本执行完毕后会在当前目录的include子目录中生成一个apu.h文件,通过修改这个文件可以启用apu对其他数据库的连接支持。在文件的最后部分,选择需要支持的数据库,去掉注释并修改0为1。
define APU_HAVE_MYSQL 1

# 之后就可以编译安装apr-util了,需要配置指定的安装路径和数据库指定支持的路径
./configure --prefix=/usr --with-mysql=/usr --with-pgsql=/usr
make && make install

# 安装完成之后,就可以在安装目录下的lib/apr-util-1/目录下查找到以下文件
apr_dbd_mysql.so  apr_dbd_pgsql.so

配置数据库连接

  • 当准备工作完成之后就可以在httpd.conf文件中配置mod_dbd模块
    • DBDriver指令:设置apr_dbd驱动程序
    • DBDParams指令:设置数据库连接参数
    • DBDMin指令:设置每个进程的最小连接数,仅用于线程化模型
    • DBDMax指令:设置每个进程的最大连接数,仅用于线程化模型
    • DBDKeep指令:设置每个进程的连接数,仅用于线程化模型
    • DBDExptime指令:指定DBDKeep指令所设置的每个进程连接允许的持续时间,仅用于线程化模型

Apache服务之数据库连接


2. mod_ldap 模块

mod_ldap模块实在Apache2.0.41之后加入官方模块中的,可以提供标准的LDAP功能和使用共享内存提供LDAP的连接池服务。由于LDAP的连接是在请求之间共享的,所有LDAP通过连接池连接可以省去unbindconnectrebind的操作,提高了性能。

对于一个LDAP服务器来说,虽然专门针对读取进行了优化,但是当LDAP目录非常大时,查询和绑定操作很消耗资源和时间,而mod_ldap模块采用了缓冲策略尽量减少与LDAP服务器的联系,使负载明显减少。在mod_ldap模块处理的每一个URL请求中,mod_ldap模块都会为它们使用缓存功能,mod_ldap模块支持两种方式的缓存类型。

  • (1) 在search/bind阶段使用缓冲
    • 缓冲区中存放查询、用户名、DN、口令等内容
    • 当用户请求连接时,先在缓冲区中查找,如果匹配且未失效,将会跳过search/bind阶段进行连接
  • (2) 在compare阶段使用缓冲
    • 使用两个操作缓冲区来进行缓冲比较
    • 第一个缓冲区用来缓冲是否LDAP组成员的测试结果
    • 第二个缓冲区用来缓冲不同名字间鉴别的比较结果

启用LDAP模块时需要将LDAP支持加入到APU中,即apr工具里。可以通过在configure脚本中添加--with-ldap参数对LDAP进行支持。如果还需要LDAP支持SSLTLS,还需要为apr加上如下任何一种SDK支持。

  • OpenLDAP SDK
  • Novell LDAP SDK
  • Mozilla LDAP SDK
  • Solaris LDAP SDK
  • Microsoft LDAP SDK
  • iPlanet SDK
# 模块添加方式
./configure
    --with-ldap-inculde=/usr/include \
    --with-ldap-lib=/usr/lib--with-ldap=/usr/lib \
    --enable-ssl \
    --with-sslc=/usr \
    --with-ssl=/usr \
    --with-sslport=443

Apache服务之数据库连接


文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录