TongWeb5.0 集 群 配 置 手 册
第 1 章 集 群 部 署 介 绍... 2 第 2 章 安 装 前 期 准 备... 3 2.1 安 装 说 明... 3 2.2 软 件 准 备... 3 第 3 章 安 装 Apache 和 JK 插 件... 3 3.1 Apache 的 安 装 步 骤... 4 3.2 安 装 JK 插 件... 5 第 4 章 集 群 配 置... 6 4.1 配 置 httpd.conf 文 件... 6 4.2 配 置 mod_jk.conf 文 件... 6 4.3 配 置 workers.properties 文 件... 7 4.4 验 证 Apache 集 群 配 置... 7 4.5 TongWeb 集 群 配 置... 8 4.6 验 证 集 群 配 置... 9 第 5 章 TongWeb 的 session 复 制 功 能... 10 5.1 memcached 的 session 复 制 方 式... 10 5.2 安 装 memcached... 11 5.3 启 动 memcached... 11 5.5 将 memcached 做 为 Windows 服 务... 12 5.4 停 止 memcached... 12 5.4 配 置 TongWeb 上 的 session 复 制... 13 5.5 验 证 session 复 制... 14 第 6 章 维 护 常 见 问 题... 14 6.1 Apache 与 TongWeb 不 能 连 通... 14 6.2 不 能 保 证 会 话 亲 和... 15 6.3 session 亲 和 与 session 复 制 的 关 系... 15 1
第 1 章 集 群 部 署 介 绍 本 文 档 主 要 介 绍 TongWeb5.0 的 集 群 配 置 及 session 复 制 配 置 手 工 方 式 TongWeb 的 集 群 是 通 过 Apache 来 实 现 的, 当 客 户 端 请 求 访 问 Apache 时,Apache 会 将 请 求 按 一 定 比 例 转 发 到 后 台 多 个 TongWeb 上, 当 其 中 一 个 TongWeb 出 现 问 题 时, 其 余 TongWeb 还 可 以 继 续 接 收 客 户 端 的 请 求 假 设 目 前 有 三 台 机 器, 其 中 两 台 装 TongWeb, 另 一 台 装 Apache, 结 构 如 下 图 所 示, 客 户 端 访 问 Apache,Apache 会 将 请 求 按 一 定 比 例 转 发 到 后 台 的 两 个 TongWeb 上, 接 下 来 我 们 讲 解 如 何 配 置 TongWeb 集 群 TongWeb TongWeb IP: 192.168.0.1 IP: 192.168.0.2 Apache 客 户 端 2
第 2 章 安 装 前 期 准 备 2.1 安 装 说 明 集 群 配 置 所 需 的 Apache 和 JK 负 载 均 衡 插 件 TongWeb 并 不 直 接 提 供, 可 直 接 从 Apache 网 站 进 行 下 载, 网 址 http://www.apache.org JK 插 件 需 要 注 意 下 载 JK 而 非 JK2,JK2 项 目 已 经 停 止 了 开 发 和 技 术 支 持 由 于 Apache 和 JK 插 件 下 载 后 为 C 源 码, 所 以 在 Unix/Linux 下 安 装 Apache 和 JK 插 件 需 要 gcc 或 cc 编 译 器, 首 先 确 认 操 作 系 统 上 装 有 gcc 或 cc 编 译 器 如 果 是 Windows 操 作 系 统, 则 Apache 和 JK 插 件 提 供 可 直 接 安 装 的 程 序 本 文 档 主 要 是 以 Unix/Linux 下 安 装 配 置 TongWeb 集 群 为 例 进 行 说 明 2.2 软 件 准 备 软 件 需 要 有 Apache JK 插 件 TongWeb 三 个 安 装 程 序, 本 文 档 以 如 下 具 体 版 本 进 行 安 装 配 置 说 明, 也 可 从 Apache 网 站 下 载 更 新 的 Apache 和 JK 插 件 版 本 进 行 配 置, 但 具 体 配 置 可 能 不 同 名 称 版 本 软 件 包 说 明 Apache 2.0.63 httpd-2.0.63.tar.gz Apache 安 装 程 序 JK 插 件 1.2.28 tomcat-connectors-1.2.28-src.tar.gz 负 载 均 衡 插 件, 安 装 TongWeb 5.0 Install_TW5.0_Solaris.bin 在 Apache 上 第 3 章 安 装 Apache 和 JK 插 件 本 章 讲 解 Apache 和 JK 插 件 的 安 装 及 参 数 配 置, 主 要 说 明 了 常 用 参 数 配 置, 更 多 参 数 配 置 需 要 参 考 Apache 网 站 http://www.apache.org 3
3.1 Apache 的 安 装 步 骤 (1). 将 httpd-2.0.63.tar.gz 上 传 至 服 务 器 (2). 运 行 如 下 命 令 解 压 Apache 安 装 包 $ tar xvfz httpd-2.0.63.tar.gz (3). 进 入 httpd-2.0.63 目 录, 依 次 运 行 如 下 命 令, 安 装 Apache # 其 中 /home/tongweb/apache2 为 Apache 安 装 目 录, 根 据 需 要 更 改 $./configure --prefix=/home/tongweb/apache2 --enable-so $ make $ make install # 执 行 完 上 面 三 个 命 令,Apache 安 装 到 /home/tongweb/apache2 目 录 (4). 进 入 Apache 的 conf 目 录, 编 辑 httpd.conf 文 件 修 改 ServerName 和 Port 为 自 己 需 要 的 配 置 # 改 为 自 己 需 要 的 端 口, 如 8010 Listen 8010 # 将 ServerName 前 的 # 号 删 除, 并 将 值 改 为 主 机 名 ServerName localhost (5). 启 动 Apache, 进 入 Apache 的 bin 目 录, 运 行 : $./apachectl start (6). 打 开 IE 输 入 Apache 地 址 :http://apache_ip:apache_port 如 果 出 现 如 下 页 面 说 明 Apache 安 装 成 功 4
(7). 停 止 Apache, 进 入 Apache 的 bin 目 录, 运 行 : $./apachectl stop 3.2 安 装 JK 插 件 (1). 将 tomcat-connectors-1.2.28-src.tar.gz 上 传 至 服 务 器 (2). 运 行 如 下 命 令 解 压 JK 安 装 包 $ tar xvfz tomcat-connectors-1.2.28-src.tar.gz (3). 进 入 tomcat-connectors-1.2.28-src 的 native 目 录, 运 行 如 下 命 令 进 行 编 译 # /home/tongweb/apache2/bin/apxs 为 安 装 Apache 的 目 录 bin 下 的 apxs 命 令 $./configure --with-apxs=/home/tongweb/apache2/bin/apxs $ make # 编 译 完 成 (4). 在 native 的 apache-2.0 目 录 下 生 成 JK 的 插 件 mod_jk.so, 将 mod_jk.so 拷 入 Apache 的 modules 目 录 下 (5). 至 此 JK 插 件 安 装 完 成 5
第 4 章 集 群 配 置 4.1 配 置 httpd.conf 文 件 进 入 Apache 的 conf 目 录 用 vi 编 辑 器 修 改 httpd.conf 文 件, 主 要 是 对 Apache 进 行 一 些 参 数 优 化, 主 要 修 改 内 容 如 下 # 找 到 prefork.c 模 块 改 为 如 下 配 置, 这 是 影 响 性 能 主 要 参 数 <IfModule prefork.c> StartServers 20 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1000 MaxClients 800 MaxRequestsPerChild 0 </IfModule> # 在 这 一 句 前 面 加 上 # 号 注 释 掉, 不 产 生 访 问 日 志, 否 则 日 志 会 很 大 #CustomLog logs/access_log common # 在 httpd.conf 最 后 一 行 加 入 如 下 内 容, 加 载 mod_jk.conf. Include conf/mod_jk.conf 4.2 配 置 mod_jk.conf 文 件 在 Apache 的 conf 目 录 生 成 mod_jk.conf 文 件, 这 与 httpd.conf 中 加 入 的 文 件 名 对 应, 此 文 件 的 主 要 作 用 是 描 述 加 载 的 JK 模 块 JK 日 志 格 式 请 求 的 URI 等 mod_jk.conf 的 文 件 内 容 如 下 : # 加 载 JK 模 块 mod_jk.so 和 配 置 文 件 workers.properties LoadModule jk_module modules/mod_jk.so JkWorkersFile "conf/workers.properties" # 设 置 JK 日 志 文 件, 设 置 JK 日 志 级 别 和 格 式 JkLogFile "logs/mod_jk.log" JkLogLevel error JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # 转 发 到 后 台 的 请 求 URI, 定 义 了 一 个 负 载 平 衡 服 务 器 loadbalancer JkMount /* loadbalancer #Apache 的 状 态 监 控 页 面 JkMount /tong_status mystatus 6
4.3 配 置 workers.properties 文 件 在 Apache 的 conf 目 录 下 生 成 workers.properties 文 件, 这 与 mod_jk.conf 中 指 定 的 配 置 文 件 名 对 应, 此 文 件 的 主 要 作 用 是 指 定 后 台 的 TongWeb 各 个 节 点 workers.properties 文 件 内 容 如 下 : # 定 义 了 一 个 负 载 平 衡 服 务 器, 名 称 与 mod_jk.conf 中 对 应 worker.list=loadbalancer worker.loadbalancer.type=lb # 将 两 节 点 加 入 负 载 平 衡 服 务 器 worker.loadbalancer.balance_workers=worker1,worker2 # 保 证 会 话 亲 和, 设 为 true worker.loadbalancer.sticky_session=true worker.loadbalancer.sticky_session_force=false # 节 点 1 worker.worker1.type=ajp13 worker.worker1.host=192.168.0.1 # TongWeb 的 IP worker.worker1.port=7777 #AJP 的 端 口, 要 和 TongWeb 的 AJP 端 口 对 应 worker.worker1.lbfactor=1 # 权 重 worker.worker1.socket_keepalive=true worker.worker1.socket_timeout=600 # 节 点 2 含 义 同 上 worker.worker2.type=ajp13 worker.worker2.host=192.168.0.2 worker.worker2.port=7777 worker.worker2.lbfactor=1 worker.worker2.socket_keepalive=true worker.worker2.socket_timeout=600 # 集 群 状 态 监 控 配 置 worker.list=mystatus worker.mystatus.type=status worker.mystatus.read_only=1 4.4 验 证 Apache 集 群 配 置 (1). 启 动 Apache, 如 果 没 有 任 何 错 误 信 息 输 出, 说 明 配 置 文 件 格 式 正 确 (2). 输 入 地 址 : http://apache_ip:apache_port/tong_status 如 果 出 现 状 态 监 控 页 面 说 明 Apache 端 集 群 配 置 成 功 7
4.5 TongWeb 集 群 配 置 (1). 启 动 TongWeb 进 入 管 理 控 制 台, 进 入 服 务 配 置 -> WEB 容 器 -> 容 器 配 置, 设 置 参 数 jvmroute 的 值 此 参 数 要 与 workers.properties 中 的 节 点 名 一 一 对 应,192.168.0.1 上 TongWeb 的 jvmroute 参 数 值 为 worker1,192.168.0.2 上 TongWeb 的 jvmroute 参 数 值 为 worker2, 如 果 对 应 不 准 确, 不 能 保 证 会 话 亲 和 如 下 图 所 示 : (2). 启 动 TongWeb 进 入 管 理 控 制 台, 进 入 服 务 配 置 -> WEB 容 器 -> AJP 通 道, 点 击 创 建, 建 立 AJP 端 口, 端 口 要 与 workers.properties 文 件 中 的 端 口 对 应 如 下 图 所 示 : 8
参 数 说 明 : 通 道 名 称 :AJP 通 道 的 唯 一 标 识 监 听 地 址 :AJP 通 道 的 监 听 地 址, 通 常 默 认 值 即 可 监 听 端 口 :AJP 通 道 的 监 听 端 口, 与 worker.properties 配 置 端 口 对 应 重 定 向 端 口 :AJP 通 道 的 重 定 向 端 口, 对 web.xml 中 描 述 必 须 通 过 SSL 访 问 才 需 设 置 请 求 超 时 时 间 : 请 求 超 时 时 间, 以 秒 为 单 位 TCPNoDelay: 设 置 TcpNoDelay 的 值, 默 认 为 true (3). 部 署 应 用, 需 要 注 意 的 是 应 用 部 署 时 必 须 选 择 默 认 的 虚 拟 主 机 server (4). 至 此 TongWeb 配 置 完 成 4.6 验 证 集 群 配 置 (1). 启 动 Apache 和 TongWeb, 无 先 后 启 动 顺 序 要 求 (2). 输 入 地 址 : http://apache_ip:apache_port/tong_status, 查 看 Apache 与 TongWeb 之 间 的 连 接 状 态 是 否 为 OK 或 OK/IDLE (3). 打 开 一 个 IE, 访 问 应 用,http://Apache_IP:Apache_port/ 应 用 前 缀, 看 是 否 能 访 问 到 应 用 (4). 在 访 问 时, 同 一 IE 的 访 问 会 被 始 终 定 位 到 同 一 台 TongWeb 上, 如 果 不 是 这 样, 说 明 配 置 不 正 确,jvmRoute 参 数 值 与 workers.properties 中 配 置 不 对 应 当 重 新 打 开 一 个 新 的 IE 时, 访 问 才 有 可 能 被 定 位 到 另 一 台 TongWeb 上 (5). 停 止 其 中 一 台 TongWeb, 应 用 可 以 继 续 访 问 (6). 通 过 http://apache_ip:apache_port/tong_status 页 面 可 以 监 控 到 访 问 状 态 9
第 5 章 TongWeb 的 session 复 制 功 能 为 了 使 集 群 有 更 高 的 可 靠 性, 可 以 为 应 用 配 置 session 复 制 功 能, 这 样 当 用 户 访 问 到 一 台 TongWeb 上 时, 如 果 此 时 TongWeb 宕 机 用 户 的 请 求 被 转 发 到 另 一 台 TongWeb, 同 时 此 用 户 的 session 信 息 也 会 被 复 制 过 来, 从 而 保 证 session 信 息 不 丢 失 TongWeb5.0 的 session 复 制 功 能 由 memcached 来 实 现, 我 们 称 之 为 会 话 服 务 器 通 常 为 了 保 证 会 话 服 务 器 的 可 靠 性, 我 们 建 议 至 少 配 置 两 个 会 话 服 务 器 5.1 memcached 的 session 复 制 方 式 memcached 相 当 于 一 种 内 存 形 式 的 数 据 库,TongWeb 会 将 session 信 息 同 步 到 memcached 当 中, 当 客 户 端 访 问 跳 转 到 另 一 TongWeb 时, 可 以 从 memcached 中 恢 复 sesssion 信 息 原 理 结 构 如 图, memcached 可 以 启 动 多 个, 每 个 memcached 分 别 保 存 一 部 分 session 信 息 下 面 我 们 来 讲 解 配 置 过 程 memcached memcached TongWeb TongWeb Apache 客 户 端 10
5.2 安 装 memcached memcached 的 安 装 程 序 在 TongWeb 的 Memcached 目 录 下, 提 供 Windows 下 的 可 直 接 运 行 程 序, 如 果 是 在 Unix/Linux 下, 则 需 要 现 编 译 源 码 来 完 成, 下 面 介 绍 在 Unix/Linux 下 的 编 译 过 程 (1). 上 传 libevent-1.4.13-stable.tar.gz 和 memcached-1.4.4.tar.gz 至 服 务 器 (2). 执 行 如 下 命 令 编 译 libevent $ tar zxvf libevent-1.4.13-stable.tar.gz # 进 入 libevent 目 录 运 行 如 下 命 令,/home/memcached 为 安 装 目 录 $./configure --prefix=/home/memcached $ make $ make install # 执 行 完 上 面 命 令, 在 /home/memcached 生 成 include,lib,share 三 个 目 录 (3). 执 行 如 下 命 令 编 译 memcached $ tar zxvf memcached-1.4.4.tar.gz # 进 入 memcached 目 录 运 行,--prefix 为 安 装 目 录, --with-libevent 为 需 要 指 定 的 libevent 安 装 目 录 $./configure --prefix=/home/memcached --with-libevent=/home/memcached $ make $ make install # 执 行 完 上 面 命 令, 在 /home/memcached 生 成 bin 目 录 (4). 在 当 前 用 户 环 境 变 量 中 指 定 libevent 动 态 链 接 库 位 置 export LD_LIBRARY_PATH=/home/memcached/lib: (5). 至 此 memcached 的 安 装 过 程 结 束 说 明 : memcached 在 AIX 平 台 的 编 译 需 要 修 改 源 码 才 行, 具 体 细 节 请 参 看 TongWeb 的 Memcached 目 录 的 readme.txt 文 件 或 TongWeb 手 册 5.3 启 动 memcached (1). Unix/Linux 下 启 动 memcached 需 要 非 root 用 户 11
(2). 进 入 /home/memcached/bin 目 录, 执 行 如 下 命 令 : $./memcached m 2048 p 11211 -d 参 数 说 明 : -m 设 置 最 大 使 用 内 存, 单 位 是 M, 默 认 值 是 :64M -p 设 置 监 听 端 口, 默 认 值 为 :11211 -d 后 台 启 动 方 式 ( 在 Unix/Linux 下 使 用 ) 更 多 参 数 可 通 过 h 来 查 看 (3). 验 证 启 动 成 功 方 式, 启 动 过 程 中 没 有 错 误 信 息, 通 过 ps 命 令 可 以 看 到 memcached 进 程, 通 过 netstat 命 令 可 以 看 到 端 口 11211 打 开 5.5 将 memcached 做 为 Windows 服 务 (1). 运 行 如 下 命 令 便 可 将 memcached 加 入 windows 服 务 中 memcached -d install (2). 修 改 注 册 表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached 下 其 中 的 ImagePath 项 的 值 由 "D:\memcached.exe" -d runservice 改 成 : "D:\memcached.exe" -m 1024 -p 11212 -d runservice 否 则 默 认 占 用 的 端 口 是 11211, 占 用 的 最 大 内 存 默 认 是 64M (3). 删 除 windows 服 务, 运 行 如 下 命 令 即 可 memcached -d uninstall 5.4 停 止 memcached memcached 没 有 正 常 的 停 止 命 令, 若 要 停 止 memcached, 在 Windows 下 直 接 关 掉 cmd 命 令 框 或 12
以 服 务 方 式 启 停, 在 Unix/Linux 下 先 用 ps ef grep memcached 查 出 进 程 号, 再 用 kill -9 PID 杀 掉 memcached 进 程 5.4 配 置 TongWeb 上 的 session 复 制 (1). 应 用 存 入 session 中 的 对 象 最 好 继 承 可 序 列 化 接 口 (java.io. Serializable), 否 则 TongWeb 在 将 session 序 列 化 时 可 能 报 异 常 信 息 (2). 在 应 用 的 WEB-INF/tongweb-web.xml 中 添 加 如 下 配 置 : <tongweb-web-app> <property name="usememcached" value="true" /> <property name="memcachednodes" value="n1:192.168.0.1:11211 n2:192.168.0.2:11211" /> <property name="requesturiignorepattern" value=".*\.(png gif jpg css js)$" /> <property name="sessionbackupasync" value="true" /> <property name="sessionbackuptimeout" value="300" /> <property name="transcoderfactoryclass" value="de.javakaffee.web.msm.javaserializationtranscoderfactory" /> <property name="copycollectionsforserialization" value="false" /> </tongweb-web-app> 参 数 说 明 : usememcached : 是 否 使 用 Memcached 集 群, 设 置 为 true 下 面 的 配 置 才 会 生 效 memcachednodes : 缓 存 节 点 配 置, 例 如 "n1:192.168.0.1:11211",n1 是 缓 存 节 点 名, 符 合 命 名 规 范 的 变 量 名 称,192.168.0.1 是 memcached 节 点 所 在 机 器 IP,11211 为 节 点 监 听 端 口 同 时 可 指 定 多 个 节 点, 中 间 用 空 格 分 隔 requesturiignorepattern : 不 保 存 在 session 里 的 资 源 类 型, 是 一 个 正 则 表 达 式, 例 如 ".*\.(png gif jpg css js)$" sessionbackupasync : 是 否 异 步 执 行 session 数 据 备 份, 数 据 类 型 Boolean, 默 认 值 是 true, 表 示 用 异 步 方 式 进 行 session 数 据 备 份 因 为 异 步 方 式 在 大 压 力 下 的 稳 定 性 更 高, 所 以 推 荐 采 用 这 种 方 式 sessionbackuptimeout :session 备 份 超 时, 单 位 为 毫 秒 transcoderfactoryclass : 序 列 化 策 略, 通 常 选 择 Java serialization 策 略 即 可, 值 为 : 13
de.javakaffee.web.msm.javaserializationtranscoderfactory, 其 余 两 种 策 略 本 手 册 暂 不 说 明, 具 体 可 参 考 TongWeb 手 册 copycollectionsforserialization : 对 象 序 列 化 时 是 否 使 用 集 合 对 象 的 副 本, 数 据 类 型 Boolean 该 选 项 只 有 Javolution 序 列 化 策 略 才 支 持, 通 常 设 为 false 即 可 (3). 将 应 用 部 署 在 所 有 TongWeb 下, 所 有 tongweb-web.xml 文 件 的 session 复 制 信 息 需 保 持 一 致 (4). 至 此 TongWeb 的 session 复 制 功 能 配 置 完 成 5.5 验 证 session 复 制 (1). 启 动 Apache TongWeb memcached, 无 启 动 先 后 顺 序 要 求 (2). 部 署 一 个 带 session 操 作 的 应 用, 例 如 模 拟 用 户 登 陆 的 应 用 (3). 访 问 应 用 并 登 陆, 通 过 TongWeb 日 志 看 应 用 被 分 发 到 哪 个 TongWeb 上 (4). 停 止 此 TongWeb, 再 访 问 应 用, 请 求 被 转 发 到 另 一 个 TongWeb 上, 此 时 应 用 应 该 还 处 于 登 陆 状 态 (5). 如 果 此 时 session 信 息 丢 失, 说 明 session 复 制 不 成 功, 需 重 新 检 查 配 置 第 6 章 维 护 常 见 问 题 6.1 Apache 与 TongWeb 不 能 连 通 当 Apache 与 TongWeb 不 能 连 通 时, 进 行 如 下 步 骤 检 查 : (1). 查 看 TongWeb 是 否 建 立 AJP 端 口 (2). TongWeb 的 AJP 端 口 是 否 与 workers.properties 文 件 中 的 端 口 对 应 (3). 检 查 应 用 是 不 是 配 置 的 默 认 虚 拟 主 机 "server" (4). 在 Apache 机 器 上 用 telnet 192.168.0.2 7777, 看 TongWeb 的 AJP 端 口 是 否 连 通 (5). 查 看 Apache 的 logs 目 录 下 的 mod_jk.log 日 志 的 错 误 信 息 14
6.2 不 能 保 证 会 话 亲 和 某 一 用 户 打 开 IE 访 问 后, 一 会 访 问 到 一 台 TongWeb, 一 会 又 访 问 到 另 一 台 TongWeb 这 是 由 于 -DjvmRoute 参 数 与 workers.properties 中 配 置 不 对 应 需 要 检 查 TongWeb 的 jvmroute 参 数 和 workers.properties 配 置 文 件 6.3 session 亲 和 与 session 复 制 的 关 系 session 亲 和 是 指 在 集 群 环 境 下, 同 一 IE 客 户 端 的 请 求 会 被 始 终 分 发 到 同 一 个 TongWeb 节 点 上 session 复 制 是 指 TongWeb 之 间 session 信 息 可 以 实 现 共 享 TongWeb 集 群 可 以 只 配 session 亲 和, 不 配 session 复 制, 这 样 只 会 造 成 客 户 端 请 求 跳 转 到 另 一 个 TongWeb 节 点 上 时 session 信 息 丢 失 也 可 以 配 session 亲 和 的 同 时, 也 配 置 session 复 制, 这 样 客 户 端 请 求 跳 转 到 另 一 个 TongWeb 节 点 上 时 session 信 息 不 丢 失, 但 同 时 需 要 维 护 会 话 服 务 器 15