2017-01-10 14 views
0

Недавно я развернул FreeRadius 3.0.12, и у меня возникла проблема с количеством строк, которые он делает с помощью Oracle. Я внес необходимые изменения в файл oraclesql.conf и файл radiusd.conf.Freeradius: Указание количества обрабатываемых соединений DB

Пожалуйста, смотрите содержание oraclesql.conf.

sql { 

     server = "<DB IP>" 
     login = "<LOGIN>" 
     password = "<Password>" 

     # Database table configuration 

     radius_db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <DB IP>)(PORT = <PORT NO.>)))(CONNECT_DATA = (SERVICE_NAME = SID)(SERVER=DEDICATED)))" 



     # If you want both stop and start records logged to the 
     # same SQL table, leave this as is. If you want them in 
     # different tables, put the start table in acct_table1 
     # and stop table in acct_table2 
     acct_table1 = "radacct" 
     acct_table2 = "radacct" 

     authcheck_table = "radcheck" 
     authreply_table = "radreply" 

     groupcheck_table = "radgroupcheck" 
     groupreply_table = "radgroupreply" 

     usergroup_table = "usergroup" 

     # Remove stale session if checkrad does not see a double login 
     delete_stale_sessions = no 

     # Print all SQL statements when in debug mode (-x) 
     sqltrace = yes 
     sqltracefile = ${logdir}/sqltrace.sql 

     # number of sql connections to make to server 
     num_sql_socks = 100 

     # number of seconds to dely retrying on a failed database 
     # connection (per_socket) 
     connect_failure_retry_delay = 60 

Как вы можете видеть num_sql_socks = 100 установлен.

Пожалуйста, смотрите вывод Radius -X

rlm_sql (sql): Driver rlm_sql_oracle (module rlm_sql_oracle) loaded and linked 
Creating attribute SQL-Group 
    instantiate { 
    } 
    # Instantiating module "cache_eap" from file /etc/raddb/mods-enabled/cache_eap 
rlm_cache (cache_eap): Driver rlm_cache_rbtree (module rlm_cache_rbtree) loaded and linked 
    # Instantiating module "pap" from file /etc/raddb/mods-enabled/pap 
    # Instantiating module "auth_log" from file /etc/raddb/mods-enabled/detail.log 
rlm_detail (auth_log): 'User-Password' suppressed, will not appear in detail output 
    # Instantiating module "reply_log" from file /etc/raddb/mods-enabled/detail.log 
    # Instantiating module "pre_proxy_log" from file /etc/raddb/mods-enabled/detail.log 
    # Instantiating module "post_proxy_log" from file /etc/raddb/mods-enabled/detail.log 
    # Instantiating module "eap" from file /etc/raddb/mods-enabled/eap 
    # Linked to sub-module rlm_eap_md5 
    # Linked to sub-module rlm_eap_leap 
    # Linked to sub-module rlm_eap_gtc 
    gtc { 
    challenge = "Password: " 
    auth_type = "PAP" 
    } 
    # Linked to sub-module rlm_eap_tls 
    tls { 
    tls = "tls-common" 
    } 
    tls-config tls-common { 
    verify_depth = 0 
    ca_path = "/etc/raddb/certs" 
    pem_file_type = yes 
    private_key_file = "/etc/raddb/certs/server.pem" 
    certificate_file = "/etc/raddb/certs/server.pem" 
    ca_file = "/etc/raddb/certs/ca.pem" 
    private_key_password = <<<secret>>> 
    dh_file = "/etc/raddb/certs/dh" 
    fragment_size = 1024 
    include_length = yes 
    auto_chain = yes 
    check_crl = no 
    check_all_crl = no 
    cipher_list = "DEFAULT" 
    ecdh_curve = "prime256v1" 
    cache { 
     enable = yes 
     lifetime = 24 
     max_entries = 255 
    } 
    verify { 
     skip_if_ocsp_ok = no 
    } 
    ocsp { 
     enable = no 
     override_cert_url = yes 
     url = "http://127.0.0.1/ocsp/" 
     use_nonce = yes 
     timeout = 0 
     softfail = no 
    } 
    } 
    # Linked to sub-module rlm_eap_ttls 
    ttls { 
    tls = "tls-common" 
    default_eap_type = "md5" 
    copy_request_to_tunnel = no 
    use_tunneled_reply = no 
    virtual_server = "inner-tunnel" 
    include_length = yes 
    require_client_cert = no 
    } 
