-
Notifications
You must be signed in to change notification settings - Fork 30
配置参数说明
Jesse edited this page Aug 27, 2020
·
1 revision
Name | Scope | Dynamic | Type | Default | Min | Max | Description |
---|---|---|---|---|---|---|---|
proxy_backend_user | global | no | string | 这个参数是Arkproxy用来连接MySQL数据库集群的用户名。该用户名的作用是只负责获取业务连接的权限信息,不会实际执行具体的业务请求语句,该用户的权限为all privileges。 | |||
proxy_backend_passwd | global | no | string | 该参数是Arkproxy用来连接MySQL数据库集群的用户名proxy_backend_user参数对应的密码,目前不支持加密,只能明文存储。 | |||
proxy_check_consistend_period | global | no | string | 10 | 1 | 100000 | 该参数用来设置slave一致性读,设置该参数后,只有slave和master一致才会分发到slave节点。单位:秒。 |
proxy_check_slave_lag_period | global | no | string | 10 | 1 | 100000 | 该参数用来设置slave延迟检测的间隔时间,单位:秒。中间层在分发过程中,会检查从库是不是延迟,如果延迟太久,就会放弃分发到该slave节点。 |
proxy_config_file | global,readonly | no | string | 该参数用来显示当前中间层启动时使用的配置文件,该参数为只读参数,不能在配置文件中配置,不然会启动不了Arkproxy。 | |||
proxy_config_host | global | no | string | Arkproxy的digetst/sql trace远端MySQL数据库的地址。如果不设置该参数,则默认写到中间层对应的后端MySQL集群的写节点。 | |||
proxy_config_user | global | no | string | Arkproxy的digest/sql trace远端MySQL数据库的用户,需要到数据库中赋权,与proxy_config_host相对应。 | |||
proxy_config_passwd | global | no | string | Arkproxy的digest/sql trace远端MySQL数据库密码,目前不支持加密,只能明文存储,与proxy_config_user成对配置。 | |||
proxy_config_port | global | no | int | Arkproxy的digest/sql trace远端MySQL数据库的端口,该参数如果不设置,则默认是中间层对应的后端MySQL集群的写节点与proxy_config_host成对配置。 | |||
proxy_consistend_max_delay_time | global | no | string | 该参数用来设置slave一致性读的从库延迟时间,超过该时间则不会分发到该从库。单位:毫秒。 | |||
proxy_digest_trace | global | yes | boolean | false | Arkproxy的digest trace是否开启的开关,默认是true,开启后会产生相应的业务访问语句的digest信息。统计之后的新,会被存到proxy_config_host:proxy_config_port设置的目标数据库中,可能会对中间层性能有影响,但影响不大。 | ||
proxy_flush_thread_num | global | no | int | 5 | 1 | 10000 | 该参数用来指定digest trace中批量将digest刷入到存储库中的并发线程个数。 |
proxy_format_fullpath | global | no | boolean | false | 该参数用来设置中间层在格式化业务访问的SQL语句时,是否要统一将表名前面加上路径,即库名,如dbname.table_name,默认是off,建议开启。 | ||
proxy_format_num_per_time | global | no | int | 10 | 1 | 100000 | 该参数用来设置trace模块中每次批量处理的格式化SQL个数,保持默认值即可。 |
proxy_format_parameterize | global | no | boolean | on | 该参数用来设置在digest生成时,是否开启将where条件中的常量值用“?”来替代。如果开启,则中间层会认为语句相同,但常量值不同的语句是同一个语句,这样就会被合并到同一个digest中,如果不开启,则会被认为是不同的语句,生成的是不同的digest。 | ||
proxy_format_thread_num | global | no | int | 5 | 1 | 100000 | Arkproxy生成digest时批量处理的线程数,默认是5。 |
proxy_general_log | global | yes | boolean | off | 该参数与MySQL的general_log意义相同,记录所有的操作。 | ||
proxy_general_log_file | global | yes | file name | host_name.log | 该参数与MySQL的general_log_file意义相同,general log的路径。 | ||
proxy_incoming_addresses | global | yes | string | 该参数用来设置多个Arkproxy组成的集群的地址集合。格式为:IP:shell端端口,每组之间用“,”分隔。在某一个Arkproxy节点上执行config flush、config write outfile、config reload操作时会同步到其他的Arkproxy节点。最多可配置32个Arkproxy集群节点。 | |||
proxy_log_error | global | yes | file name | 该参数与MySQL的log_error意义相同,即错误日志文件名。 | |||
proxy_max_connections | global | yes | int | 该参数为运行的最大连接数。 | |||
proxy_multi_write_mode | global | no | boolean | false | 该参数用来设置当前分发模式是否支持多点写入,默认值为false,如果设置为false,则在配置中不支持设置多个在线的写节点,并且在分发的过程中,始终只会向一个写节点分发写操作(包括Hint等),并且如果已经有一个写节点在线了,那么也不支持将另一个写节点上线。如果设置为true,则Arkproxy支持设置多个写节点,并且也支持将他们都上线,并且在写分发时,会在多个写节点之间,做负载均衡。 | ||
proxy_namespace | global | no | string | mysql | Arkproxy digest/sql trace存储数据库的名字。如果不指定proxy_config_host等参数,默认会存储到业务库的mysql库中;如果指定了proxy_config_host参数,就会以proxy_namespace为数据库名,存储到数据库中。 | ||
proxy_non_encrypted_ips | global | no | string | 该参数用来设置中间层对用户名的解析规则,如果在这个名单里面的,则不会对用户名和IP做HASH操作,这样登录中间层和登录后端数据库所使用的IP和用户名可以保持原样,这样是为了方便DBA运维管理,而不可以将业务正常访问的IP加入白名单,不然可能导致不可预知的问题。这个名单IP个数尽量少。 | |||
proxy_not_router_mode | global | no | boolean | 默认为0,即arkproxy提供读写分离;当proxy_not_router_mode=1时打开不读写分离模式,也就是主库提供读写,从库提供高可用功能,该参数不可以动态修改。 | |||
proxy_port | global | no | int | Arkproxy对外提供连接后端数据库的端口。 | |||
proxy_recv_queue_size | global | no | int | 100 | 100 | 10000000 | Arkproxy针对每一个连接,内部维护了一个从后端到中间层接收消息的队列,这个队列用来存储后端MySQL向业务客户端返回的消息的,设置稍微大一些,可以一定程度上提高中间层处理性能。 |
proxy_send_queue_size | global | no | int | 10 | 1 | 100000 | Arkproxy针对每一个连接,内部维护了一个SQL接收队列,这个队列不出意外,只会用到一个节点,所以可以设置到最小,即保持默认即可。 |
proxy_server_address | global | no | string | 本机连接backend server时的IP地址 | 该参数用来配置在处理中间层到后端DB的权限时,中间层的IP地址是什么,可以配置为一个固定的实IP,这个IP会出现在后端数据库所有的授权帐号中,因为 最终与后端数据库连接的是中间层,所以帐号对应的都是中间层的IP地址。但这样有一个问题:如果中间层机器出问题了,或者迁移了,或者部署多个中间 层用来实现中间层高可用,有多个IP地址,或者IP地址变了,那么新的中间层就没有权限连接到后端数据库了,所以为了避免这样的问题发生,可以配置一个地址范围,比如l92.168.%,这样的话,中间层只要在l92.168网段做迁移,都不会有问题,或者干脆不考虑这个问题,可以直接配置为%,这样中间层不管部署在什么位置,都不会有连不上的问题了。所以除非确定中间层不会迁移,并且只有一个中间层,那就可以配置为一个固定的IP。 需要注意的一点是,这个参数的值,一经确定,最好别再修改,不然可能会出现连接不上数据库的问题。或者出现show grant,show create user等命令没有结 果等问题。另外,在通过中间层给client授权的时候,尽量避免不同用户具有相同用户名的问 题,不然会存在权限放大的问题。 | ||
proxy_server_heartbeat_period | global | no | int | 100 | 1 | 100000 | Arkproxy在内部会保持不断地做心跳检测,以保证每一个连接都正常处于活动状态,这个参数用来设置每两次心跳检测的时间间隔。 |
proxy_server_uuid | global | no | string | 该参数表示当前arkproxy节点UUID,用来标识arkproxy集群中不同节点。 | |||
proxy_shell_listen_port | global | no | int | ArkProxy的管理端口,通过这个端口登录,可以管理、查看中间层的状态,连接数量、配置参数等,也可以通过一系列命令来设置,控制中间层的行为。 | |||
proxy_shell_password | global | no | string | 登录Arkproxy管理端口的密码。 | |||
proxy_shell_username | global | no | string | 登录Arkproxy管理端口的用户名。 | |||
proxy_sql_trace | global | yes | boolean | false | ArkProxy的sql trace是否开启开关,默认是true,如果开启了,则会将所有的 SQL访问都记下来,存储到proxy_config_host:proxy_config_port设置的目标数据库中,可能会对中间层的性能有影响。依赖proxy_digest_trace,只有proxy_digest_trace打开了, proxy_sql_trace打开之后才能起作用。 | ||
proxy_sql_trace_thread_num | global | no | int | 5 | 1 | 10000 | ArkProxy处理sql trace的线程个数,默认是5。 |
proxy_thread_pool_idle_timeout | global | yes | int | 60 | 1 | uint_max | 工作线程最大空闲时间,工作线程超过这个数还空闲的话就退出,这个值默认是 60秒。 |
proxy_thread_pool_max_threads | global | yes | int | 65536 | 1 | 65536 | 允许线程池中最大的线程数,默认为65536。 |
proxy_thread_pool_oversubscribe | global | yes | int | 3 | 1 | 1000 | 用于计算线程组是否太过活跃或者太过繁忙,也即系统的负载程度,用于在一定场景决策新的工作线程是否被创建于和任务是否被处理,这个值默认是3。 |
proxy_thread_pool_size | global | no | int | 8 | 1 | 100000 | 该个参数指的是线程组大小,默认是CPU核心数,线程池初始化的时候会根据这个数字来生成线程组,每个线程组初始化一个poolfd句柄。 |
proxy_thread_pool_stall_limit | global | yes | int | 500 | 10 | uint_max | timer thread迭代的时间间隔,默认是500ms。 |
proxy_trace_busy_strategy | global | no | int | 0 | 0 | 5 | 当服务运行繁忙时,记录的digest和sql trace是否丢掉,默认为0,表示丢掉,1表示阻塞并等待,其它值目前无效。 |
proxy_trace_busy_wait_time | global | no | int | 500 | 1 | 360000000000 | 该参数表示当服务运行繁忙时,如果记录的digest和sql trace设置为等待的话,等待的时间间隔,单位是毫秒。 |
proxy_trace_client_queue_size | global | no | int | 1000 | 1 | 100000 | 该参数用来设置SQL trace在处理任务时的队列大小,收集线程不断地向这个队列中放置,刷出线程不断地从这个队列中取出来,然后写入到后端数据库中。 |
proxy_trace_flush_thread_sleep_msec | global | no | int | 500 | 1 | 360000000000 | 从队列里取数据时,如果队列是空的,则需要等待一段时间,再重试,该参数用来设置这个等待时间间隔的,单位为毫秒。 |
proxy_trace_format_thread_sleep_msec | global | no | int | 500 | 1 | 360000000000 | 中间层在每次批量处理SQL语句的格式化并生成digest之后,都会去休息一小段时间,这样就可以适当地减少中间层的压力,同时考虑到在没有访问,或者访问 比较小的时候,收集太过频繁导致出现空转的问题。这个参数就是用来设置暂停时间的,单位为毫秒。 |
proxy_trace_hash_mem_length | global | no | int | 134217728 | 1 | 549755813888 | 在sql trace生成时,中间层会使用hash来做去重,以尽可能地减少流量与压力, 但这个HASH表所使用的内存空间不能太大,而这个参数就是用来设置这个最大内存空间的,默认是128M,如果超过这个值,则这个缓存不能继续写了,需要 flush到后端数据库中之后才可以继续。这个值设置的越大,则会有更多的trace信息做了合并。 |
proxy_trace_hash_size | global | no | int | 200 | 1 | 100000000 | 该参数用来设置HASH表的容量,设置的是记录个数,如果记录数超过这个设置的值之后,也会做清空操作,然后才可以继续使用。 |
proxy_trace_max_delay_time | global | no | int | 3 | 1 | 10000 | 为防止trace信息及时地刷到后端数据库中,而不能一味地只等待占用内存数量以及记录个数,还需要通过设置该参数,来保证trace在超过这个时间之后,即使内存占用比较小,或者记录数很小,也会将trace 信息刷到后端数据库中 |
proxy_trace_queue_array_length | global | no | int | 500 | 1 | 10000000 | 资源池,每个客户端连接对应一个队列成员,所有连接争抢这个资源,这个队列是用来保证及加工digest信息的。如果设置太小,可能会引起资源不足,性能下降的问题。所以建议在使用时,尽量要设置到比最大连接要大一点,这样能保证每个连接都有一个这样的资源。如果设置不合适,可以通过参数来动态修改大小。但需要通过命令将缓存先关闭,然后再重新创建。 |
proxy_trace_sql_bucket_length | global | no | int | 100 | 1 | 100000000 | 该参数用来指定,在sql trace缓存中,通过参数proxy_sql_trace_thread_num 指定了总共有多少个线程来处理sql trace信息,该参数指定的是,每一个线程要处理的sql trace信息队列的大小。 |
proxy_trace_storage | global | yes | enum | MYSQL | 该参数用来设置arkproxy产生的日志信息,存储在MySQL中还是Kafka中,默认为MySQL,本参数可以动态修改,但修改之后在当前运行状态中不起作用,需要关闭trace cache之后重新创建。支持MYSQL和KAFKA。 | ||
proxy_trace_storage_host | global | yes | string | null | 该参数用来设置trace信息存储位置的地址,可以MySQL和Kafka通用。本参数可以动态修改,但修改之后在当前运行状态中不起作用,需要关闭trace cache之后重新创建。如果存储是MySQL,并且这个参数没有设置的话,会存储到beckend server的主节点。 | ||
proxy_trace_storage_passwd | global | yes | string | null | 该参数用来设置trace信息存储位置的密码。 | ||
proxy_trace_storage_port | global | yes | int | 0 | 该参数用来设置trace信息存储位置的端口,可以MySQL和Kafka通用。本参数可以动态修改,但修改之后在当前运行状态中不起作用,需要关闭trace cache之后重新创建。 | ||
proxy_trace_storage_user | global | yes | string | null | 该参数用来设置trace信息存储位置连接用户名,可以MySQL和Kafka通用。本参数可以动态修改,但修改之后在当前运行状态中不起作用,需要关闭trace cache之后重新创建。 | ||
proxy_username_encypted | global | yes | boolean | true | 该参数用来控制Arkproxy在处理用户创建、删除、修改用户信息时,要不要将对应的用户名与host加密,以防止出现权限放大的问题。此参数如果设置为OFF,则处理用户时,Arkproxy会保持用户名为原样。 | ||
proxy_version | global,readonly | no | string | 该参数用来显示当前中间层的版本号,版本信息以时间为序列,比如”18.02.23”表示是2018年2月23号的版本。类型为只读,只能查看,不能修改。 | |||
proxy_net_per_buffer_max_size | global | yes | int | 0 | 1024 | 1、参数非必须,可在线修改,默认值为0时表示不控制最大值 2、通常如果自动内存优化能够有效控制内存则不需要设置最大值。 3、如果参数设置大于0但小于1024则会内部使用1024作为最小值 4、如果需要设置最大值,可以参考show proxy connection status; 结果中的Recv_Average_Buf_Len来进行设置 5、设置最大值以后如果sql返回结果集需要的buffer大于此值,其影响是会给这个sql另外申请内存空间使用完毕后释放,而频繁的申请内存空间可能有一定的性能损失。可以动态修改此参数观察性能变化。 | |