1 最后由 dustsure (2015-06-12 17:13:28) 编辑

主题: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?
未尝试该操作之前系统正常。

- iRedMail 版本号:0.9.2
- 使用哪个数据库存储用户帐号:MySQL
- 使用的 Linux/BSD 发行版名称及版本号:CentOS6.x
- 与您的问题相关的日志信息:
Jun 12 17:05:36 mail1 roundcube: <oofl8n6i> IMAP Error: Login failed for postmaster@testbobo.com from 192.168.0.1. Empty startup greeting (127.0.0.1:143) in /var/www/roundcubemail-1.1.1/program/lib/Roundcube/rcube_imap.php on line 198 (POST /mail/?_task=login?_task=login&_action=login)
Jun 12 17:06:18 mail1 roundcube: <oofl8n6i> IMAP Error: Login failed for postmaster@testbobo.com from 192.168.0.1. Unable to send command: A0002 LOGIN postmaster@testbobo.com hxb850211 in /var/www/roundcubemail-1.1.1/program/lib/Roundcube/rcube_imap.php on line 198 (POST /mail/?_task=login?_task=login&_action=login)
netstat -tnlp查看服务情况如下,确认imap的相关端口是开启的:
[root@mail1 conf.d]# netstat -tnlp | grep dovecot
tcp        0      0 0.0.0.0:993                 0.0.0.0:*                   LISTEN      1474/dovecot       
tcp        0      0 0.0.0.0:995                 0.0.0.0:*                   LISTEN      1474/dovecot       
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      1474/dovecot       
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      1474/dovecot       
[root@mail1 conf.d]#

现在修改了能找到的配置文件里面的mysql连接字符串,都把127.0.0.1修改为了另外一台单独的mysql服务器,roundcubemail没找到类似iredadmin里面setting.py的脚本修改,只修改到了/var/www/roundcubemail/config下面config.inc.php里的:$config['db_dsnw'] = 'mysqli://roundcube:3PZU5JGeqx9X2LMpozeIgJbSxLl8KM@192.168.0.55/roundcubemail';字段。
是否还有未修改到的字符串?

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

IMAP 服务是 Dovecot 程序,你是否有更新 Dovecot 的配置文件里的 mysql 服务器地址?

3 最后由 dustsure (2015-06-15 09:31:51) 编辑

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

在/etc/dovecot/dovecot.conf下找到:
=====================================
# Virtual mail accounts.
userdb {
    args = /etc/dovecot/dovecot-mysql.conf
    driver = sql
}
passdb {
    args = /etc/dovecot/dovecot-mysql.conf
    driver = sql
}
====================================
这个文件应该是负责虚拟账户密码的认证?
于是打开:/etc/dovecot/dovecot-mysql.conf
里面已修改为远程mysql的账户:
====================================
driver = mysql
default_pass_scheme = CRYPT
connect = host=192.168.0.55 dbname=vmail user=vmail password=38ffGTLRuN30SHkbRqqeBOQW2dp9KO
# Required by 'doveadm mailbox ...'.
iterate_query = SELECT username AS user FROM mailbox
password_query = SELECT password, allow_nets FROM mailbox WHERE username='%u' AND enable%Ls%Lc=1 AND active=1
user_query = SELECT
..........
====================================
密码没修改,数据库是从未分离之前全备过去的,同时给每个账户开启了远程访问权限。会是不是密码的问题?【这个密码和下面查出来的mysql.user表里的长度都不一样】
原始机器上的mysql数据库账户信息:
====================================
mysql> select user,host,password from mysql.user;
+-------------+-----------+-------------------------------------------+
| user        | host      | password                                  |
+-------------+-----------+-------------------------------------------+
| root        | localhost | *C5273F332068F030D6E6A584584C5A5217471879 |
| vmail       | localhost | *434A32827A46D81E51B564F5DA5103408F52D26C |
| vmailadmin  | localhost | *421CFB94E48FFB20BC2C054983DE501B4717D364 |
| cluebringer | localhost | *6E5DFF5B05EB44F4C6C3D3813800B9DE607260C7 |
| amavisd     | localhost | *5400FCD9F745AE7776ACC2298C22C1FD6D29675E |
| iredadmin   | localhost | *DB076D83C9301B2A027CAD2D08EADA66E56E25CD |
| roundcube   | localhost | *E345D25AD8A912B45A5EC4D4181EEBD3F47AD942 |
+-------------+-----------+-------------------------------------------+
7 rows in set (0.00 sec)
====================================
远程mysql服务器的账户信息:
====================================
mysql> select user,host,password from mysql.user;
+-------------+-----------+-------------------------------------------+
| user        | host      | password                                  |
+-------------+-----------+-------------------------------------------+
| root        | localhost | *C5273F332068F030D6E6A584584C5A5217471879 |
| vmail       | %         | *434A32827A46D81E51B564F5DA5103408F52D26C |
| amavisd     | %         | *5400FCD9F745AE7776ACC2298C22C1FD6D29675E |
| vmailadmin  | %         | *421CFB94E48FFB20BC2C054983DE501B4717D364 |
| cluebringer | %         | *6E5DFF5B05EB44F4C6C3D3813800B9DE607260C7 |
| roundcube   | %         | *E345D25AD8A912B45A5EC4D4181EEBD3F47AD942 |
| iredadmin   | %         | *DB076D83C9301B2A027CAD2D08EADA66E56E25CD |
+-------------+-----------+-------------------------------------------+
====================================