tls: Using cached TLS configuration from previous invocation 
    # Linked to sub-module rlm_eap_peap 
    peap { 
    tls = "tls-common" 
    default_eap_type = "mschapv2" 
    copy_request_to_tunnel = no 
    use_tunneled_reply = no 
    proxy_tunneled_request_as_eap = yes 
    virtual_server = "inner-tunnel" 
    soh = no 
    require_client_cert = no 
    } 
tls: Using cached TLS configuration from previous invocation 
    # Linked to sub-module rlm_eap_mschapv2 
    mschapv2 { 
    with_ntdomain_hack = no 
    send_error = no 
    } 
    # Instantiating module "detail" from file /etc/raddb/mods-enabled/detail 
    # Instantiating module "reject" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "fail" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "ok" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "handled" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "invalid" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "userlock" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "notfound" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "noop" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "updated" from file /etc/raddb/mods-enabled/always 
    # Instantiating module "linelog" from file /etc/raddb/mods-enabled/linelog 
    # Instantiating module "log_accounting" from file /etc/raddb/mods-enabled/linelog 
    # Instantiating module "etc_passwd" from file /etc/raddb/mods-enabled/passwd 
rlm_passwd: nfields: 3 keyfield 0(User-Name) listable: no 
    # Instantiating module "mschap" from file /etc/raddb/mods-enabled/mschap 
rlm_mschap (mschap): using internal authentication 
    # Instantiating module "preprocess" from file /etc/raddb/mods-enabled/preprocess 
reading pairlist file /etc/raddb/mods-config/preprocess/huntgroups 
reading pairlist file /etc/raddb/mods-config/preprocess/hints 
    # Instantiating module "attr_filter.post-proxy" from file /etc/raddb/mods-enabled/attr_filter 
reading pairlist file /etc/raddb/mods-config/attr_filter/post-proxy 
    # Instantiating module "attr_filter.pre-proxy" from file /etc/raddb/mods-enabled/attr_filter 
reading pairlist file /etc/raddb/mods-config/attr_filter/pre-proxy 
    # Instantiating module "attr_filter.access_reject" from file /etc/raddb/mods-enabled/attr_filter 
reading pairlist file /etc/raddb/mods-config/attr_filter/access_reject 
    # Instantiating module "attr_filter.access_challenge" from file /etc/raddb/mods-enabled/attr_filter 
reading pairlist file /etc/raddb/mods-config/attr_filter/access_challenge 
    # Instantiating module "attr_filter.accounting_response" from file /etc/raddb/mods-enabled/attr_filter 
reading pairlist file /etc/raddb/mods-config/attr_filter/accounting_response 
    # Instantiating module "logintime" from file /etc/raddb/mods-enabled/logintime 
    # Instantiating module "IPASS" from file /etc/raddb/mods-enabled/realm 
    # Instantiating module "suffix" from file /etc/raddb/mods-enabled/realm 
    # Instantiating module "realmpercent" from file /etc/raddb/mods-enabled/realm 
    # Instantiating module "ntdomain" from file /etc/raddb/mods-enabled/realm 
    # Instantiating module "files" from file /etc/raddb/mods-enabled/files 
reading pairlist file /etc/raddb/mods-config/files/authorize 
reading pairlist file /etc/raddb/mods-config/files/accounting 
reading pairlist file /etc/raddb/mods-config/files/pre-proxy 
    # Instantiating module "expiration" from file /etc/raddb/mods-enabled/expiration 
    # Instantiating module "sql" from file /etc/raddb/oraclesql.conf 
rlm_sql (sql): Attempting to connect to database "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <DP IP>)(PORT = <PORT NO.>)))(CONNECT_DATA = (SERVICE_NAME = SID)(SERVER=DEDICATED)))" 
rlm_sql (sql): Initialising connection pool 
    pool { 
    start = 5 
    min = 5 
    max = 10 
    spare = 3 
    uses = 0 
    lifetime = 0 
    cleanup_interval = 30 
    idle_timeout = 60 
    retry_delay = 1 
    spread = no 
    } 
