• 【MHA】MySQL高可用MHA介绍5-所有参数


    目录

    所有参数

    hostname

    IP

    port

    ssh_host

    ssh_ip

    ssh_port

    ssh_connection_timeout

    ssh_options

    candidate_master

    no_master

    ignore_fail

    skip_init_ssh_check

    skip_reset_slave

    user

    password

    repl_user

    repl_password

    disable_log_bin

    master_pid_file

    ssh_user

    remote_workdir

    master_binlog_dir

    manager_workdir

    client_bindir

    client_libdir

    manager_log

    check_repl_delay

    check_repl_filter

    latest_priority

    multi_tier_slave

    ping_interval

    ping_type

    secondary_check_script

    master_ip_online_change_script

    shutdown_script

    report_script

    init_conf_load_script


    所有参数

    Parameter NameRequired?Parameter ScopeDefault ValueExample
    hostnameYesLocal Only-hostname=mysql_server1, hostname=192.168.0.1, etc
    ipNoLocal Onlygethostbyname($hostname)ip=192.168.1.3
    portNoLocal/App/Global3306port=3306
    ssh_hostNoLocal Onlysame as hostnamessh_host=mysql_server1, ssh_host=192.168.0.1, etc
    ssh_ipNoLocal Onlygethostbyname($ssh_host)ssh_ip=192.168.1.3
    ssh_portNoLocal/App/Global22ssh_port=22
    ssh_connection_timeoutNoLocal/App/Global5ssh_connection_timeout=20
    ssh_optionsNoLocal/App/Global""(empty string)ssh_options="-i /root/.ssh/id_dsa2"
    candidate_masterNoLocal Only0candidate_master=1
    no_masterNoLocal Only0no_master=1
    ignore_failNoLocal Only0ignore_fail=1
    skip_init_ssh_checkNoLocal Only0skip_init_ssh_check=1
    skip_reset_slaveNoLocal/App/Global0skip_reset_slave=1
    userNoLocal/App/Globalrootuser=mysql_root
    passwordNoLocal/App/Global""(empty string)password=rootpass
    repl_userNoLocal/App/GlobalMaster_User value from SHOW SLAVE STATUSrepl_user=repl
    repl_passwordNoLocal/App/Global- (current replication password)repl_user=replpass
    disable_log_binNoLocal/App/Global0disable_log_bin=1
    master_pid_fileNoLocal/App/Global""(empty string)master_pid_file=/var/lib/mysql/master1.pid
    ssh_userNoLocal/App/Globalcurrent OS userssh_user=root
    remote_workdirNoLocal/App/Global/var/tmpremote_workdir=/var/log/masterha/app1
    master_binlog_dirNoLocal/App/Global/var/lib/mysqlmaster_binlog_dir=/data/mysql1,/data/mysql2
    log_levelNoApp/Globalinfolog_level=debug
    manager_workdirNoApp/var/tmpmanager_workdir=/var/log/masterha
    client_bindirNoApp-client_bindir=/usr/mysql/bin
    client_libdirNoApp-client_libdir=/usr/lib/mysql
    manager_logNoAppSTDERRmanager_log=/var/log/masterha/app1.log
    check_repl_delayNoApp/Global1check_repl_delay=0
    check_repl_filterNoApp/Global1check_repl_filter=0
    latest_priorityNoApp/Global1latest_priority=0
    multi_tier_slaveNoApp/Global0multi_tier_slave=1
    ping_intervalNoApp/Global3ping_interval=5
    ping_typeNoApp/GlobalSELECTping_type=CONNECT
    secondary_check_scriptNoApp/Globalnullsecondary_check_script= masterha_secondary_check -s remote_dc1 -s remote_dc2
    master_ip_failover_scriptNoApp/Globalnullmaster_ip_failover_script=/usr/local/custom_script/master_ip_failover
    master_ip_online_change_scriptNoApp/Globalnullmaster_ip_online_change_script= /usr/local/custom_script/master_ip_online_change
    shutdown_scriptNoApp/Globalnullshutdown_script= /usr/local/custom_script/master_shutdown
    report_scriptNoApp/Globalnullreport_script= /usr/local/custom_script/report
    init_conf_load_scriptNoApp/Globalnullinit_conf_load_script = /usr/local/custom_script/init_conf_loader

    • Local Scope: 服务器范围参数。局部范围参数应该在应用配置文件中的 [server_xxx] 块下设置。
    • App Scope: 每个{主,从}对的参数。这些参数应该在应用配置文件中的 [server_default] 块下设置。
    • Global Scope: 所有{主,从}对的参数。当您从单个管理服务器管理多个{主,从}对时,全局范围参数非常有用。这些参数应该在全局配置文件中设置。

    hostname

    目标 MySQL 服务器的主机名或 IP 地址。此参数是强制性的,并且必须在应用配置文件中的 [server_xxx] 块下进行配置。

    IP

    目标 MySQL 服务器的 IP 地址。默认值是通过 gethostbyname($hostname) 获取的。MHA 管理器和 MHA 节点在内部使用此 IP 地址通过 MySQL 和 SSH 进行连接。通常情况下,您不需要配置此参数,因为它会自动从主机名参数中解析出来。

    port

    目标 MySQL 服务器的端口号。默认值是 3306。MHA 使用 IP 地址和端口连接到 MySQL 服务器。

    ssh_host

    (从 0.53 版本开始支持)

    用于 SSH 的目标 MySQL 服务器的主机名或 IP 地址。当您处于多 VLAN 配置时,此参数 (和 ssh_port 参数) 是有用的:出于安全原因,不允许在数据 VLAN 上进行 SSH。默认值与主机名相同。

    ssh_ip

    (从 0.53 版本开始支持)

    用于 SSH 的目标 MySQL 服务器的 IP 地址。默认值是通过 gethostbyname($ssh_host) 获取的。

    ssh_port

    (从 0.53 版本开始支持)

    用于 SSH 的目标 MySQL 服务器的端口号。默认值是 22。

    ssh_connection_timeout

    (从 0.54 版本开始支持)

    默认值为 5 秒。在添加此参数之前,超时是硬编码的。

    ssh_options

    (从 0.53 版本开始支持)

    附加的 SSH 命令行选项。

    candidate_master

    您可能在从服务器之间使用不同类型的机器,并希望将最可靠的机器提升为新主服务器(例如,将 RAID1+0 从属服务器提升为 RAID0 从属服务器)。

    通过将 candidate_master 设置为 1,只要满足成为新主服务器的条件(例如启用了二进制日志,不会显著延迟复制等),服务器就会优先考虑成为新主服务器。因此,candidate_master=1 并不意味着指定的主机在当前主服务器崩溃时总是成为新主服务器,但在设置优先级时很有帮助。

    如果在多个服务器上将 candidate_master 设置为 1,则优先级由块名称([server_xxx])的排序顺序决定。[server_1] 的优先级将高于 [server_2]。

    no_master

    通过在目标服务器上设置 no_master=1,该服务器永远不会成为新主服务器。如果您有一些不应成为新主服务器的服务器,则此选项很有用。例如,当您在不可靠的(RAID0)机器上运行从属服务器或者在远程数据中心运行从属服务器时,您可能想要设置 no_master=1。请注意,如果没有从属服务器可以成为新主服务器,MHA 将中止并且不会开始监视/故障转移。

    ignore_fail

    默认情况下,如果任何一个从属服务器失败(无法通过 MySQL/SSH 连接,SQL 线程停止并出现错误等),MHA 管理器不会启动故障转移。但在某些情况下,您可能希望仅在特定从属服务器失败时继续故障转移。通过在特定服务器上设置 ignore_fail=1,即使这些服务器失败,MHA 也会继续故障转移。默认情况下,它是 0。

    skip_init_ssh_check

    在初始启动时跳过 SSH 连通性检查。

    skip_reset_slave

    (从 0.56 版本开始支持)

    在主服务器故障转移后跳过执行 RESET SLAVE(ALL)。

    user

    连接到目标 MySQL 服务器的 MySQL 管理数据库用户名。这应该是 root,因为它运行所有必要的管理命令,例如 STOP SLAVE、CHANGE MASTER、RESET SLAVE。默认情况下,它是 root。

    password

    “user”用户的 MySQL 密码。默认情况下为空。

    repl_user

    在每个从属服务器上 CHANGE MASTER TO master_user .. 时使用的 MySQL 复制用户名。此用户应在目标主服务器上具有 REPLICATION SLAVE 权限。默认情况下,将使用新主服务器上 SHOW SLAVE STATUS(当前作为从属服务器运行)中的 Master_User。

    repl_password

    “repl_user”用户的 MySQL 密码。默认情况下,它是当前复制密码。这意味着当前主服务器的密码。如果您使用设置 --orig_master_is_new_slave(这意味着当前主服务器作为新主服务器的新从属服务器运行)进行在线主服务器切换,而没有设置 repl_password,那么启动从属服务器将失败,因为当前主服务器上的默认复制密码为空(MHA 将在原始主服务器上执行 change master 而不在其他从属服务器上设置复制密码)。

    disable_log_bin

    当设置了此选项时,将差异中继日志应用到从属服务器时,从属服务器不会生成二进制日志。内部 MHA 将 --disable-log-bin 传递给 mysqlbinlog 命令。

    master_pid_file

    设置主服务器的进程 ID 文件。当您在单个服务器内运行多个 MySQL 实例时,这可能很有用。有关详细信息,请参见 shutdown_script 参数。

    ssh_user

    MHA 管理器和 MHA 节点用于访问 MySQL 服务器的操作系统用户名。这是为各种目的所需的,例如远程执行命令(管理器->MySQL)、将差异中继日志从最新的从属服务器复制到其他从属服务器(MySQL->MySQL)等。

    此用户必须至少具有 MySQL 二进制/中继日志文件和 relay_log.info 文件的读权限,以及日志目录(每个 MySQL 服务器上的 remote_workdir)的写权限。

    此用户必须能够连接到服务器而无需任何交互操作。通常建议使用 SSH 公钥身份验证。默认情况下,ssh_user 是管理器上的当前操作系统用户。

    remote_workdir

    每个 MHA 节点(运行在 MySQL 服务器上的)生成日志文件的工作目录的完整路径名。如果不存在,则 MHA 节点会自动创建它。如果未授予足够的权限,则 MHA 节点将中止。请注意,MHA 管理器和 MHA 节点都不会检查可用磁盘空间,因此您需要关注它。默认情况下,remote_workdir 是 "/var/tmp"。

    master_binlog_dir

    主服务器上 MySQL 生成二进制日志的目录完整路径名。如果死亡的 MySQL 主服务器通过 SSH 可访问,为了读取和复制必要的二进制日志事件,则需要此参数。如果主 MySQL 已死机,则无法自动标识二进制日志目录。

    默认情况下,master_binlog_dir 是 "/var/lib/mysql,/var/log/mysql"。/var/lib/mysql 是大多数 MySQL 发行版的默认二进制日志输出目录,而 /var/log/mysql 是 Ubuntu MySQL 软件包的默认二进制日志输出目录。您可以使用逗号分隔的多个目录设置多个目录(例如 /data1,/data2,…)。

    日志级别 MHA 管理器打印的日志阈值。默认为 info,在大多数情况下应该没问题。可以设置为 debug/info/warning/error 之一。

    manager_workdir

    MHA 管理器生成相关状态文件的工作目录的完整路径。如果未设置,则使用 /var/tmp。

    client_bindir

    如果 MySQL 命令行实用程序安装在非标准目录下,请使用此选项设置目录。

    client_libdir

    如果 MySQL 库安装在非标准目录下,请使用此选项设置目录。

    manager_log

    MHA 管理器生成日志的完整路径文件名。如果未设置,则 MHA 管理器打印到 STDOUT/STDERR。在执行手动故障转移(交互式故障转移)时,MHA 管理器会忽略 manager_log 设置,并始终打印到 STDOUT/STDERR。

    check_repl_delay

    默认情况下,如果从属服务器落后于主服务器超过 100MB 的中继日志(需要应用超过 100MB 的中继日志),MHA 不会将从属服务器选为新主服务器,因为恢复需要太长时间。通过将 check_repl_delay 设置为 0,当选择新主服务器时,MHA 会忽略复制延迟。当您在特定主机上设置了 candidate_master=1,并且希望确保该主机可以成为新主服务器时,此选项很有用。

    check_repl_filter

    默认情况下,如果主服务器和从属服务器的任何一个具有不同的二进制日志/复制过滤规则,MHA 会打印错误并且不会启动监视或故障转移。这是为了避免意外的恢复错误,例如“表不存在”。如果您百分之百确定不同的过滤设置不会导致恢复问题,请设置 check_repl_filter = 0。请注意,MHA 不会在应用差异中继日志时检查过滤规则,因此如果设置 check_repl_filter = 0,则可能会遇到“表不存在”(或其他)错误。如果设置此参数,请非常小心。

    latest_priority

    默认情况下,最新的从属服务器(接收到最新的二进制日志事件的从属服务器)被优先选择为新主服务器。如果要完全控制优先级的顺序(例如 host2->host3->host4..),设置 latest_priority=0 将有所帮助。有关详细信息,请参见 FAQ。

    multi_tier_slave

    (从 0.52 版本开始支持)

    从 MHA 管理器版本 0.52 开始,支持多主复制配置。默认情况下,不允许在 MHA 配置文件中设置三个或更多级别的从属服务器:例如,假设 host2 从 host1 复制,host3 从 host2 复制。默认情况下,不允许在配置文件中写入 host1,2,3,因为这是三级复制,而 MHA 管理器会报错并停止。通过设置 multi_tier_slave,MHA 管理器不会因为三级复制而中止,而只是简单地忽略第三级主机。如果主机1(主)崩溃,主机2 将被选为主服务器,并且主机3 将继续从主机2 复制。

    ping_interval

    此参数说明 MHA Manager 多久 ping(执行 ping SQL 语句)一次主服务器。连续错过三个连接间隔后,MHA 管理器确定 MySQL 主服务器已死亡。因此,通过 ping 机制发现故障的最长时间是 ping 间隔的四倍。默认为 3(3 秒)。

    如果 MHA 管理器由于太多连接或身份验证错误而无法连接,则不会将主服务器视为已死亡。

    ping_type

    (从 0.53 版本开始支持)

    默认情况下,MHA 建立到主服务器的持久连接,并通过执行 "SELECT 1"(ping_type=SELECT)检查主服务器的可用性。但在某些情况下,最好每次连接/断开连接都进行检查,因为它更严格,可以更快地检测到 TCP 连接级别的故障。设置 ping_type=CONNECT 可以实现这一点。从 0.56 版本开始,添加了 ping_type=INSERT。

    secondary_check_script


    通常情况下,强烈建议有两个或更多的网络路由来检查 MySQL 主服务器的可用性。默认情况下,MHA 管理器仅检查单个路由:从管理器到主服务器。但这并不推荐。实际上,MHA 可以通过调用在 secondary_check_script 参数中定义的外部脚本来具有两个或多个检查路由。下面是一个示例配置。

    secondary_check_script = masterha_secondary_check -s remote_host1 -s remote_host2
    masterha_secondary_check 包含在 MHA 管理器软件包中。内置的 masterha_secondary_check 脚本在大多数情况下应该是可以的,但您可以在这里调用任何脚本。

    在上述示例中,MHA 管理器通过 Manager-(A)->remote_host1-(B)->master_host 和 Manager-(A)->remote_host2-(B)->master_host 两个路由检查 MySQL 主服务器的活动。如果连接 A 成功且 B 在两条路由中均失败,则 masterha_secondary_check 以返回代码 0 退出,MHA 管理器确定 MySQL 主服务器实际上已死亡,并将启动故障转移。如果 A 失败,masterha_secondary_check 以返回代码 2 退出,MHA 管理器猜测发生了网络问题,并且不会启动故障转移。如果 B 成功,masterha_secondary_check 以返回代码 3 退出,MHA 管理器了解到 MySQL 主服务器实际上是活动的,并且不会启动故障转移。

    一般来说,remote_host1 和 remote_host2 应该位于 MHA 管理器和 MySQL 服务器的不同网络段上。

    MHA 在 secondary_check_script 参数中调用一个脚本,并自动传递以下参数(因此您不需要在配置文件中设置以下参数)。masterha_secondary_check 在许多情况下应该是合适的,但是如果需要更多功能,可以编写任何网络检查脚本。

    • --user=(远程主机的 SSH 用户名。ssh_user 参数值将被传递)
    • --master_host=(主机名)
    • --master_ip=(主机的 IP 地址)
    • --master_port=(主机的端口号)

    请注意,内置的 masterha_secondary_check 脚本依赖于 IO::Socket::INET Perl 包,默认情况下从 Perl v5.6.0 开始包含。masterha_secondary_check 脚本还通过 SSH 连接到所有远程服务器,因此需要 SSH 公钥身份验证设置。此外,masterha_secondary_check 脚本尝试从远程服务器(由 -s 设置)到 MySQL 主服务器建立 TCP 连接。这意味着 my.cnf 中的 max_connections 设置不受影响。如果 TCP 连接成功,主服务器上的 Aborted_connects 状态变量将增加 1。

    master_ip_online_change_script

    在常见的高可用环境中,很多情况下人们会在主服务器上分配一个虚拟IP地址。如果主服务器崩溃,像Pacemaker这样的高可用软件会接管虚拟IP地址到备用服务器。

    另一种常见方法是创建一个全局目录数据库,其中包含所有应用程序名称和写入者/读取者IP地址之间的映射(例如{app1_master1, 192.168.0.1},{app_master2, 192.168.0.2},…),而不是使用虚拟IP地址。在这种情况下,当当前主服务器失效时,您需要更新目录数据库。

    这两种方法各有利弊。MHA不强制使用一种方法,而是允许用户使用任何IP地址故障转移解决方案。master_ip_failover_script参数可以用于此目的。换句话说,您需要编写一个脚本使应用程序能够透明地连接到新的主服务器,并且必须在master_ip_failover_script参数中定义。以下是一个示例。

    master_ip_failover_script= /usr/local/sample/bin/master_ip_failover


    示例脚本位于(MHA Manager package)/samples/scripts/master_ip_failover。示例脚本包含在MHA Manager压缩包和GitHub分支中。

    MHA Manager调用master_ip_failover_script三次。第一次是在进入主监视之前(用于脚本有效性检查),第二次是在调用shutdown_script之前,第三次是在将所有中继日志应用到新主服务器之后。MHA Manager传递以下参数(您无需在配置文件中设置这些参数)。

    • 检查阶段
      • --command=status
      • --ssh_user=(当前主服务器的ssh用户名)
      • --orig_master_host=(当前主服务器的主机名)
      • --orig_master_ip=(当前主服务器的IP地址)
      • --orig_master_port=(当前主服务器的端口号)
    • 当前主服务器关闭阶段
      • --command=stop或stopssh
      • --ssh_user=(死亡主服务器的ssh用户名,如果通过ssh可达)
      • --orig_master_host=(当前(死亡)主服务器的主机名)
      • --orig_master_ip=(当前(死亡)主服务器的IP地址)
      • --orig_master_port=(当前(死亡)主服务器的端口号)
    • 新主服务器激活阶段
      • --command=start
      • --ssh_user=(新主服务器的ssh用户名)
      • --orig_master_host=(死亡主服务器的主机名)
      • --orig_master_ip=(死亡主服务器的IP地址)
      • --orig_master_port=(死亡主服务器的端口号)
      • --new_master_host=(新主服务器的主机名)
      • --new_master_ip=(新主服务器的IP地址)
      • --new_master_port(新主服务器的端口号)
      • --new_master_user=(新主服务器的用户)
      • --new_master_password(新主服务器的密码)

    如果您在主服务器上使用共享虚拟IP地址,您可能不需要在主服务器关闭阶段执行任何操作,只要稍后在shutdown_script中关闭该机器即可。在新主服务器激活阶段,您可以在新主服务器上分配虚拟IP。如果您使用目录数据库方法,则可能需要在主服务器关闭阶段删除或更新死亡主服务器的记录。在新主服务器激活阶段,您可以插入/更新新主服务器的记录。此外,您可以执行一切必要的操作,以使应用程序能够写入新的主服务器。例如,SET GLOBAL read_only=0,创建具有写权限的数据库用户等。

    MHA Manager检查脚本的退出代码(返回代码)。如果脚本以返回代码0或10退出,则MHA Manager继续操作。如果脚本以除0或10之外的返回代码退出,则MHA Manager中止操作,不会继续故障转移。默认参数为空,因此MHA Manager不会默认调用任何内容。

    shutdown_script

    您可能希望强制关闭主服务器,以便它永远不会重新启动服务(节点屏障)。这对于避免拆分大脑非常重要。以下是一个示例。

    shutdown_script= /usr/local/sample/bin/power_manager


    示例脚本位于(MHA Manager package)/samples/scripts/power_manager。示例脚本包含在MHA Manager压缩包和GitHub分支中。

    在调用shutdown_script之前,MHA Manager会在内部检查MySQL主服务器是否通过SSH可访问。如果SSH可访问(操作系统处于活动状态,但mysqld未运行,即数据文件损坏),MHA Manager会传递以下参数。

    • --command=stopssh
    • --ssh_user=(ssh用户名,以便您可以连接到主服务器)
    • --host=(主服务器的主机名)
    • --ip=(主服务器的IP地址)
    • --port=(主服务器的端口号)
    • --pid_file=(主服务器的PID文件)

    如果主服务器无法通过SSH访问,则MHA Manager会传递以下参数。

    • --command=stop
    • --host=(主服务器的主机名)
    • --ip=(主服务器的IP地址)

    示例脚本的工作原理如下。如果传递了--command=stopssh,则脚本通过SSH在主服务器上使用-9杀死所有mysqld和mysqld_safe进程。如果还传递了--pid_file,则脚本尝试仅杀死指定的进程,而不是杀死所有mysqld进程,如果失败,则杀死所有mysqld和mysqld_safe进程。当您在主服务器上运行多个mysqld实例时,这很有帮助。如果通过SSH停止成功,则脚本以返回代码10退出。如果退出代码为10,则MHA管理器稍后通过SSH连接到主服务器并保存必要的二进制日志。如果脚本无法通过SSH连接到主服务器或者MHA Manager传递了--command=stop,则脚本会尝试关闭计算机电源。关闭电源命令取决于硬件。对于HP(iLO),ipmitool或SSL很常见。对于戴尔(DRAC),dracadm很常见。如果关闭电源成功,则脚本以返回代码0退出。否则以返回代码1退出。如果退出代码为0,则MHA Manager启动故障转移流程。如果退出代码不是0或10,则MHA Manager中止故障转移。默认参数为空,因此MHA Manager不会默认调用任何内容。

    此外,MHA Manager在启动监控时会调用shutdown_script。在那时传递以下参数。您可以在此处检查脚本设置。控制电源高度取决于硬件,因此强烈建议在此处检查电源状态。如果有任何问题,您可以在开始监控之前意识到。

    • --command=status
    • --host=(主服务器的主机名)
    • --ip=(主服务器的IP地址)

    report_script


    当故障转移完成或以错误结束时,您可能希望发送报告(例如电子邮件)。report_script可用于此目的。MHA Manager传递以下参数。

    • --orig_master_host=(已故主服务器的主机名)
    • --new_master_host=(新主服务器的主机名)
    • --new_slave_hosts=(新从服务器的主机名,以逗号分隔)
    • --subject=(邮件主题)
    • --body=(正文)

    默认参数为空,因此MHA Manager不会默认调用任何内容。

    示例脚本位于(MHA Manager package)/samples/scripts/send_report。示例脚本包含在MHA Manager压缩包和GitHub分支中。

    init_conf_load_script


    当您不想在配置文件中设置纯文本时(例如密码和repl_password)可以使用此脚本。通过从此脚本返回“name=value”对,您可以覆盖全局配置文件参数。示例脚本如下。

    1. #!/usr/bin/perl
    2. print "password=$ROOT_PASS\n";
    3. print "repl_password=$REPL_PASS\n";


    默认参数为空,因此MHA Manager不会默认调用任何内容。


     

  • 相关阅读:
    RabbitMQ 如何避免消息重复消费?
    SAP EWM Cross Docking (CD) 越库操作
    java并发编程学习六——乐观锁CAS
    CSC青年骨干教师项目教师节当天开始申报
    vue中echart-gl 3D地图纹理实例
    灵遁者诗歌集《愿来日再续》:当下的美,要当下享受
    8.9模拟赛总结
    又不是程序员,凭什么要求产品经理懂技术?
    Webpack面试题
    Peter算法小课堂—归并排序
  • 原文地址:https://blog.csdn.net/weixin_48154829/article/details/138190528