linux I/O优化 物理内存与swap使用策略设置
文件:/proc/sys/vm/swappiness
含义:调整使用物理内存及磁盘swap的优先级
数值范围:[0-100]
0,将会避免使用swapping
100,将会尽量使用swapping
少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。
参考:http://wlservers.blog.163.com/blog/static/120622304201241715945256/
文件:/proc/sys/vm/swappiness
含义:调整使用物理内存及磁盘swap的优先级
数值范围:[0-100]
0,将会避免使用swapping
100,将会尽量使用swapping
少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。
参考:http://wlservers.blog.163.com/blog/static/120622304201241715945256/
一、准备工作
共性准备配置
1.ntp服务器
|
1 2 3 |
ntpdate time-server-ip #将时间写入bios hwclock --systohc |
2.关闭iptables及selinux
3.配置hosts文件(增加Manager机记录、增加所有slaver机记录)
slaver机准备
1.slaver机配置yum文件(添加cm、cdh的源,添加rhel光盘的源)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vim /etc/yum.repos.d/cloudera-cdh5-local.repo #内容如下 [cloudera-cdh5] # Packages for Cloudera’s Distribution for Hadoop, Version 5, on RedHat or CentOS 6 x86_64 name=Cloudera’s Distribution for Hadoop, Version 5 baseurl=http://cdh_manager.ctbj/cdh5/ gpgcheck = 0 enabled = 1 [cloudera-manager] name = Cloudera Manager, Version 5.1.1 baseurl = http://cdh_manager.ctbj/cm/ gpgcheck = 0 enabled=1 |
(添加光盘的源不再赘述)
manager机准备
1.安装并建立本地repo的http服务
|
1 2 3 4 5 6 |
yum install httpd service httpd start chkconfig httpd on #将cm、cdh、redhat的本地源拷贝到/var/www/html unzip -d /var/www/html cm.zip …… |
2.http://bananalighter.blog.51cto.com/6386339/1546624
二、使用CM 安装CDH
添加主机按提示操作(选择本地repo)。
一、查看用户的表空间
表:dba_users
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
SQL> desc dba_users; Name Null? Type ----------------------------------------- -------- ---------------------------- USERNAME NOT NULL VARCHAR2(30) USER_ID NOT NULL NUMBER PASSWORD VARCHAR2(30) ACCOUNT_STATUS NOT NULL VARCHAR2(32) LOCK_DATE DATE EXPIRY_DATE DATE DEFAULT_TABLESPACE NOT NULL VARCHAR2(30) TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30) CREATED NOT NULL DATE PROFILE NOT NULL VARCHAR2(30) INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30) EXTERNAL_NAME VARCHAR2(4000) PASSWORD_VERSIONS VARCHAR2(8) EDITIONS_ENABLED VARCHAR2(1) AUTHENTICATION_TYPE VARCHAR2(8) SQL> select username,default_tablespace from dba_users; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ PATROL TBS_MONITOR |
二、查看表空间
表:dba_data_files
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
SQL> desc dba_data_files Name Null? Type ----------------------------------------- -------- ---------------------------- FILE_NAME VARCHAR2(513) FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7) SQL> select file_name,tablespace_name,bytes,maxbytes from dba_data_files where tablespace_name='TBS_MONITOR'; FILE_NAME -------------------------------------------------------------------------------- TABLESPACE_NAME BYTES MAXBYTES ------------------------------ ---------- ---------- +DGDATA/bj4adb/datafile/tbs_cipa TBS_MONITOR 1073741824 1.0737E+10 |
三、查看用户权限(注意用户名大写,否则查不到)
表:dba_sys_privs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SQL> DESC DBA_SYS_PRIVS; Name Null? Type ----------------------------------------- -------- ---------------------------- GRANTEE NOT NULL VARCHAR2(30) PRIVILEGE NOT NULL VARCHAR2(40) ADMIN_OPTION VARCHAR2(3) SQL> select * from dba_sys_privs where grantee='PATROL'; GRANTEE PRIVILEGE ADM ------------------------------ ---------------------------------------- --- PATROL UNLIMITED TABLESPACE NO PATROL CREATE TABLESPACE NO PATROL CREATE VIEW NO PATROL CREATE TABLE NO PATROL CREATE SESSION NO |
四、查看用户角色(注意用户名大写,否则查不到)
表:dba_role_privs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SQL> DESC DBA_ROLE_PRIVS; Name Null? Type ----------------------------------------- -------- ---------------------------- GRANTEE VARCHAR2(30) GRANTED_ROLE NOT NULL VARCHAR2(30) ADMIN_OPTION VARCHAR2(3) DEFAULT_ROLE VARCHAR2(3) SQL> select * from dba_role_privs where grantee='PATROL'; GRANTEE GRANTED_ROLE ADM DEF ------------------------------ ------------------------------ --- --- PATROL DBA NO YES |
今天两台机器的fstab文件被改错了,修复fstab后恢复了。
一个老问题:
/dev/mapper/vg_temp-lv_root与/dev/vg_temp/lv_root到底是啥关系。
/dev/vg_temp/lv_root是物理地址,无需多说。
mapper这个是逻辑地址,是到物理设备(物理地址)的映射。由device mapper进行管理。
具体看链接:http://www.ibm.com/developerworks/cn/linux/l-devmapper/#
今天fstab编写错误导致不能开机,错误图:
恢复关键是得到正确的fstab文件。
|
1 2 3 4 |
#以可读写方式重新挂载文件系统(否则不能修改fstab文件) mount -o remount,rw / #改正/etc/fstab reboot |
相关:
http://bananalighter.com/linux-fstab/
http://bananalighter.com/linux-fstab-auto-mount-lv/
MHA实现了mysql 的自动故障切换,但是切换后还需要手工修改应用的访问ip。
原文:http://bananalighter.com/mysql-master-ha-solution-one-master-one-candidate-master-and-multiple-slaves-configuration/
本文将配置keepalived与MHA一起工作,实现对mysql应用的透明高可用。
一、确定工作模式
MHA是检测mysql进程状态,自动连接备用机进行切换。
keepalived是检测keepalived的进程状态,自动将虚拟IP切换到备机。
因此在故障切换时,需要先切换mysql,等备机的mysql服务可用以后切换虚拟IP。
二、工作方式
MHA完成mysql master的切换后,调用“master_ip_failover”脚本杀死keepalived进程,触发keepalived切换虚拟IP。
1.修改/etc/masterha_default.cnf
|
1 2 3 4 5 6 7 8 9 10 11 |
[server default] user=root password=root ssh_user=root master_binlog_dir= /var/lib/mysql remote_workdir=/data/log/masterha #secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2 ping_interval=3 master_ip_failover_script=/script/masterha/master_ip_failover #shutdown_script= /script/masterha/power_manager #report_script= /script/masterha/send_master_failover_mail |
2.配置keepalived
直接使用官方源安装keepalived。
编辑/etc/keepalived/keepalived.conf
MASTER的配置文件:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
! Configuration File for keepalived global_defs { # notification_email { # acassen@firewall.loc # failover@firewall.loc # sysadmin@firewall.loc # } # notification_email_from Alexandre.Cassen@firewall.loc # smtp_server 192.168.200.1 # smtp_connect_timeout 30 # router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER #candidate master则写BACKUP interface eth0 virtual_router_id 51 #同一个集群这个东西是一样的 priority 100 #从254到1,master > candidate master advert_int 1 authentication { #认证账号,同一个集群一样 auth_type PASS auth_pass 1111 } virtual_ipaddress { #虚拟ip,主先用着,主跪了就飘给备 172.19.17.228 } } |
candidate MASTER的配置文件
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
! Configuration File for keepalived global_defs { # notification_email { # acassen@firewall.loc # failover@firewall.loc # sysadmin@firewall.loc # } # notification_email_from Alexandre.Cassen@firewall.loc # smtp_server 192.168.200.1 # smtp_connect_timeout 30 # router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.19.17.228 } } |
三、配置masterha的ip failover脚本
新建文件:/script/masterha/master_ip_failover
|
1 |
service keepalived stop |
四、使用测试
1.起keepalived
2.起mysql(注意,mysql的master ip应该配主机地址)
3.停master的mysql
|
1 2 3 4 5 6 |
[root@testdb1 ~]# service mysql stop Shutting down MySQL (Percona Server).....[ OK ] [root@testdb1 ~]# service keepalived status keepalived is stopped [root@testdb1 ~]# masterha_check_status --conf=/etc/masterha/test_MMS.cnf test_MMS is stopped(2:NOT_RUNNING). |
4.测试failover是否成功
使用其他机器通过虚地址228登陆mysql
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@banana ~]# mysql -h 172.19.17.228 -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 51 Server version: 5.6.19-67.0-log Percona Server (GPL), Release 67.0, Revision 618 Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye |
能登陆,成功了。
5.检查两台备机的情况
candidate master(211):
|
1 2 3 4 5 6 7 8 9 10 |
mysql> show slave status\G Empty set (0.00 sec) mysql> show master status -> ; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000006 | 120 | test | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) |
已经成功升主。
slave(227):
|
1 2 3 4 5 6 7 8 9 |
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.19.17.211 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000006 Read_Master_Log_Pos: 120 |
已经将主切换为211.
测试成功,大功告成。
原文:http://www.u1city.net/Article-538.html
第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。
但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。
一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。
第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。
PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。
一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近兴起的公司有AppFog, Mendix 和 Standing Cloud
第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。
你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。
一些用作商务的SaaS应用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。
|
1 2 3 4 |
SELECT s.sid, s.username, u.tablespace, s.sql_hash_value||'/'||u.sqlhash hash_value, u.segtype, u.contents, u.extents, u.blocks FROM v$session s, v$sort_usage u WHERE s.saddr=u.session_addr; |
|
1 2 3 4 5 |
select sess.username, sql.sql_text, sort1.blocks from v$session sess, v$sqlarea sql, v$sort_usage sort1 where sess.serial# = sort1.session_num and sort1.sqladdr = sql.address and sort1.sqlhash = sql.hash_value and sort1.blocks > 200; |
场景:新建了lv来扩充目录,需要其重启后保持挂载。
|
1 2 3 4 |
#编辑文件:/etc/fstab #添加 /dev/vg_oemapp/lv_app /app ext4 defaults 1 2 |
关于这个fstab文件的各项含义,见下文。
参考:http://blog.sina.com.cn/s/blog_6ce9e88701014jgl.html
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作,而fstab正是负责这一配置。显然,根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。上面还提到,Linux分区交换也需要独立使用一个分区,因此,安装一个Linux至少需要两个分区。(事实上,只使用一个分区安装Linux也是可能的,而且,如果电脑的物理内存足够大,交换分区并不是必须的)
本文将以某一典型的debian系统为例。打开 /etc/fstab 文件
1 |
[root@www ~]# vi /etc/fstab |
默认情况下,fstab中已经有了当前的分区配置,内容可能类似:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / ext3 errors=remount-ro 0 1
/swapfile swap swap defaults 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
由上面的内容可以看出,系统的 /dev/hda1 分区被挂载在根目录,文件系统是ext3。此外,还有proc、swap等特殊的“分区”,与 /dev/hdc 被作为光驱挂载在了 /media/cdrom0
因此,如果希望将新分区 /dev/hda5 挂载在 /home/new 目录下,则只需在fstab文件中加入一行:
/dev/hda5 /home/new ext3 default 0 1
即可。
第一列可以是实际分区名,也可以是实际分区的卷标(Lable)。
如果磁盘是SATA接口,且有多个磁盘,则每个磁盘被标记为 /dev/hda 、 /dev/hdb、 /dev/hdc 等以此类推;而每个磁盘的分区被标记为 /dev/hda1、 /dev/hda2等。
如果磁盘是SCSI类型,则多个磁盘会被分别标记为 /dev/sda、/dev/sdb等等。分区同理。
如果使用标签来表示,则格式如:
1LABLE=/
第二列是挂载点。
挂载点必须为当前已经存在的目录,为了兼容起见,最好在创建需要挂载的目标目录后,将其权限设置为777,以开放所有权限。
第三列为此分区的文件系统类型。
Linux可以使用ext2、ext3等类型,此字段须与分区格式化时使用的类型相同。也可以使用 auto 这一特殊的语法,使系统自动侦测目标分区的分区类型。auto通常用于可移动设备的挂载。
第四列是挂载的选项,用于设置挂载的参数。
常见参数如下:
auto: 系统自动挂载,fstab默认就是这个选项
defaults: rw, suid, dev, exec, auto, nouser, and async.
noauto 开机不自动挂载
nouser 只有超级用户可以挂载
ro 按只读权限挂载
rw 按可读可写权限挂载
user 任何用户都可以挂载
请注意光驱和软驱只有在装有介质时才可以进行挂载,因此它是noauto
第五列是dump备份设置。
当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作;
第六列是fsck磁盘检查设置。
其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。
当修改完此文件并保存后,重启服务器生效。
参考:http://wubx.net/category/cluster/
官网:
配置MySQL服务器的机器名或是IP地址,这个配置项是必须的,而且只能配置在[server_xxx]这个块下面。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| hostname | Yes | Local Only | – | hostname=mysql_server1, hostname=192.168.0.1, etc |
MySQL服务器的ip地址。 默认从gethostname($hostname)中获得。 默认不用配置这个参数,MHA可以通过hostname自动获取,MHA通过IP地址连接MySQL服务器及SSH连接。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ip | No | Local Only | 通过gethostbyname($hostname)获得 | ip=192.168.1.3 |
MySQL运行的端口号。 默认是3306. MHA使用IP和端口号连接MySQL
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| port | No | Local/App/Glbal | 3306 | port=3306 |
(从MHA 0.53后开始支持) MHA要ssh上MySQL目标服务器使用hostname 或是ip地址。这个参数主要用于在使用多个VLAN的环境中。为了安全原因ssh默认不允许。默认这个参数和hostname相同。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_host | No | Local Only | 和hostname相同 | ssh_host=mysql_server1, ssh_host=192.168.0.1, etc |
(从MHA 0.53后开始支持) 和ssh_host作用相同。 默认是gethostname($ssh_host)获得。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_ip | No | Local Only | gethostbyname($ssh_host) | ssh_ip=192.168.1.3 |
(从MHA 0.53后开始支持) SSH使用的端口号,默认是22.
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_port | No | Local/App/Global | 22 | ssh_port=22 |
(从MHA 0.54后支持)默认是5秒。在没添加这个参数之前ssh超时时间是写死的。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_connection_timeout | No | Local/App/Global | 5 | ssh_connect_timeout=5 |
(从MHA 0.53后支持) 添加ssh命令行的支持参数,例如加上特别文件名的key的支持等。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_options | No | Local/App/Global | “” 空的 | ssh_options=”-i /root/.ssh/id_dsa2″ |
你可能对于同一组slave中有着不同的规划,有的其望在Master故障时,提升为新的Master(如: Raid1的slave比Raid0的slave更适合做Master)
这个参数的作用是当设计candidate_master = 1时,这个服务器有较高的优先级提升为新的master(还要具备: 开启binlog, 复制没有延迟)。 所以当设置了candidate_master = 1的机器在master故障时必然成为新的master. 但这是很有用的设置优先级的一个参数。
如果设置了多台机器的caddidate_master = 1 , 优先策略依赖于块名字([server_xxx]). [server_1] 优衔权高于[server_2].
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| candidate_master | No | Local Only | 0 | candidate_mast=1 |
当设置了no_master = 1的服务器,这个服务器永远不会提升为新的master. 这个参数据对于永远不期望成为master的机器很有用。 如: 你可能需要在使用raid0的机器上设置no_master = 1 或是你希望在远程的idc里运行一个slave. 注意: 当没有可以成为新master的机器是MHA就直接退出来了同时停止监控和master故障切换。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| no_master | No | Local Only | 0 | no_master=1 |
在默认情况下,MHA manager不会在slave存在故障的情况下(已经不能通过SSH/MySQL进行连接,或是SQL Thread已经停止出错,其它原因)的情况下进行Master的故障切换(当不存在slave时MHA manager也会退出)。 但有些情况下你期望在slave存在问题的情况下,也进行故障切换。 所以当设置了ignore_fail = 1时,MHA会在所有的机器有问题的时间也会进行故障切换。 默认是0.
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ignore_fail | No | Local Only | 0 | ignore_fail=1 |
#skip_init_ssh_check#
在MHA manager启动时跳过ssh检查。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| skip_init_ssh_check | No | Local Only | 0 | skip_init_ssh_check=1 |
(从MHA 0.56开始支持) Master故障切换后新的master上执行RESET SLAVE(ALL).
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| skip_reset_slave | No | Local/App/Global | 0 | skip_reset_slave=1 |
用于管理MySQL的用户名。这个最后需要root用户,因为它需要执行:stop slave; change master to , reset slave. 默认: root
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| user | No | Local/App/Global | root | user=mysql_root |
MySQL的管理用户的密码。 默认是空的
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| password | No | Local/App/Global | 空的 | password=rootpass |
MySQL用于复制的用户,也是用于生成CHANGE MASTER TO 每个slave使用的用户。 这个用户必须有REPLICATION SLAVE权限在新的Master上。默认情况下 repl_user会在将来成为master的机器上运行show slave status获取到。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| repl_user | No | Local/App/Global | 从show slave status | repl_user=repl |
MySQL中repl_user用户的密码。 默认是当前复制用的密码。 当你使用online_master_switch时,当使用–orig_master_is_new_slave(原来的Master成为新Master的一个slave)时,如果没有repl_password 开启同步就会失败了。因为当前master上用于复制的用户名和密码都是空的(MHA在原来的Master上执行change master to 时没有带复制的密码,虽然其它slave上设置了复制的密码)
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| repl_password | No | Local/App/Global | 当前复制用的密码 | repl_password=replpas |
当设置了这个参数,在slave应用差异的relay log时不会产生二进制日志。 内部实现通过mysqlbinlog的disable-log-bin实现。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| disable_log_bin | No | Local/App/Global | 0 | disable_log_bin=1 |
指定MySQL的pid文件。 这个参数在一台服务器上运行多个MySQL服务进程时非常有用。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| master_pid_file | No | Local/App/Global | – | master_pid_file=/var/lib/mysql/master1.pid |
MHA Mananger, MHA node系统上的用户。 这个帐号需要在远程机器上有执行权限(Manager->MySQL),在slave成员之间复制差异的relay-log(MySQL->MySQL)
这个用户必须有读取MySQL的binary/relay日志和relay_log.info的权限,还需要对远程MySQL上remote_workdir目录的写权限。
这个用户还必须可以直接ssh到远程机顺上, 推荐使用ssh pbulic key . 一般使用的ssh_user也是运行manager那个那个用户。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ssh_user | No | Local/App/Global | 当前使用的系统用户 | ssh_user=root |
MHA node上工作目录的全路径名。如果不存在,MHA node会自动创建,如果不允许创建,MHA Node自动异常退出。 需要注意MHA manager 或是MHA node上需要检查空间是否可用,所以需要注意检查这个。 一般默认, remote_workdir是的”/var/tmp”
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| remote_workdir | No | Local/App/Global | /var/tmp | remote_workdir=/var/log/masterha/app1 |
master上用于存储binary日志的全路径。这个参数用于当master上mysql死掉后,通过ssh连到mysql服务器上,找到需要binary日志事件。这个参数可以帮助用于无法找到master进程死掉后binary日志存储位置。
一般: master_binlog_dir是”/var/lib/mysql/, /var/log/mysql”. “/var/lib/mysql/”是大多数系统发行版本的存放位置,”/var/log/mysql”是ubuntu发行版本的存放位置。 你也可以设置多个存放位置用逗号隔开。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| master_binlog_dir | No | Local/App/Gobal | /var/lib/mysql | master_binlog_dir=/data/mysql1,/data/mysql2 |
设置MHA manager记录LOG的级别。 默认是info级别而且大多数情况也是比较适合。 同样可以设置为: debug/info/warning/error.
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| log_level | No | App/Global | info | log_level=debug |
用于指定mha manager产生相关状态文件全路径。 如果没设置 默认是/var/tmp
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| manager_workdir | No | App | /var/tmp | manager_workdir=/var/log/masterha |
指定mha manager的绝对路径的文件名日志文件。 如果没设置MHA Manager将打印到STDOUT/STDERR。 当手工执行故障切换(交互模式切换),MHA Manager会忽略manager_log设置直接将日志输出到STDOUT/STDERR.
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| manager_log | No | App | STDERR | manager_log=/var/log/masterha/app1.log |
在默认情况下,当一个slave同步延迟超过100M relay log(需要应用超过100M relay log), MHA在做故障切换时不会选择这个slave做为新的master,因为恢复需要经过很长时间.当设置了check_repl_delay = 0, MHA将忽略被选择的slave上的同步延迟。 这个选项在设置了candidate_master = 1特声明的期望这台机器成为master的情况下特别有用。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| check_repl_delay | No | App/Golbal | 1 | check_repl_delay=0 |
在默认下情况,当master和slave设置了不同了binary log/replication 过滤规则时,MHA直接报错不会进行监控和故障切换。 这些将会导致出现一些异想不到的错误”Table not exists”。如果你100%确认不同的过滤规则不会导致恢复中的错误,设置check_repl_filter=0。 需要注意: 当使用了check_repl_filter = 0时,MHA不会检查过滤规则在应用差异的relay日志,所以有可能会出现”Table not exists”的错误。当你设置了这个参数请小心处理。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| check_repl_filter | No | App/Global | 1 | check_repl_filter=0 |
在默认情况下,和Master最接近的slave(一个slave从Master上获得了最一个binlog事件)是最有优先权成为新的master。 如果你想控制一下切换的策略(如: 先选择host2,如果不行,选host3;host3不行,选host4…) 那么设置latest_priority = 0 就可以了。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| latest_priority | No | App/Global | 1 | latest_priority=0 |
从MHA 0.52开始, 多层复制可以支持了。在默认情况下,不支持三层或是更多层的复制配置。 如果: host2从host1上复制,host3从host2上复制。 在默认配置的情况下不支持写host{1,2,3},因为这是一个三层的复制,MHA Manager会停止报错。 当设置了multi_tier_slave, MHA Manager就不会在三层复制报错停止。 但是会忽略第三层的机器。也就是如果host1挂了,host2将会成为新的master,host3还是从host2上进行复制。
这个参数在MHA Manager 0.52后的版开始支持。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| muli_tier_slave | No | App/Global | 0 | multi_tier_slave=1 |
这个参数设置MHA Manager多长时间去ping一下master(执行一些SQL语句). 当失去和master三次偿试,MHA Manager会认为MySQL Master死掉了。也就是说,最大的故障切换时间是4次ping_interval的时间,默认是3秒。
如果MHA Manager在和MySQL创建连接时都收到多连接错误或是认证错误,这个就不做重试就会认为master已经挂掉。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ping_interval | No | App/Global | 3 | ping_interval=5 |
(从MHA 0.53后开始支持) 在默认情况下, MHA manager和MySQL创建一个连接执行”select 1″(ping_type=select)用于检查master是否健康。 但有一些情况: 每次检测都连接/然后断开会比较好一点,这样对于tcp方面的错误感知更快一点。设置ping_type=CONNECT 就行了。从MHA 0.56后pint_type=INSERT也被添加。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| ping_type | No | App/Global | SELECT | ping_type=CONNECT |
一般来讲, 非常推荐使用更多网络上机器是不同路由策略上的机器来检查MySQL Master是否存活。 默认情况下,只有MHA Manager通过一个路由来检查Master是否存活。这个也是不推荐的。MHA可以通过外部secondary_check_script配置的脚本来做到从多个路由策略下进行检查。
secondary_check_script = masterha_secondary_check -s remote_host1 -s remote_host2
secondary_check_script包含在MHA Manager发行包中。 MHA中内置的secondary_check_script在大多数情况下工作良好,但并不是任何地都可以使用这个脚本。
在上面的例子中, MHA Manager通过Manager->(A)->remote_host1->(B)->master_host 和Manager->(A)-remote_host2->(B)->master_host来检查MySQL master是否存活。如果在连接过程中通过A可以都成功,通过B是都失败,secondary_\check_\script返回0,而且认为master已经死掉,进行故障切换。如果通过A成功,但返回代码为: 2,则MHA manager有会认为是网络问题,则不会进行故障切换。如果A成功,B也成功,masterha_secondary_check 退出返回:3 则MHA Manager就为认为MySQL Master为存活状态, 则不会进行故障切换。
一般来讲, remote_host1和remote_host2是和MHA Manager及MySQL Server位于不同的网段中。
MHA会调用secondary_check_script声明的脚本并自动带上一些参数。 masterha_secondary_check在很多场景都是适用的,但是你也可以自已实现这个程序带有更多的功能。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| secondary_check_script | No | App/Global | null | secondary_check_script= masterha_secondary_check -s remote_dc1 -s remote_dc2 |
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| master_ip_failover_script | No | App/Global | null | master_ip_failover_script=/usr/local/custom_script/master_ip_failover |
这个参数有点类似于master_ip_failover_script,但这个参数不用于master 故障转意,只使用到master在线的切换。
–command=stop or stopssh
–orig_master_host = (当前master的主机名)
–orig_master_ip = (当前master的ip地址)
–orig_master_port = (当前master的port端口号)
–orig_master_user = (当前master的用户)
–orig_master_password = (当前master的用户名)
–orig_master_ssh_user = (从0.56支持,当前master的ssh的用户名)
–orig_master_is_new_slave = (从 0.56 ,是否把原Master更改为新的slave)
–command=start
–orig_master_host = ( 原master的机器名 )
–orig_master_ip = ( 原master的ip )
–orig_master_port = ( 原master的端口号 )
–new_master_host = (新master的机器名)
–new_master_ip = (新master的ip)
–new_master_port = (新master的端口号)
–new_master_user = (新master上的用户名)
–new_master_password = (新master上的用户名及密码)
–new_master_ssh_user = (从0.56支持, 新master上的ssh用户)
MHA在冻结写的切换过程中会在Master上执行FlUSH TABLES WITH READ LOCK,在这个优雅的切换过程不会有任何写入的。在新的Master在开始授权写的过程中,你可以做和master_ip_failover_script一样的事情。 例如: 创建用户及权限, 执行set global read_only=0, 更新数据库路由表竺。 如果脚本执行退出码不是0 或是10, MHA Manager异常退出并发不会继续进行master切换。
默认这个参数是空的,所以MHA Manager在默认情况下什么也不做。
可以在(MHA Manager package)/samples/scripts/master_ip_online_change。里找到例子脚本。例子脚本包含于MHA Manager源文件或是GitHub的分支中。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| master_ip_online_change_script | No | App/Global | null | master_ip_online_change_script= /usr/local/custom_script/master_ip_online_change |
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| shutdown_script | No | App/Global | null | shutdown_script= /usr/local/custom_script/master_shutdown |
在Master故障完毕后,也许想发一个送一个报告(如email)报告一下切换完毕或是发生的错误。report_script可以完成这个工作。MHA Manager可以通过以下参数使用:
可以在(MHA Manager package)/samples/scripts/send_report里找到例子脚本。例子脚本包含于MHA Manager源文件或是GitHub的分支中。
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| report_script | No | App/Global | null | report_script= /usr/local/custom_script/report |
这个参数用于不想设置明文在配置文件中(如:密码相关)。 只用返回”name=value”这样的值。 这个可以用来复盖global配置中的一些值。一个例子脚本如下。
#!/usr/bin/perl
print “password=$ROOT_PASS\n”;
print “repl_password=$REPL_PASS\n”;
如:
| 参数名 | 是否必须 | 作用域 | 默认值 | 例子及说明 |
| init_conf_load_script | No | App/Global | null | report_script= /usr/local/custom_script/init_conf_loader |