rlm_sql (sql): Opening additional connection (0), 1 of 10 pending slots used 
rlm_sql (sql): Opening additional connection (1), 1 of 9 pending slots used 
rlm_sql (sql): Opening additional connection (2), 1 of 8 pending slots used 
rlm_sql (sql): Opening additional connection (3), 1 of 7 pending slots used 
rlm_sql (sql): Opening additional connection (4), 1 of 6 pending slots used 
} # modules 
radiusd: #### Loading Virtual Servers #### 
server { # from file /etc/raddb/radiusd.conf 
} # server 
server inner-tunnel { # from file /etc/raddb/sites-enabled/inner-tunnel 
# Loading authenticate {...} 
# Loading authorize {...} 
Ignoring "ldap" (see raddb/mods-available/README.rst) 
# Loading session {...} 
# Loading post-proxy {...} 
# Loading post-auth {...} 
} # server inner-tunnel 
server default { # from file /etc/raddb/sites-enabled/default 
# Loading authenticate {...} 
# Loading authorize {...} 
# Loading preacct {...} 
# Loading accounting {...} 
# Loading post-proxy {...} 
# Loading post-auth {...} 
} # server default 
radiusd: #### Opening IP addresses and Ports #### 
listen { 
    type = "auth" 
    ipaddr = 127.0.0.1 
    port = 18120 
} 
listen { 
    type = "auth" 
    ipaddr = * 
    port = 0 
    limit { 
    max_connections = 16 
    lifetime = 0 
    idle_timeout = 30 
    } 
} 
listen { 
    type = "acct" 
    ipaddr = * 
    port = 0 
    limit { 
    max_connections = 16 
    lifetime = 0 
    idle_timeout = 30 
    } 
} 
listen { 
    type = "auth" 
    ipv6addr = :: 
    port = 0 
    limit { 
    max_connections = 16 
    lifetime = 0 
    idle_timeout = 30 
    } 
} 
listen { 
    type = "acct" 
    ipv6addr = :: 
    port = 0 
    limit { 
    max_connections = 16 
    lifetime = 0 
    idle_timeout = 30 
    } 
} 
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel 
Listening on auth address * port 1812 bound to server default 
Listening on acct address * port 1813 bound to server default 
Listening on auth address :: port 1812 bound to server default 
Listening on acct address :: port 1813 bound to server default 
Listening on proxy address * port 33624 
Listening on proxy address :: port 18999 
Ready to process requests 

Пожалуйста, смотрите раздел Тема пулом radiusd.conf

