Monthly Archive: 十一月 2014

oracle 查看用户、表空间及权限

一、查看用户的表空间

表:dba_users

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

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

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

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

 

linux mapper路径与物理路径的关系

今天两台机器的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/#

 

mysql MHA + keepalived 实现高可用

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

[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的配置文件:

! 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的配置文件

! 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

service keepalived stop

四、使用测试

1.起keepalived

2.起mysql(注意,mysql的master ip应该配主机地址)

3.停master的mysql

[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

[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):

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):

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.

测试成功,大功告成。

 

 

 

 

 

 

 

 

 

 

IaaS, PaaS和SaaS 形象的图 马个克

原文:http://www.u1city.net/Article-538.html

iaas-paas-saas

IaaS: Infrastructure-as-a-Service(基础设施即服务)

第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。

但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。

一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。

PaaS: Platform-as-a-Service(平台即服务)

第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。

PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。

一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近兴起的公司有AppFog, Mendix 和 Standing Cloud

SaaS: Software-as-a-Service(软件即服务)

第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。

你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。

一些用作商务的SaaS应用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。

 

 

 

 

oracle 查询占用temp表空间的sql

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;

 

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;

 

linux 开机自动挂载lv分区

场景:新建了lv来扩充目录,需要其重启后保持挂载。

#编辑文件:/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等等。分区同理。

如果使用标签来表示,则格式如:

1 LABLE=/

第二列是挂载点。

挂载点必须为当前已经存在的目录,为了兼容起见,最好在创建需要挂载的目标目录后,将其权限设置为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开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。

当修改完此文件并保存后,重启服务器生效。

【留存】MHA 参数列表详解

参考:http://wubx.net/category/cluster/

官网:

MHA 参数列表

  • Local : 指每一个配置块内部。 Local功能的参数需要放置在[server_xxx] 块下面
  • App : 参数作用于master/slave, 这些参数需要配置在[server_default]块的下面
  • Global : 作用于master/slave, Global级别的参数用于管理多组master/slave结构,可以统一化管理一些参数。

    hostname

    配置MySQL服务器的机器名或是IP地址,这个配置项是必须的,而且只能配置在[server_xxx]这个块下面。
    如:

    参数名 是否必须 作用域 默认值 例子及说明
    hostname Yes Local Only hostname=mysql_server1, hostname=192.168.0.1, etc

    ip

    MySQL服务器的ip地址。 默认从gethostname($hostname)中获得。 默认不用配置这个参数,MHA可以通过hostname自动获取,MHA通过IP地址连接MySQL服务器及SSH连接。
    如:

    参数名 是否必须 作用域 默认值 例子及说明
    ip No Local Only 通过gethostbyname($hostname)获得 ip=192.168.1.3

    port

    MySQL运行的端口号。 默认是3306. MHA使用IP和端口号连接MySQL
    如:

    参数名 是否必须 作用域 默认值 例子及说明
    port No Local/App/Glbal 3306 port=3306

    ssh_host

    (从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

    ssh_ip

    (从MHA 0.53后开始支持) 和ssh_host作用相同。 默认是gethostname($ssh_host)获得。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    ssh_ip No Local Only gethostbyname($ssh_host) ssh_ip=192.168.1.3

    ssh_port

    (从MHA 0.53后开始支持) SSH使用的端口号,默认是22.
    如:

    参数名 是否必须 作用域 默认值 例子及说明
    ssh_port No Local/App/Global 22 ssh_port=22

    ssh_connection_timeout

    (从MHA 0.54后支持)默认是5秒。在没添加这个参数之前ssh超时时间是写死的。
    如:

    参数名 是否必须 作用域 默认值 例子及说明
    ssh_connection_timeout No Local/App/Global 5 ssh_connect_timeout=5

    ssh_options

    (从MHA 0.53后支持) 添加ssh命令行的支持参数,例如加上特别文件名的key的支持等。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    ssh_options No Local/App/Global “” 空的 ssh_options=”-i /root/.ssh/id_dsa2″

    candidate_master

    你可能对于同一组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

    当设置了no_master = 1的服务器,这个服务器永远不会提升为新的master. 这个参数据对于永远不期望成为master的机器很有用。 如: 你可能需要在使用raid0的机器上设置no_master = 1 或是你希望在远程的idc里运行一个slave. 注意: 当没有可以成为新master的机器是MHA就直接退出来了同时停止监控和master故障切换。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    no_master No Local Only 0 no_master=1

    ignore_fail

    在默认情况下,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

    skip_reset_slave

    (从MHA 0.56开始支持) Master故障切换后新的master上执行RESET SLAVE(ALL).

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    skip_reset_slave No Local/App/Global 0 skip_reset_slave=1

    user

    用于管理MySQL的用户名。这个最后需要root用户,因为它需要执行:stop slave; change master to , reset slave. 默认: root

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    user No Local/App/Global root user=mysql_root

    password

    MySQL的管理用户的密码。 默认是空的

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    password No Local/App/Global 空的 password=rootpass

    repl_user

    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

    repl_password

    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

    disable_log_bin

    当设置了这个参数,在slave应用差异的relay log时不会产生二进制日志。 内部实现通过mysqlbinlog的disable-log-bin实现。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    disable_log_bin No Local/App/Global 0 disable_log_bin=1

    master_pid_file

    指定MySQL的pid文件。 这个参数在一台服务器上运行多个MySQL服务进程时非常有用。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    master_pid_file No Local/App/Global master_pid_file=/var/lib/mysql/master1.pid

    ssh_user

    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

    remote_workdir

    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_binlog_dir

    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

    log_level

    设置MHA manager记录LOG的级别。 默认是info级别而且大多数情况也是比较适合。 同样可以设置为: debug/info/warning/error.

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    log_level No App/Global info log_level=debug

    manager_workdir

    用于指定mha manager产生相关状态文件全路径。 如果没设置 默认是/var/tmp

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    manager_workdir No App /var/tmp manager_workdir=/var/log/masterha

    manager_log

    指定mha manager的绝对路径的文件名日志文件。 如果没设置MHA Manager将打印到STDOUT/STDERR。 当手工执行故障切换(交互模式切换),MHA Manager会忽略manager_log设置直接将日志输出到STDOUT/STDERR.

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    manager_log No App STDERR manager_log=/var/log/masterha/app1.log

    check_repl_delay

    在默认情况下,当一个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

    check_repl_filter

    在默认下情况,当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

    latest_priority

    在默认情况下,和Master最接近的slave(一个slave从Master上获得了最一个binlog事件)是最有优先权成为新的master。 如果你想控制一下切换的策略(如: 先选择host2,如果不行,选host3;host3不行,选host4…) 那么设置latest_priority = 0 就可以了。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    latest_priority No App/Global 1 latest_priority=0

    multi_tier_slave

    从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

    ping_interval

    这个参数设置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

    ping_type

    (从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

    secondary_check_script

    一般来讲, 非常推荐使用更多网络上机器是不同路由策略上的机器来检查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在很多场景都是适用的,但是你也可以自已实现这个程序带有更多的功能。

  • –user=(在远程机器上使用的SSH用户名。 ssh_user的值将被使用)
  • –master_host = (master的hostname)
  • –master_ip = (master的ip地址)
  • –master_port = ( master的端口号)注意: 内置的masterha_secondary_check脚本依赖于的Perl的IO::Socket::INET(Perl 5.6.0中是默认支持包含这个模块)。 masterha_secondary_check需要通过ssh连接到远程的机器上,所以需要manager到远程机器上建立public key信任。另外masterha_secondary_check是通过和Master建立TCP的连接测试Master是否存活,所以mysql设置的max_connections不起作用。 但每次TCP连接成功后,MySQL的Aborted_connects 值都会加1。

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    secondary_check_script No App/Global null secondary_check_script= masterha_secondary_check -s remote_dc1 -s remote_dc2

    master_ip_failover_script

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    master_ip_failover_script No App/Global null master_ip_failover_script=/usr/local/custom_script/master_ip_failover

    master_ip_online_changes_script

    这个参数有点类似于master_ip_failover_script,但这个参数不用于master 故障转意,只使用到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)

  • 新的Master接受写的过程:

    –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

    如:

    参数名 是否必须 作用域 默认值 例子及说明
    shutdown_script No App/Global null shutdown_script= /usr/local/custom_script/master_shutdown

    report_script

    在Master故障完毕后,也许想发一个送一个报告(如email)报告一下切换完毕或是发生的错误。report_script可以完成这个工作。MHA Manager可以通过以下参数使用:

  • –orig_master_host = (死掉master机器名)
  • –new_master_host = (新的master机器名)
  • –new_slave_hosts = (新的slave机器名列表,用逗号隔开)
  • –subject = (邮件名)
  • –body = (正文)默认这些参数是空的。 所以默认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

    init_conf_load_script

    这个参数用于不想设置明文在配置文件中(如:密码相关)。 只用返回”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

mysql 数据库崩溃无法启动

兴高采烈的登陆机器测master HA,结果mysql竟然挂了。

那就重启吧

[root@testdb3 mysql]# mysql -uroot p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

我裤子都脱了,结果他给我看这个:

[root@testdb3 mysql]# service mysql start
Starting MySQL (Percona Server).The server quit without updating PID file (/var/run/mysqld/mysqld.pid).[FAILED]

找了半天找到日志目录:/app/mysql/mysqld.log

2014-11-02 13:51:10 6223 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.19-67.0 started; log sequence number 566089844
^G/usr/sbin/mysqld: File './mysql-bin.000001' not found (Errcode: 2 - No such file or directory)
2014-11-02 13:51:10 6223 [ERROR] Failed to open log (file './mysql-bin.000001', errno 2)
2014-11-02 13:51:10 6223 [ERROR] Could not open log file
2014-11-02 13:51:10 6223 [ERROR] Can't init tc log
2014-11-02 13:51:10 6223 [ERROR] Aborting

查找./mysql-bin.000001,发现这个文件不在mysql lib目录(/var/lib/mysql)下面。

[root@testdb3 mysql]# pwd
/var/lib/mysql
[root@testdb3 mysql]# ls
mysql-relay-bin.202753  mysql-relay-bin.202755  RPM_UPGRADE_HISTORY
mysql-relay-bin.202754  mysql-relay-bin.index   RPM_UPGRADE_MARKER-LAST

于是:

[root@testdb3 mysql]# mv /app/mysql/mysql-bin.index /app/mysql/mysql-bin.index.bak
[root@testdb3 mysql]# service mysql start
Starting MySQL (Percona Server)...[  OK  ]

参考:http://blog.csdn.net/lxpbs8851/article/details/8101462

 

 

 

vSphere 高可用

原文:http://blog.sina.com.cn/s/blog_c118afe90101dssf.html

1 应用层高可用性:如实现mysql、oracle数据库应用程序的储群集,主要是判断mysql、oracle应用程序是否停止运行。

2 操作系统高可用性:如windows的故障转移群集(windows failover clustering WFC)。

3 虚拟化层的高可用性:如vsphere high availability(HA)和vsphere fault tolerance(FT)。

4 物理层的高可用性:如:多网络适配器、SAN等。

vSphere HA 和 Fault Tolerance(FT)功能分别通过提供中断快速恢复和连续可用性来最小化或消除非计划停机时间。

 

使用 vSphere,企业可以轻松提高为所有应用程序提供的基准级别,并且以更低成本和更简单的操作来实现更高级别的可用性。使用vSphere,你可以:

a 独立于硬件、操作系统和应用程序提供更高可用性。

b 减少常见维护操作的计划停机时间。

c 在出现故障时提供自动恢复。

 

一、vSphere HA 提供快速中断恢复

vSphere HA 利用配置为群集的多台 ESXi 主机,为虚拟机中运行的应用程序提供快速中断恢复和具有成本效益的高可用性。

 

vSphere HA 通过以下方式保护应用程序可用性:

1 通过在群集内的其他主机上重新启动虚拟机,防止服务器故障。

2 通过持续监控虚拟机(通过vmware tools实现主机向虚拟机发送检测信号)并在检测到故障时对其进行重新设置,防止应用程序故障。

与其他群集解决方案不同,vSphere HA 提供基础架构并使用该基础架构保护所有工作负载:

a 无需在应用程序或虚拟机内安装特殊软件。所有工作负载均受 vSphere HA 保护。配置 vSphere HA 之后,不需要执行操作即可保护新虚拟机。它们会自动受到保护。(需在开机状态下才受保护)

b 可以将 vSphere HA 与 vSphere Distributed Resource Scheduler (DRS即负载均衡) 结合使用以防止出现故障,以及在群集内的主机之间提供负载平衡。

与传统的故障切换解决方案相比,vSphere HA 具有多个优势:

最小化设置 设置 vSphere HA 群集之后,群集内的所有虚拟机无需额外配置即可获得故障切换支持。
减少了硬件成本和设置 虚拟机可充当应用程序的移动容器,可在主机之间移动。管理员会避免在多台计算机上进行重复配置。使用 vSphere HA 时,必须拥有足够的资源来对要通过 vSphere HA 保护的主机数进行故障切换。但是,vCenter Server 系统会自动管理资源并配置群集。
提高了应用程序的可用性 虚拟机内运行的任何应用程序的可用性变得更高。虚拟机可以从硬件故障中恢复,通过监控和响应 VMwareTools 检测信号并重新启动未响应的虚拟机,可防止客户机操作系统崩溃。
DRS和vMotion 集成 如果主机发生了故障,并且在其他主机上重新启动了虚拟机,则 DRS 会提出迁移建议或迁移虚拟机以平衡资源分配。

vSphere HA 群集允许 ESXi 主机集合作为一个组协同工作,这些主机为虚拟机提供的可用性级别比 ESXi 主机单独提供的级别要高。

群集中的主机均会受到监控,如果发生故障,故障主机上的虚拟机将在备用主机上重新启动。

创建 vSphere HA 群集时,你可以选择使用单个主机作为首选主机(master)以与 vCenter Server 通信并监控其他主机、从属主机(slave)及其虚拟机的状况。

如果为群集启用了 vSphere HA,则所有活动主机(未处于待机或维护模式的主机或未断开连接的主机)都将参与选举以选择群集的首选主机。挂载最多数量的数据存储的主机在选举中具有优势。每个群集只存在一台首选主机,其他所有主机都是从属主机。如果首选主机出现故障、关机或从群集中移除,则会进行新的选举。

 

群集中的首选主机具有很多职责:

1 )监控从属主机的状况。如果从属主机发生故障或无法访问,首选主机将确定需要重新启动的虚拟机。

(监视的ESXi从主机宕机后,首选主机将决定将其身上运行的虚拟己重新运行在其他从主机上)

2 )监控所有受保护虚拟机的电源状况。如果有一台虚拟机出现故障,首选主机可确保重新启动该虚拟机。使用本地放置引擎,首选主机还可确定执行重新启动的位置。

