yunwa0429 发表于 2011-8-28 00:12:23

回复 47771885 的帖子

啊湘,你的RM真的改到出神入化了。。成仙了。。。。

qile 发表于 2011-8-28 01:24:06

#凌风网维修改,加入更多匹配以免数据混乱这个加入的有什么必要吗 为了避免数据混乱 才应该不加吧

online2311 发表于 2011-8-28 08:08:16

第一时间做测试。。。不知道效果怎么样!

ksw520 发表于 2011-8-28 12:27:04

楼主既然编辑删掉了之前发的内容,我还是简单说说吧。难得有人认真考虑这些问题。
就拿楼主1楼说的问题,举例
      accounting_update_query = " \
          UPDATE ${acct_table1} \
          SET \
             framedipaddress = '%{Framed-IP-Address}', \
             acctsessiontime   = '%{Acct-Session-Time}', \
             acctinputoctets   = '%{%{Acct-Input-Gigawords}:-0}'<< 32 | \
                                 '%{%{Acct-Input-Octets}:-0}', \
             acctoutputoctets    = '%{%{Acct-Output-Gigawords}:-0}' << 32 | \
                                 '%{%{Acct-Output-Octets}:-0}', \
             acctupdatetime      = NOW() , \
             acctstoptime      = NULL\
          WHERE acctsessionid= '%{Acct-Session-Id}' \
          AND acctuniqueid   = '%{Acct-Unique-Session-Id}' \
          AND username       = '%{SQL-User-Name}' \
          AND realm         = '%{Realm}' \
          AND nasipaddress   = '%{NAS-IP-Address}' \
          AND nasportid            = '%{NAS-Port}' \
          AND nasporttype   = '%{NAS-Port-Type}' \
          AND acctauthentic    = '%{Acct-Authentic}' \
          AND calledstationid   = '%{Called-Station-Id}' \
          AND callingstationid   = '%{Calling-Station-Id}' \
          AND servicetype   = '%{Service-Type}' \
          AND framedprotocol   = '%{Framed-Protocol}' \
          AND framedipaddress = '%{Framed-IP-Address}'"RFC 中对 session id 定义是一个 网络字节序 ,在同台NAS中不可能重复。楼主加入的那些查询字段过于冗余。
其他的查询代码就不做解释。查询条件越复杂效率越低,冗余的数据库读写只会使效率低下,楼主应该明白。

再说下,楼主说的修改mysql连接至1000,freeradius的数据库连接至100的问题。首先radius服务器这一单纯的应用,mysql的优化应该根据应该根据硬件情况进行,优化缓存值为主,单单改大连接数没任何意义,不是做对大众的WEB应用会是有很多连接。Freeradius数据库的连接数值默认是过小,但一般网络环境也足够。非要改了才放心,改为10-20较为合适。此连接数是freeradius启动时就建立,不会释放。过大会浪费资源,处于等待状态的查询会使freeradius工作效率降低。。。。。先说这么多,还有疑问我再继续解释。打字太累。

qiznstar 发表于 2011-8-28 13:16:45

本帖最后由 qiznstar 于 2011-8-28 13:17 编辑

的确有点冗余,session id 定义是一个 网络字节序 ,在同台NAS中不可能重复是对的,但这只是表示在同台NAS中同时在线不可能重复,可是会有些“历史记录”上的重复,那么认证系统会更新一些以前的记录到当前的在线状态造成以前的记录不准确。至于拔500次后数据对不上大多是因为账号同名,当然谁也不可能拿一个账号拔如此多次,基本上也可以忽略重复的问题,当初只考虑这些想必也牺牲了性能。
另外服务器并发连接数这个争论没有意义,暂时影响也不大。
重复问题我觉得加入 sessionid ,用户名,NAS IP,然后MAC和客户端获取的IP地址就应该差不多了。毕竟客户端IP地址也难一样,就算用户名,NAS IP,MAC都一样,客户端IP也不会一样。

还有一个重要问题就是Insert语句,如果不做判断,很容易被插入两到三条一模一样的记录,都表示在线,而且一模一样,连更新也同时更新了这三条。做判断的确牺牲了性能,那么性能和准确稳定方面,可以做适当的平衡。

yangpeng-zyy 发表于 2011-8-28 13:18:02

回复 ksw520 的帖子

你好!我想咨询下你!带1000-2000的拨号ROS需要什么硬件配置!在论坛见你评价其他人用I7说性价比不高!浪费!

   看见你截图带1500个用户想知道你的用什么硬件配置!能不能讨论讨论!

ksw520 发表于 2011-8-28 13:36:32

qiznstar 发表于 2011-8-28 13:16 static/image/common/back.gif
的确有点冗余,session id 定义是一个 网络字节序 ,在同台NAS中不可能重复是对的,但这只是表示在同台NAS中 ...

既然楼主也明白 session id在同一台NAS 内不可能重复,那就应该晓得 用户名 和 NAS地址,这两个条件完全就锁定了范围。楼主您的想法多虑了。