thread pool { 
     # Number of servers to start initially --- should be a reasonable 
     # ballpark figure. 
     start_servers = 25 

     # Limit on the total number of servers running. 
     # 
     # If this limit is ever reached, clients will be LOCKED OUT, so it 
     # should NOT BE SET TOO LOW. It is intended mainly as a brake to 
     # keep a runaway server from taking the system with it as it spirals 
     # down... 
     # 
     # You may find that the server is regularly reaching the 
     # 'max_servers' number of threads, and that increasing 
     # 'max_servers' doesn't seem to make much difference. 
     # 
     # If this is the case, then the problem is MOST LIKELY that 
     # your back-end databases are taking too long to respond, and 
     # are preventing the server from responding in a timely manner. 
     # 
     # The solution is NOT do keep increasing the 'max_servers' 
     # value, but instead to fix the underlying cause of the 
     # problem: slow database, or 'hostname_lookups=yes'. 
     # 
     # For more information, see 'max_request_time', above. 
     # 
     max_servers = 100 

     # Server-pool size regulation. Rather than making you guess 
     # how many servers you need, FreeRADIUS dynamically adapts to 
     # the load it sees, that is, it tries to maintain enough 
     # servers to handle the current load, plus a few spare 
     # servers to handle transient load spikes. 
     # 
     # It does this by periodically checking how many servers are 
     # waiting for a request. If there are fewer than 
     # min_spare_servers, it creates a new spare. If there are 
     # more than max_spare_servers, some of the spares die off. 
     # The default values are probably OK for most sites. 
     # 
     min_spare_servers = 10 
     max_spare_servers = 20 

     # When the server receives a packet, it places it onto an 
     # internal queue, where the worker threads (configured above) 
     # pick it up for processing. The maximum size of that queue 
     # is given here. 
     # 
     # When the queue is full, any new packets will be silently 
     # discarded. 
     # 
     # The most common cause of the queue being full is that the 
     # server is dependent on a slow database, and it has received 
     # a large "spike" of traffic. When that happens, there is 
     # very little you can do other than make sure the server 
     # receives less traffic, or make sure that the database can 
     # handle the load. 
     # 
#  max_queue_size = 65536 

     # There may be memory leaks or resource allocation problems with 
     # the server. If so, set this value to 300 or so, so that the 
     # resources will be cleaned up periodically. 
     # 
     # This should only be necessary if there are serious bugs in the 
     # server which have not yet been fixed. 
     # 
     # '0' is a special value meaning 'infinity', or 'the servers never 
     # exit' 
     max_requests_per_server = 0 

     # Automatically limit the number of accounting requests. 
     # This configuration item tracks how many requests per second 
     # the server can handle. It does this by tracking the 
     # packets/s received by the server for processing, and 
     # comparing that to the packets/s handled by the child 
     # threads. 
     # 

     # If the received PPS is larger than the processed PPS, *and* 
     # the queue is more than half full, then new accounting 

Образец соединения строк, которые должны быть выполнены следующим образом (от Radius -X отдельного FreeRadius v2 .x):

rlm_sql (sql): Driver rlm_sql_oracle (module rlm_sql_oracle) loaded and linked 
rlm_sql (sql): Attempting to connect to [email protected]<DB IP>:/(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <DB IP>)(PORT = <DB PORT>)))(CONNECT_DATA = (SERVICE_NAME = <SID>)(SERVER=DEDICATED))) 
rlm_sql (sql): starting 0 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #0 
rlm_sql (sql): Connected new DB handle, #0 
rlm_sql (sql): starting 1 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #1 
rlm_sql (sql): Connected new DB handle, #1 
rlm_sql (sql): starting 2 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #2 
rlm_sql (sql): Connected new DB handle, #2 
rlm_sql (sql): starting 3 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #3 
rlm_sql (sql): Connected new DB handle, #3 
rlm_sql (sql): starting 4 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #4 
rlm_sql (sql): Connected new DB handle, #4 
rlm_sql (sql): starting 5 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #5 
rlm_sql (sql): Connected new DB handle, #5 
rlm_sql (sql): starting 6 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #6 
rlm_sql (sql): Connected new DB handle, #6 
rlm_sql (sql): starting 7 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #7 
rlm_sql (sql): Connected new DB handle, #7 
rlm_sql (sql): starting 8 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #8 
rlm_sql (sql): Connected new DB handle, #8 
rlm_sql (sql): starting 9 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #9 
rlm_sql (sql): Connected new DB handle, #9 
rlm_sql (sql): starting 10 
rlm_sql (sql): Attempting to connect rlm_sql_oracle #10 
rlm_sql (sql): Connected new DB handle, #10 
rlm_sql (sql): starting 11 

and so on to a 99 ... 

Есть ли какое-то место, где мне нужно сделать редактирование, чтобы сформировать требуемое соединение. Любые рекомендации по этому вопросу будут весьма признательны. Thankyou

ответ

0

Итак, я понял, добавив ниже, файл sql.conf исправил его.

pool { 
     start = 25 
     min = 25 
     max = 25 
     spare = 0 
     uses = 0 
     lifetime = 0 
     cleanup_interval = 0 
     #cleanup_interval = 30 
     idle_timeout = 0 
     #idle_timeout = 60 
     retry_delay = 1 
     spread = no 
    } 

где

num_sql_socks    -> pool { max } 
connect_failure_retry_delay -> pool { retry_delay } 
lifetime     -> pool { lifetime } 
max_queries     -> pool { uses } 

Немного дополнительной информации, структура запросов SQL изменился с Fixed Динамический согласно this. Запросы могут быть найдены в:

<radiusdir>/modsconfig/sql/main/<db>/queries.conf 

Запросы одинаковы, хотя. Надеюсь, это поможет при обновлении до freeradius 3.x.