3 )首选主机管理群集主机和受保护的虚拟机列表并对添加或删除cluster内部的主机进行管理即首选主机维护着群集内的清单。

4 )首选主机管理被保护的虚拟机清单,在用户每次发起开关机操作时,更新这个清单。vcenter server会要求保护或不保护某些虚拟机。即当虚拟机打开电源,则该虚拟机要受保护,一旦主机出现故障就会在其他主机上重新启动虚拟机。当虚拟机关闭电源,就没有必要再保护它了。

5 )首选主机缓存cluster的配置,master主机通知和提醒slave主机,cluster配置的修改。

6 )master主机发送心跳信息给slave主机,让slave主机知道master的存在。如果slave主机接收不到心跳信息,则重新选举出新的首选主机。

7 )master报告状态信息给vcenter,vcenter正常情况只与master主机通信。

首选主机执行的功能之一是虚拟机保护。虚拟机受保护时,vSphere HA 可保证在其出现故障后尝试重新打开电源。

首选主机在观察到虚拟机的电源状况由关闭电源变为打开电源时,会致力于保护虚拟

机。如果发生故障切换,首选主机必须重新启动所负责的受保护的虚拟机。该职责已分配给在包含虚拟机配置文件的数据存储上以独占方式锁定系统定义文件的首选主机。