关于 插入语句的问题,freeradius 默认的配置文档中也并没有问题。楼主如果您有兴趣,就举例我再给你说嘛吧。

整个帖子唯一讨论的重点,只有一个。RouterOS内用户不在线 ,Radius中在线。出现这种情况。基本都是用户非常正常离线,未能发送离线状态至Radius,或者是 RouterOS 繁忙网络故障等原因,用户正常离线也未能及时发送状态至Radius。处理这种情况也非常的简单,在Radius Manager中是外挂程序如果一定时间范围内(默认10分钟)没收到用户的状态更新,就认为该用户离线。其他商用Radius 系统大致也是使用的此思路(我看过N个radius系统的源码。)。

qiznstar 发表于 2011-8-28 13:40:48

本帖最后由 qiznstar 于 2011-8-28 13:44 编辑

阿湘发的那几张图片,统计结果不准确,(默认10分钟)后,准确了?
Insert会很有可能插入几条一模一样的记录,而update同时把它们都更新了,(默认10分钟)后,根本不会置离线。

9939781 发表于 2011-8-28 15:00:21

:lol我是来等结果的。

ksw520 发表于 2011-8-28 15:12:59

qiznstar 发表于 2011-8-28 13:40 static/image/common/back.gif
阿湘发的那几张图片,统计结果不准确,(默认10分钟)后,准确了?
Insert会很有可能插入几条一模一样的记 ...

插入相同的记录,正常运行情况下根本就不可能发生。

如果楼主您还是认为会 重复插入几条相同记录导致,导致update把他们都更新。
我建议您可以手动在数据库内插入几条相同的记录。你看看会更新几条。你测试后就明白了。

radacct中相同的记录只会更新其中一条。

47771885 发表于 2011-8-28 15:23:04

qiznstar 发表于 2011-8-28 13:40 static/image/common/back.gif
阿湘发的那几张图片,统计结果不准确,(默认10分钟)后,准确了?
Insert会很有可能插入几条一模一样的记 ...

呵呵我的时间不是默认的

qiznstar 发表于 2011-8-28 15:32:44

本帖最后由 qiznstar 于 2011-8-28 15:42 编辑

再引用超级版主提出的
根本就不算是问题,也许是楼主你自己开发程序遇到了问题,想借鉴其他系统的解决方式而已吧

的确,我们是在开发程序时遇到了问题,当时也是想借鉴其他系统的解决方式,那我们遇到的是什么问题呢,就是本贴的主题。我们当然“牺牲了性能”为代价解决这个问题。

如果两条记录一模一样,而update仅根据sessionid username nas来更新,而两条记录的sessionid username nas都相同,不会把这两条同时更新?

我们当初的测试方法就是这样,一个账号拔五百次,后来发现认证记录的超过500条,然后在phpmyadmin里面按sessionid排序,结果发现两三个sessionid一模一样,因为是同一样账号拔的,同一台路由,所以username和nas肯定也是相同的,然后acctstoptime都为null,怪事,为什么会这样,难道是用户上线时insert成功了,后来update时失败,失败后的操作当然是insert又成功了?

我们是遇到了这个程序开发的问题,我们在解决,解决牺牲了性能,而且有点冗余,但临时性的解决了这个统计不准确的问题,诚然提出这个问题,和各位一起寻找是否有更好的解决方案,但这是真的存在在这个问题,而不是无中生有。

ksw520 发表于 2011-8-28 15:55:55

如果两条记录一模一样,而update仅根据sessionid username nas来更新,而两条记录的sessionid username nas都相同,不会把这两条同时更新?

楼主的问题在13#的回复中已经点明如何处理这种情况

虽然会几条同时更新,但是 acctstoptime都为null 的相同条目
一定时间只会有一条 acctstoptime 为 unll
前面我已经说过 Radius Manager 是通过外挂程序来做检查。默认是10没更新的记录就认为是用户已经离线。而且这样的方式不会影响 认证过程的效率。

ai188 发表于 2011-8-28 21:14:03

qiznstar 发表于 2011-8-28 13:40 static/image/common/back.gif
阿湘发的那几张图片,统计结果不准确,(默认10分钟)后,准确了?
Insert会很有可能插入几条一模一样的记 ...

确实如此 ,10分钟后不会离线,在线用户里面也T 不下来,重启radius也无用,但是重启ros 后就会都自动下线了!

大家可以这样测试下把radius 的网线拔掉 然后重启ros这样就会出现这样的问题了! 然后在不重启ros 的情况下 想下解决的办法!

ai188 发表于 2011-8-28 21:16:56

本帖最后由 ai188 于 2011-8-28 21:17 编辑

但是 ros 和radius 同时断电10分钟后用户会下线 这个到是测试过的!
页: 1 [2] 3 4
查看完整版本: 你们的Radius Manager最多带了多少用户