如果还需要什么信息,我再补全。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

查找到源码目录下mysql_vmail的初始化sql找到该密码:
===================================
/* Permissions. */
GRANT SELECT ON vmail.* TO "vmail"@"localhost" IDENTIFIED BY "38ffGTLRuN30SHkbRqqeBOQW2dp9KO";
GRANT SELECT,INSERT,DELETE,UPDATE ON vmail.* TO "vmailadmin"@"localhost" IDENTIFIED BY "11qsZPpGJdB2y3AtHjBJgTipZuT4Tl";
===================================
这两个账户应该是dovecot认证时候要访问数据库的密码,由于我只修改了mysql.user表里账户远程授权,是不是因为没修改到mysql.db里面的授权,因为还是针对localhost的,并非%。这样就导致vmail和vmaildomain用户无法通过dovecto连接这个远程mysql来做认证导致失败?
===================================
mysql> select host,db,user from db;
+-----------+---------------+-------------+
| host      | db            | user        |
+-----------+---------------+-------------+
| localhost | amavisd       | amavisd     |
| localhost | cluebringer   | cluebringer |
| localhost | iredadmin     | iredadmin   |
| localhost | roundcubemail | roundcube   |
| localhost | vmail         | vmail       |
| localhost | vmail         | vmailadmin  |
+-----------+---------------+-------------+
6 rows in set (0.00 sec)
===================================
我猜测可能是这里的授权只允许本地查询导致的。。。【如果是那么就是我的mysql应该恶补下了。。- -!】
我先修改完后测试再反馈结果。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

测试反馈后还是不行
或者干脆这样子可行否
数据库先安装好并配置好root的远程密码及访问权限,然后参照远程mysql存在的情况下重新安装iredmail。。。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

目前是测试阶段,如果在线上分离,还是有些东西不清楚在哪里修改,不推荐【测试失败】。
后来参照文档进行远程安装成功,目前的架构设计为后端mysql主主+lvs+keepalived实现数据库高可用【生产环境预计5-8k用户】。
后期打算应用主机搭成多节点的结构,不知道张Sir有没有什么建议?
目前环境因为收发应用端跑在虚拟化主机上,可能考虑用2个节点来实施,使用inotify+rsync实现邮件目录实时同步,前端再假设一个lvs+DR的方式来负责负载转发。如果这样,除了考虑邮件目录同步,不知道还有没有其他需要考虑的地方?
如果跑在物理机上就好办了,邮件目录单独用存储空间来直接实现读写共享,性能也上去较多。
但是始终还是有个疑问,第1节点在安装时候已把数据库初始化,那么第二或者更多节点进行安装的时候,这个数据库初始化工作怎么办?

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

现在测试的情况比较明确了,是我在分离数据库的时候有东西没修改完全导致认证时候连接数据库失败造成。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

建议你先不急于修改配置文件,而是在命令行界面直接测试 mysql 各个账号是否能正常登陆和查询。如果这一步通过了,再去修改配置文件。基本没问题。

这里最主要的就是保证能访问远程 sql 服务器,并且有相关权限(例如查询、更新、删除,等等)。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

今天再次测试了下分离数据库,完全没问题了,就是需要修改的地方太多。
如您上面说的,主要还是先数据库导过去了后测试连通性,然后再切换。
主要注意授权方面的问题,数据库在本地的时候,账户授权都是对localhost的,需要找到链接程序用的密码【应该是随机生成的】重新进行授权。
目前测试分离后后端构建mysql 主主HA运行良好。
现在在尝试将应用再复制出来分担压力,预计采取inotify+unison的方式同步邮件目录的方式,希望能顺利。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

方便分享 mysql master-master 集群的方案么?以及后续的方案。

回复: 试图将数据库分离到另外一台主机,iredadmin可以正常连接独立的数据库主机了,但webmail这块登陆即提示IMAP服务连接失败?

可以的,已加群。群内ID dustsure 可以加个Q大家多沟通。