群集中从主机的职责:

1 )slave主机监视本地运行的虚拟机的状态,把这些虚拟机运行状态的显著变化发给master主机。

2 )slave主机监视master主机的健康状态,如果master主机出现故障,slave主机参与master的选举。

3 )slave运用vSphere HA 接入控制vSphere HA特性,这些特性不需要master的协调。这些特性包括VM Health Monitoring。

查看master和slave的状态:

 

主机故障类型和检测:

vSphere HA 群集的首选主机负责检测从属主机的故障。根据检测到的故障类型,在主机上运行的虚拟机可能需要进行故障切换。

在 vSphere HA 群集中,检测三种类型的主机故障:

1 )主机停止运行(即发生故障)。

2 )主机与网络隔离。

3 )主机失去与首选主机的网络连接。

vSphere HA使用管理网络和存储设备来联系。当master通过管理网络联系不到slave时,master就会使用存储网络(heartbeat datastores)来检查slave是否存活。

首选主机监控群集中从属主机是通过交换网络检测信号来完成,此通信通过管理网络来完成。当首选主机不能通过管理网络(如首选主机或从属主机的网络接口出故障)从从属主机接收这些检测信号时,它会在声明该主机出现故障之前检查主机活跃度。首选主机执行的活跃度检查是要确定从属主机是否在与数据存储(即存储网络)交换检测信号。如果此从属主机与数据存储交换检测信号,则首选主机会假定它处于某个网络分区或网络隔离中,因此会继续监控该主机及其虚拟机。

网络分区:一个或多个slave通过管理网络联系不到master,即使它们的网络连接没有问题,这种情况下,vSphere HA能够了使用存储网络来检测分离的主机(上面的slaves)是否存活以及否要保护它们里面的虚拟机。

网络隔离:一个或多个slave丢失了所有的管理网络连接,这样的slave既不能联系到master也不能联系到其他ESXi hosts。这种情况下,slave主机通过存储网络来通知master,它已经是隔离状态。

注意:如果你确保网络基础结构具有足够的冗余度且至少有一个网络路径始终可用,则主机网络隔离应该在极少数情况下才出现。

在 vSphere HA 群集发生管理网络故障时,该群集中的部分主机可能无法通过管理网络与其他主机进行通信。一个群集中可能会出现多个分区。

已分区的群集会导致虚拟机保护和群集管理功能降级

1 )虚拟机保护。vCenter Server 允许虚拟机打开电源,但仅当虚拟机与负责它的首选主机在相同的分区中运行时,才会对其进行保护。

2 )群集管理。vCenter Server 只能与群集中的部分主机进行通信,且只能连接到一台首选主机。因此,只有在解决分区之后,配置中影响 vSphere HA 的更改才能生效。此故障可能会导致其中一个分区在旧配置下操作,而另一个分区使用新的设置

总结:当 vSphere HA 群集中的首选主机无法通过管理网络与从属主机通信时,首选主机将使用数据存储检测信号来确定从属主机是否出现故障,是否位于网络分区中,或者是否与网络隔离。如果从属主机已停止数据存储检测信号,则认为该从属主机出现故障,并且其虚拟机已在别处重新启动。

vCenter Server 使用 vSphere HA 主机状况报告主机是首选主机还是从属主机。如果已启用”HA 状况”列,则会在 vSphere Client 中主机的摘要选项卡上和群集或数据中心的”主机列表”视图中报告此状况。HA 状况”正在运行 (master)”表示主机作为 vSphere HA 首选主机。”已连接 (slave)”状况表示主机作为 vSphere HA从属主机。

注意:如果断开主机与群集之间的连接,则所有向该主机注册的虚拟机均不受 vSphere HA 保护。

vCenter Server 使用接入控制来确保群集内具有足够的资源,以便提供故障切换保护。

1、”群集允许的主机故障数目”接入控制策略:

使用”群集允许的主机故障数目”接入控制策略,vSphere HA 允许指定数目的主机出现故障,同时可以确保群集内留有足够的资源来对这些主机上的虚拟机进行故障切换。

使用”群集允许的主机故障数目”策略,vSphere HA 以下列方式执行接入控制:

1 插槽大小计算:

插槽大小由两个组件(CPU 和内存)组成。

a vSphere HA 计算 CPU 组件的方法是先获取每台已打开电源虚拟机的 CPU 预留,然后再选择最大值。如果没有为虚拟机指定 CPU 预留,则系统会为其分配一个默认值 32 MHz。

b vSphere HA 计算内存组件的方法是先获取每台已打开电源虚拟机的内存预留和内存开销,然后再选择最大值。内存预留没有默认值。

2、使用插槽数目计算当前故障切换容量:

计算出插槽大小后,vSphere HA 会确定每台主机中可用于虚拟机的 CPU 和内存资源。通过使用 vSphere Client 直接连接到主机,然后导航至主机的资源选项卡,可以找到由 vSphere HA 使用的主机资源数据。然后,即可确定每台主机可以支持的最大插槽数目。为确定此数目,请用主机的 CPU 资源数除以插槽大小的CPU 组件,然后将结果化整。对主机的内存资源数进行同样的计算。然后,比较这两个数字,较小的那个数字即为主机可以支持的插槽数。

通过确定可以发生故障并仍然有足够插槽满足所有已打开电源虚拟机要求的主机的数目(从最大值开始)来计算当前故障切换容量。

附录:高级运行时信息

如果选择”群集允许的主机故障数目”接入控制策略,高级运行时信息链接则会在 vSphere Client 中群集摘要选项卡上的 vSphere HA 区域中显示。单击此链接以显示有关群集的下列信息:

a 插槽大小。

b 群集内的插槽总数。

c 已使用的插槽数。分配给已打开电源的虚拟机的插槽数目。如果已使用高级选项定义插槽大小的上限,则此数目可以大于已打开电源的虚拟机的数目。这是因为有些虚拟机会占用多个插槽。

d 可用插槽数。可用于打开群集内其他虚拟机的电源的插槽数量。vSphere HA 保留故障切换所需的插槽数量。剩余的插槽可用于打开新虚拟机电源。

e 故障切换插槽数。除已使用的插槽和可用插槽之外的插槽总数。

f 群集中已打开电源虚拟机的总数。

g 群集中的主机总数。

h 群集中的正常主机总数。处于连接状态、未进入维护模式而且没有 vSphere HA 错误的主机数目。

示例:使用”群集允许的主机故障数目”策略的接入控制

示例中展示了使用此接入控制策略计算和使用插槽大小的方式。对群集进行如下假设:

1 )群集包括三台主机,每台主机上可用的 CPU 和内存资源数各不相同。第一台主机 (H1) 的可用 CPU 资源和可用内存分别为 9 GHz 和 9 GB,第二台主机 (H2) 为 9 GHz 和 6 GB,而第三台主机 (H3) 则为 6 GHz和 6 GB。

2 )群集内存在五个已打开电源的虚拟机,其 CPU 和内存要求各不相同。VM1 所需的 CPU 资源和内存分别为 2 GHz 和 1 GB,VM2 为 2 GHz 和 1 GB,VM3 为 1 GHz 和 2 GB,VM4 为 1 GHz 和 1 GB,VM5 则为 1 GHz 和 1 GB。

3 )”群集允许的主机故障数目”设置为 1。

1 )比较虚拟机的 CPU内存要求,然后选择最大值,从而计算出插槽大小。

最大 CPU 要求(由 VM1 和 VM2 共享)为 2 GHz,而最大内存要求(针对 VM3)为 2 GB。根据上述情况,插槽大小为 2 GHz CPU 和 2 GB 内存。

2 )由此可确定每台主机可以支持的最大插槽数目。

H1 可以支持四个插槽。H2 可以支持三个插槽(取 9GHz/2GHz 和 6GB/2GB 中较小的一个),H3 也可以支持三个插槽。

3 )计算出当前故障切换容量。

最大的主机是 H1,如果它发生故障,群集内还有六个插槽,足够供所有五个已打开电源的虚拟机使用。如果 H1 和 H2 都发生故障,群集内将仅剩下三个插槽,这是不够用的。因此,当前故障切换容量为 1。

群集内可用插槽的数目为 1(H2 和 H3 上的六个插槽减去五个已使用的插槽)。

建议最好不使用”群集允许的主机故障数目”策略的接入控制,因为如果群集内部的主机硬件性能不一时,就不好确定故障数目了。除非群集内部的主机硬件性能一致时可以使用此策略。

 

2、”预留的群集资源的百分比”接入控制策略

可以将 vSphere HA 配置为通过预留特定百分比的群集 CPU 和内存资源来执行接入控制,用于从主机故障中进行恢复。

使用”预留的群集资源的百分比”接入控制策略,vSphere HA 可确保预留 CPU 和内存资源总量的指定百分比以用于故障切换。

使用”预留的群集资源”策略,vSphere HA 可强制执行下列接入控制:

1 )计算群集内所有已打开电源虚拟机的总资源要求。

2 )计算可用于虚拟机的主机资源总数。

3 )计算群集的”当前的 CPU 故障切换容量”和”当前的内存故障切换容量”。

4 )确定”当前的 CPU 故障切换容量”或”当前的内存故障切换容量”是否小于对应的”配置的故障切换容量”(由用户提供)。如果是,则接入控制不允许执行此操作。

注意 “预留的群集资源的百分比”接入控制策略还会检查群集中是否至少有两个已启用 vSphere HA 的主机(不包括正在进入维护模式的主机)。如果只有一个已启用 vSphere HA 的主机,即使可以使用足够的资源百分比,也不允许执行此操作。进行此次额外检查的原因在于如果群集中只有一个主机,则 vSphere HA 无法进行故障切换。

计算当前故障切换容量

已打开电源的虚拟机的总资源要求由两个组件组成,即 CPU 和内存。vSphere HA 将计算这些值。

1 CPU 组件值的计算方法是:加总已打开电源虚拟机的 CPU 预留。如果没有为虚拟机指定 CPU 预留,则系统会为其分配一个默认值 256 MHz。

2 内存组件值的计算方法是:加总每台已打开电源虚拟机的内存预留(以及内存开销)。

计算出主机的 CPU 和内存资源总和,从而得出虚拟机可使用的主机资源总数。

先用主机 CPU 资源总数减去总 CPU 资源要求,然后再用这个结果除以主机 CPU 资源总数,从而计算出”当前的 CPU 故障切换容量”。”当前的内存故障切换容量”的计算方式与之相似。

示例:使用”预留的群集资源的百分比”策略的接入控制

示例中展示了使用此接入控制策略计算和使用”当前故障切换容量”的方式。对群集进行如下假设:

1 )群集包括三台主机,每台主机上可用的 CPU 和内存资源数各不相同。第一台主机 (H1) 的可用 CPU 资源和可用内存分别为 9 GHz 和 9 GB,第二台主机 (H2) 为 9 GHz 和 6 GB,而第三台主机 (H3) 则为 6 GHz和 6 GB。

2 )群集内存在五个已打开电源的虚拟机,其 CPU 和内存要求各不相同。VM1 所需的 CPU 资源和内存分别为 2 GHz 和 1 GB,VM2 为 2 GHz 和 1 GB,VM3 为 1 GHz 和 2 GB,VM4 为 1 GHz 和 1 GB,VM5 则为 1 GHz 和 1 GB。

3 )”配置的故障切换容量”设置为 25%。

已打开电源的虚拟机的总资源要求为 7 GHz CPU 和 6 GB 内存。可用于虚拟机的主机资源总数为 24 GHz CPU和 21 GB 内存。

根据上述情况,”当前的 CPU 故障切换容量”为 70% ((24GHz – 7GHz)/24GHz)。同样,”当前的内存故障切换容量”为 71% ((21GB-6GB)/21GB)。

由于群集的”配置的故障切换容量”设置为 25%,因此仍然可使用 45% 的群集 CPU 资源总数和 46% 的群集内存资源打开其他虚拟机电源。

3、”指定故障切换主机”接入控制策略

在配置 vSphere HA 时可以将特定主机指定为故障切换主机。

如果使用”指定故障切换主机”接入控制策略,则在主机发生故障时,vSphere HA 将尝试在指定的故障切换主机之一上重新启动其虚拟机

注意如果使用”指定故障切换主机”接入控制策略,并指定多个故障切换主机,则 DRS 不会对故障切换主机进行负载平衡

vSphere Client 中群集的摘要选项卡的 vSphere HA 区域内显示了”当前故障切换主机”。每个主机旁边的状态图标可以是绿色、黄色或红色。

1 )绿色。主机处于连接状态、未进入维护模式且没有 vSphere HA 错误。主机上没有任何已打开电源的虚拟机。

2 )黄色。主机处于连接状态、未进入维护模式且没有 vSphere HA 错误。但是,主机上驻留了已打开电源的虚拟机。

3 )红色。主机已断开连接、处于维护模式或存在 vSphere HA 错误。

 

vSphere HA 群集的要求:

在设置 vSphere HA 群集之前,应满足以下要求:

1 )所有主机必须获得 vSphere HA 许可。

2 )群集中至少需要有两台主机。

3 )需要为所有主机配置静态 IP 地址。

4 )所有主机应该至少有一个公共的管理网络,最佳做法则至少需要有两个。

5 )版本 4.0 及更高版本的 ESXi 主机 – 已选中了复选框的 VMkernel 网络。

6 )为了确保任何虚拟机都可以在群集内的任何主机上运行,所有主机都应该可以访问相同的虚拟机网络和数据存储(至少两个)。同样,虚拟机必须位于共享而非本地存储器上,否则在主机出现故障时它们将无法进行故障切换。

注意:vSphere HA 使用数据存储信号检测来区分已分区的主机、已隔离的主机和出现故障的主机。相应地,必须确保为 vSphere HA 预留的数据存储始终立即可用。

7 )为了使虚拟机监控工作,必须安装 VMware Tools。

总结:vSphere HA 群集的要求和Vmotion的要要求类似。

创建 vSphere HA 群集:

可以为群集启用 vSphere HA。启用了 vSphere HA 的群集是 Fault Tolerance 的必备条件。VMware 建议你首先创建空群集。在规划好群集的资源和网络架构之后,可以使用 vSphere Client 将主机添加到群集,并指定群集的 vSphere HA 设置。

步骤

1 )选择”主机和群集”视图。

2 )右键单击清单树中的数据中心,然后单击新建群集。

3 )完成新建群集向导。

此时不要启用 vSphere HA(或 DRS)。

4 )单击完成,关闭向导并创建群集。

此时创建了一个空群集。

5 )根据你的群集资源和网络架构计划,使用 vSphere Client 将主机添加到群集。

6 )右键单击群集,然后单击编辑设置。

在群集的”设置”对话框中,你可以修改群集的 vSphere HA(和其他)设置。

7 )在”群集功能”页上,选择打开 vSphere HA。

8 )根据需要为群集配置 vSphere HA 设置。

a 主机监控状态

b 接入控制

c 虚拟机选项

d 虚拟机监控

e 数据存储检测信号

9 )单击确定关闭群集的”设置”对话框。

 

1、群集功能

新建群集向导中的第一个面板可用于为群集指定基本选项。

在该面板中,可以指定群集名称并选择一个或两个群集功能(都选)

名称指定群集的名称。该名称显示在 vSphere Client 清单面板中。必须指定一个名称,才能继续创建群集。

打开 vSphere HA 如果选中此复选框,则在主机出现故障时,虚拟机将在群集内的其他主机上重新启动。要在群集内的任何虚拟机上启用 vSphere Fault Tolerance,必须打开vSphere HA。

打开 vSphere DRS 如果选中此复选框,则 DRS 将平衡整个群集的虚拟机负载。即使虚拟机受 HA保护,DRS 也会放置并迁移虚拟机。

2、主机监控状态

创建群集后,请启用主机监控以便 vSphere HA 可以监控由群集内每个主机上的 vSphere HA 代理发送的检测信号。

如果选择启用主机监控,则会检查群集内的每台主机以确保其正在运行。如果某台主机出现故障,则会在另一台主机上重新启动虚拟机。主机监控还是 vSphere Fault Tolerance 恢复进程正常运行所必需的。

注意:如果需要执行可能会触发主机隔离响应的网络维护,VMware 建议首先禁用主机监控以挂起 vSphereHA。完成维护后,请重新启用”主机监控”。

3、启用或禁用接入控制

通过新建群集向导,可以为 vSphere HA 群集启用或禁用接入控制,并选择有关其执行方式的策略。可以为 vSphere HA 群集启用或禁用接入控制。

启用:禁止违反可用性限制的打开虚拟机电源操作启用接入控制并执行可用性限制,同时保留故障切换容量。不允许在虚拟机上执行违反可用性限制的任何操作。

禁用:允许违反可用性限制的打开虚拟机电源操作

禁用接入控制。例如,即使打开虚拟机电源会造成故障切换容量不足,仍然可执行该操作。执行该操作时,不会显示任何警告,而且群集不会变为红色。如果群集的故障切换容量不足,vSphere HA 仍可以执行故障切换,并使用”虚拟机重新启动优先级”设置来确定要先打开电源的虚拟机。

如果启用了接入控制,vSphere HA 会提供三个强制接入控制的策略。

1 )群集允许的主机故障数量

2 )作为故障切换空间容量保留的群集资源的百分比

3 )指定故障切换主机

4 )虚拟机选项

默认虚拟机设置控制虚拟机的重新启动顺序(虚拟机重新启动优先级)以及在主机之间失去网络连接时 vSphereHA 的响应方式(主机隔离响应)。

这些设置适用于主机发生故障或主机隔离时群集内的所有虚拟机。此外,也可以为特定虚拟机配置异常。

虚拟机重新启动优先级设置

虚拟机重新启动优先级确定主机发生故障后虚拟机的重新启动相对顺序。这些虚拟机在新主机上按顺序重新启动,首先启动优先级最高的虚拟机,然后是那些低优先级的虚拟机,直到重新启动所有虚拟机或者没有更多的可用群集资源为止。如果主机故障数目超过了接入控制所允许的数目,则系统可能会等到有更多资源可用时再重新启动优先级较低的虚拟机。如果指定了一个故障切换主机,则虚拟机将在该故障切换主机上重新启动。

此设置的值为:已禁用、低、中等(默认)和高。如果选择”已禁用”,则会为虚拟机禁用 vSphere HA,这意味着当其主机出现故障时不会在其他 ESXi 主机上重新启动虚拟机。”已禁用”设置不会对虚拟机监控造成影响,这意味着当正常运行的主机上的某个虚拟机出现故障时,会在同一主机上重置该虚拟机。你可更改各个虚拟机的这种设置。

虚拟机的重新启动优先级设置因用户需求而有所不同。VMware 建议为提供最重要服务的虚拟机分配较高的重新启动优先级。

主机隔离响应设置:

主机隔离响应确定当 vSphere HA 群集内的某个主机失去其管理网络连接但仍继续运行时出现的情况。

主机会执行其隔离响应。响应包括:保持打开电源(默认值)、关闭电源和关机。还可以为各个虚拟机自定义此属性。

要使用”关机”设置,必须在虚拟机的客户机操作系统中安装 VMware Tools。将虚拟机关机的优点在于可以保留其状况。关机操作优于关闭虚拟机电源操作,关闭虚拟机电源不会将最近的更改刷新到磁盘中,也不会提交事务。

5、虚拟机和应用程序监控

如果在设置的时间内没有收到单个虚拟机的 VMware Tools 检测信号,虚拟机监控将重新启动该虚拟机。同样,如果没有收到虚拟机正在运行的应用程序的检测信号,应用程序监控也可以重新启动该虚拟机。可以启用这些功能,并配置 vSphere HA 监控无响应时的敏感度。

                       (选择主机和程序监测)

启用虚拟机监控后,虚拟机监控服务(使用 VMware Tools)将通过检查正在客户机内运行的 VMware Tools进程的常规检测信号和 I/O 活动来评估群集内的每个虚拟机是否正在运行。如果没有收到检测信号或 I/O 活动,则很有可能是客户机操作系统出现故障,或未分配给 VMware Tools 用来完成任务的时间。在这种情况下,虚拟机监控服务会先确定虚拟机已发生故障,然后决定重新引导虚拟机以还原服务。

你可以配置监控敏感度的级别。高敏感度监控可以更快得出已发生故障的结论。然而,如果受监控的虚拟机或应用程序实际上仍在运行,但由于资源限制等因素导致未收到检测信号,高敏感度监控可能会错误地认为此虚拟机发生了故障。低敏感度监控会延长实际故障和虚拟机重置之间服务中断的时间。请选择一个有效折衷满足需求的选项。

 

二、vSphere Fault Tolerance 提供连续可用性

vSphere HA 通过在主机出现故障时重新启动虚拟机来为虚拟机提供基本级别的保护。因此它的缺点就是存在宕机时间,可能是几分钟也可能是十几分钟。

可以为虚拟机启用 vSphere Fault Tolerance,以获得比 vSphere HA 所提供的级别更高的可用性和数据保护,从而确保业务连续性。

vSphere Fault Tolerance 通过创建和维护与主虚拟机相同,且可在发生故障切换时随时替换主虚拟机的辅助虚拟机,来确保虚拟机的连续可用性。(系统会为启用FT功能的虚拟机创建辅助虚拟机。注:ESXi主机资源要充足)

要获取 Fault Tolerance 的最佳结果,应先熟悉其工作原理、如何为群集和虚拟机启用它及其最佳使用方法。

可以为大多数任务关键虚拟机启用 Fault Tolerance。并会创建一个重复虚拟机(称为辅助虚拟机),该虚拟机会以虚拟锁步(vLockstep)方式随主虚拟机一起运行。VMware vLockstep 可捕获主虚拟机上发生的输入和事件,并将这些输入和事件发送到正在另一主机上运行的辅助虚拟机。使用此信息,辅助虚拟机的执行将等同于主虚拟机的执行。因为辅助虚拟机与主虚拟机一起以虚拟锁步方式运行,所以它可以无中断地接管任何点处的执行,从而提供容错保护。

如下图所示:Fault Tolerance 对中的主虚拟机和辅助虚拟机

主虚拟机和辅助虚拟机可持续交换检测信号。此交换使得虚拟机对中的虚拟机能够监控彼此的状态,以确保持续提供 Fault Tolerance 保护。如果运行主虚拟机的主机发生故障,系统将会执行透明故障切换,此时会立即启用辅助虚拟机以替换主虚拟机,并将启动新的辅助虚拟机,同时在几秒钟内重新建立 Fault Tolerance 冗余。如果运行辅助虚拟机的主机发生故障,则该主机也会立即被替换。在任一情况下,用户都不会遭遇服务中断和数据丢失的情况。

主虚拟机及其辅助副本不允许在相同主机上运行。此限制可确保主机故障而导致两个虚拟机都丢失。

 

Fault Tolerance 不支持的 vSphere 功能

容错虚拟机不支持以下 vSphere 功能。

1 )快照。在虚拟机上启用 Fault Tolerance 前,必须移除快照。此外,不可能对已启用 Fault Tolerance的虚拟机执行快照。

2 ) Storage vMotion不能为已启用 Fault Tolerance 的虚拟机调用 Storage vMotion。要迁移存储器,应当先暂时关闭 Fault Tolerance,然后再执行 Storage vMotion 操作。在完成迁移之后,可以重新打开 Fault Tolerance。

3 )链接克隆。不能在为链接克隆的虚拟机上启用 Fault Tolerance,也不能从启用了 Fault Tolerance 的虚拟机创建链接克隆。

4 )虚拟机备份。不能使用 Storage API for Data Protection、VMware Data Recovery 或需要使用虚拟机快照(如 ESXi 所执行的那样)的类似备份产品来备份启用了 FT 的虚拟机。要以这种方式备份容错虚拟机,首先必须禁用 FT,然后在执行备份后重新启用 FT。基于存储阵列的快照不影响 FT。

 

将 Fault Tolerance 功能与 DRS 配合使用:

启用 Enhanced vMotion Compatibility (EVC) 功能时,可以将 vSphere Fault Tolerance 与 vSphere Distributed Resource Scheduler (DRS) 配合使用。此过程不但可使容错虚拟机受益于更好的初始放置位置,还可以将其纳入群集的负载平衡计算中。

当群集启用了 EVC 时,DRS 将为容错虚拟机提出初始放置位置建议、在重新平衡群集负载期间移动这些虚拟机,并允许你为主虚拟机分配 DRS 自动化级别(辅助虚拟机总是采用与其关联的主虚拟机相同的设置。)

在初始放置或负载平衡期间,DRS 放置在主机上的主虚拟机或辅助虚拟机的数目不会超过一个固定的数目。此限制由高级选项 das.maxftvmsperhost 控制。此选项的默认值为 4。但是,如果将此选项设置为 0,DRS 将忽略此限制。

Fault Tolerance要求:

以下是使用 vSphere Fault Tolerance 之前需要了解的群集、主机和虚拟机要求。

Fault Tolerance 的群集要求:

在使用 Fault Tolerance 之前,必须满足以下群集要求。

1)主机证书检查功能已启用。稍后会讲到如何查看。(默认启用—主页—vMotion设置—ssl设置)

2 )至少有两台通过 FT 认证的主机运行相同的 Fault Tolerance 版本号或主机内部版本号(即相同版本的ESXi包括补丁程序)。Fault Tolerance 版本号显示在 vSphere Client 中主机的摘要选项卡上。(至少有两台ESXi主机在运行FT)

3 )ESXi 主机可以访问相同的虚拟机数据存储(SAN、NAS、ISCSI)和网络。请参考后面的讲课资料(相同的共享存储)

4 )配置了 Fault Tolerance 日志记录和 vMotion 网络(DRS负载用)。请参考后面的讲课资料

5 )vSphere HA 群集已创建并启用。请参见 “创建 vSphere HA 群集”。打开要容错虚拟机电源或者将主机添加到已支持容错虚拟机的群集之前,必须启用 vSphere HA。

Fault Tolerance 的主机要求:

在使用 Fault Tolerance 之前,必须满足以下主机要求。

1 )主机上的处理器必须来自与FT兼容的处理器组。此外,强烈建议主机的处理器之间也相互兼容。有关受支持处理器的信息,网址为 http://kb.vmware.com/kb/1008027。

2 )在配置每台主机时,都必须在 BIOS 中启用硬件虚拟化 (HV)。(注:用虚拟机做实验是实现不了这效果的,因为虚拟机的硬件本来就是虚拟出来的,所以bols卡里也不会有这一项)

注意:当主机无法支持 Fault Tolerance 时,可在 vSphere Client 中主机的摘要选项卡上查看原因。单击已配置 FT 的主机字段旁边的蓝色标题图标,查看主机不符合的 Fault Tolerance 要求的列表。

 

Fault Tolerance 的虚拟机要求:

在使用 Fault Tolerance 之前,必须满足以下虚拟机要求。

1 )虚拟机必须存储在虚拟 RDM 或厚置备的虚拟机磁盘 (VMDK) 文件中。如果虚拟机存储在精简置备的 VMDK文件中,则在尝试启用 Fault Tolerance 时将会出现一则指示必须转换 VMDK 文件的消息。要执行该转换,必须关闭虚拟机电源。

2 )虚拟机文件必须存储在共享存储器上。可接受共享的存储解决方案包括光纤通道、(硬件和软件)iSCSI、NFS 和 NAS。

3 )只有带有单个 vCPU 的虚拟机才能与 Fault Tolerance 功能兼容。

 

具体操作步骤如下:

为 Fault Tolerance 准备群集和主机:

要为群集启用Fault Tolerance,必须满足此功能的必备条件,然后在主机上执行特定的配置步骤。完成这些步骤并创建群集后,还可以检查配置是否符合启用 Fault Tolerance 的要求。

为群集启用 Fault Tolerance 之前,应当完成的任务包括:

1 )启用主机证书检查(如果你要从先前版本的 vCenter Server 升级)。

2 )为每台主机配置网络。

3 )创建 vSphere HA 群集,添加主机,并检查合规性。

在为群集和主机准备好 Fault Tolerance 之后,便可为虚拟机打开 Fault Tolerance

1、启用主机证书检查

使用主机证书检查,可以将 ESXi 主机配置为相互验证身份,确保维护一个更安全的环境。对于容错虚拟机所在的 ESXi 主机来说,主机证书检查是必需的。

步骤

1 )将 vSphere Client 连接到 vCenter Server。

2 )选择系统管理,然后选择vCenter Server 设置。此时会出现 vCenter Server 设置窗口。

3 )在左窗格中单击 SSL 设置。

4 )选中 vCenter 需要已验证的主机 SSL 证书框。

5 )单击确定。

2、为主机配置网络

在要添加到 vSphere HA 群集的每台主机上,必须配置两个不同的网络交换机,以便让主机支持Vmotion也能支持 vSphereFault Tolerance。

注:每台ESXi主机上至少要有三块网卡,一块用于与vcenter通信及虚拟机桥接收;另一块用于Vmotion通信用;第三块用于Fault Tolerance 日志记录使用

有关用于Vmotion端口组请参考Vmotion迁移的文档。

前提条件

需要多个千兆位网络接口卡 (NIC)。对于支持 Fault Tolerance 功能的每台主机,最少需要两个物理千兆位网卡。例如,你需要一个网卡专门用于 Fault Tolerance 日志记录,另一个则专门用于 vMotion。VMware 建议具备三个或更多网卡来确保可用性。

注意 vMotion 和 FT 日志记录网卡必须位于不同的子网上,并且 FT 日志记录网卡不支持 IPv6。

创建专门用于 Fault Tolerance 日志记录的端口组:

步骤

1 )将 vSphere Client 连接到 vCenter Server。

2 )在 vCenter Server 清单中,选择主机,然后单击配置选项卡。

3 )选择硬件下的网络,然后单击添加网络链接。此时会出现添加网络向导。

4 )选择连接类型下的 VMkernel,然后单击下一步。

5 )选择创建vsphere标准交换机,然后单击下一步。

6 )提供交换机的标签。

7 )选择将此端口组用于 Fault Tolerance 日志记录,然后单击下一步。

8 )提供 IP 地址和子网掩码,然后单击下一步。

9 )单击完成。

在其他ESXi主机上进行相同的操作完成用于 Fault Tolerance 日志记录的端口组。

要确认是否在主机上成功启用了 vMotion 和 Fault Tolerance,请在 vSphere Client 中查看该主机的摘要选项卡。在”常规”窗格中,vMotion 已启用和已配置 FT 的主机字段均应显示为”是”。

3、创建 vSphere HA 群集和检查合规性

vSphere Fault Tolerance 在 vSphere HA 群集环境中使用。在每台主机上配置网络之后,创建 vSphere HA 群集并向其中添加主机。可以查看群集配置是否正确以及是否符合成功启用 Fault Tolerance 的要求。

步骤

1 )将 vSphere Client 连接到 vCenter Server。

2 )创建群集并向其中添加主机

3 )在 vCenter Server 清单中,选择群集,然后单击配置文件合规情况选项卡。

4 )单击立即检查合规性运行合规性测试。

要查看运行的测试,请单击描述。

合规性测试的结果将显示在屏幕的底部。主机将标记为”合规”或”不合规”。

为虚拟机提供 Fault Tolerance:

在采取了为群集启用 vSphere Fault Tolerance 所需的全部步骤之后,可以为各个虚拟机打开 Fault Tolerance(实验时要关机打开FT功能,生产环境中可以在开机情况下启用FT功能)

功能。

如果符合下列任一情况,则用于打开 Fault Tolerance 的选项将不可用并变成灰色:

1 )虚拟机所驻留的主机并未获得使用该功能的许可证。

2 )虚拟机所驻留的主机处于维护模式或待机模式。

3 )虚拟机已断开连接或被孤立(无法访问其 .vmx 文件)。

4 )用户没有打开此功能的权限。

为虚拟机打开 Fault Tolerance