数据库的索引: 快速查找数据 更新时会较慢   安行row存储、显示数据
              存储数据: 行 mysql会自动为行添加源数据(源数据与本身的表无关) 源数据有行id、page id
              mysql表数据存储在文件中
              1、mysql读取数据时按照页面来的
              2、查询数据时要进行一个全表扫描:scanning
              1和2造成效率降低---->索引
              索引会对应表中的数据
              一般对查询语句经常用的字段作索引
       索引类型: BTREE:平衡树索引 逐层的
                 RTREE
                 HASH
                 FULLTEXT:全文索引
       索引的创建:
              格式:create table 表名 index关键字
              alter table 表名字 add index 索引名
              create index 索引名 on 表名(col1,col2)
              CREATE INDEX stu_age_index ON stu(age) USING BTREE
              SHOW CREATE TABLE stu;
              DROP INDEX name ON stu; 删除stu表name的索引
数据库的事务:语句的组合被看做一个整体
              ACID:事务所遵循的原则
                    原子性 atomicity
                     一致性 consistency 数据不一致时会回滚的 以日志为基准
                     隔离性:    事务隔离级别 写入的过程中文件会被锁定
                            MyISAM-->表锁定
                            innodb--> 行锁定
                            读锁:共享的 写锁:独占的
                     持久性:durability 
       事务的创建:myisam不支持事务
                     启动事务 START TRANSACTTION 为提交之前其他用户是看不到的 可回滚自己看到
                     回滚: ROLLBACK
                     提交        COMMIT
                     保存修改内容: SAVEPOINT jing<--保存名
                    
                     指定到回滚到某一点:ROLLBACK TO SAVEPOINT jing 回滚到jing这一点
                     没有明确指定提交事务 隐式会自动提交数据
              事务的隔离级别:
                     read uncommitted 读未提交
                     read committed 读提交
                     repeatable read 重读 mysql默认级别
                     serialable 串行化
                     select @@xt_isolation 查询mysql的事务隔离级别
              变量:   全局变量
                     会话变量
                      变量 :静态 动态:执行过程就可修改的
                     设置: set global variable=值   设置全局变量
               
mysql的开发:
              存储过程        存储函数        触发器            调度事件
              存储例程:存储过程 存储函数 把常用的命令集合起来以方便后续使用   把sql语句模块化
              存储过程: stored procedures
                           \d //                             \d // 改变结束符号为//
                            create procedure name() 创建存储过程      create procedure select()
                                begin                                    begin
                                   statement;可以有多个                select * from stu;
                         end//                                      end//
                            \d ;                                 \d ;
                     调用存储过程 call name()                      call select()
                     删除存储过程 drop procedure select()//
                     存储过程: 支持自定义的变量@ set设置 系统的用@@ 参数的输入
              存储函数:只能返回标量 字符串 值
                     if条件测试
                     调用存储函数 select name()函数名;
                     \d //
                     CREATE FUNCTION day()
                     RETUNRNS VARCHAR(255)
                     BEGIN
                      DECLARE message VARCHAR(255);
                      IF DAYOFWEEK(NOW()) BETWEENT 2 END 6 THEN
                      END IF;
                      RETURE message;
                     END//
                     调用:SECLECT day()//
              触发器:TRIGGER 执行时附加额外的动作  
                     mysql支持的触发器: insert delete update
              调度事件:scheduled events 定时执行的 相当于crontab
              查看:SHOW CREATE PROCEDURE select; 查看存储过程
                     SHOW CREATE FUNCTION select; 查看存储函数
改变表的默认字符集
              ALTER TABLE
GUI 工具:
       SQLyog 远程连接
       phpMyAdmin
       MySQL Query Browser
       MySQL Administrator
       MySQL Workbench
 
mysql认证:1、登陆认证
          2、对象认证:连接进来是否有命令执行的权限
      
 
mysql的主从复制replication:主从mysql服务器的数据同步
 
       一个主服务器可以有多个从服务器,反之不可
       异步的:更新数据时不管从服务器是否在同步数据,只负责本身的数据的更新
       半同步:
       过滤功能
mysql复制类型:
       基于语句的复制:只记录语句改变的
       基于行row的复制:5.1版本后提供,记录改变的结果的
       混合的mixed:由mysql本身自动判断用基于语句的还是基于行的
 
复制过程的线程:
       binlog dump线程:主服务器的
       I/O thread 从服务器的 ,从主服务器的binlog 中读取数据
       SQL thread 从服务器的:有顺序的执行
       主服务器将更新数据的结果保存至二进制日志里
       从服务器将主服务器的二进制日志的内容复制到本机的relay log中
       从服务器从relay log读取数据更新新语句并应用到本机
 
复制的优点:
       备份
       负载均衡
       类似高可用功能
       故障转移的
       测试mysql的升级
主服务器在每个事务在更新数据之前会把改变的数据保存在它的binary log里
 
主从复制配置:
       主服务器:
            vim /etc/my.cnf
              log-bin=master-bin 修改 启用二进制日志
              log-bin-index=master-bin.index 添加 ,索引文件名的定义
              server-id=1 标识服务器的id
             service mysqld restart
             mysql> grant replication slave, replication client on *.* to repl@'192.168.0.%' identified by '123456'
                   flush privileges
            
       从服务器:
            vim /etc/my.cnf
               server-id       = 2
              relay-log = slave-relay-bin
              relay-log-index = slave-relay-bin.index
            service mysqld restart
            mysql> change master to
               > master_host='192.168.0.169',
               > master_port=3306,
               > master_user='repl',
               > master_passwoed='123456',
               > master_log_file='master-bin.000002',
               > master_log_pos=106;
            mysql> start slave
 
 
主从的过滤:
binlog-do-db    变化记录在二进制文件中 可以复制
binlog-ifnore-db 变化不记录在二进制文件中
              一般在从服务器上配置
从服务器上参数:
replicate-do-db 仅复制某些数据库
replicate-ignore-db 不允许复制
replicate-do-table = table复制某些表
replicate-wild-do-table = db.table复制某数据库的某些表
replicate-ignore-table = table
replicate-wild-do-table = db.table
replicate-wild-ignore-table = db.table
       在主服务器上进行配置:一般不建议在主服务器上配置 会导致备份的时间点备份出问题
                     从服务器停掉slave---stop slave
                     vim /etc/my.cnf
                      binlog-do-db = mydb 只允许从服务器复制mydb数据库
                     service mysqld restart
                 测试:从服务器开启start slave
                     在主服务去对mydb修改和其他不允许从复制的数据库上修改
                     在从服务器上只会同步mydb的数据
       在从服务器上配置:
             mysql中 stop slave
              service mysqld stop
              vim /etc/ny.cnf
               [mysqld] 添加   仅复制mydb 、class数据库 其他不复制
                 replicate-do-db = mydb
                 replicate-do-db = class 参数可出现多次      
               service mysqld restart
              测试:show slave status 查看是否启动 I/O SQL线程
                     start slave 若没有开启
                    可在主服务器进行相关修改
 
 
主从的数据加密认证:
              vim /etc/my.cnf
              ssl 添加在[mysqld]中 ,主从都要配置
              service mysqld restart
              show global variables like '%ssl%'; mysql查看为yes
       主服务器做CA证书 分别再给主从发证
              vim /etc/my.cnf
               ssl-ca = /etc/mysql/certs/cacert.pem
               ssl-cert = /etc/mysql/certs/mysqld_cert.pem
               ssl-key = /etc/mysql/certs/mysqld_key.pem
               service mysqld restart
              连接mysql
              show master status\G;
              show global variables like '%ssl%';
              grant user on *.* to repl@'192.168.0.%' require ssl;
              grant replication slave, replication client on *.* to repl@'%.exampel.com' identified by '123456'
              flush privileges;     
              vim /etc/hosts 添加主从主机名
       从服务器:进入mysql
              stop slave
              change master to
              master_host='master.example.com'
              MASTER_USER='repl',
                  MASTER_PASSWORD='123456';      
              master_ssl=1 启用ssl
              master_ssl-ca = /etc/mysql/certs/cacert.pem      
              master_ssl-cert = /etc/mysql/certs/mysqld_cert.pem
              master_ssl-key = /etc/mysql/certs/mysqld_key.pem
              start slave      
 
 
mysql为结构化查询语言
数据库设计的范式:减少数据冗余或尽量消除冗余的小active 规范
设计数据库:normal form 范式 维基百科上
约束:
       主键 :primary key 定义字段主键,不允许重复,唯一性,只能有一个,不能为空
       外键 :foreign key 定义表与表之间的 一个表中的字段在另一表中必须出现--->引用完整性
       唯一键:unique key 表中的某一字段不相同或为空
       检查性:否字段定义范围,目前mysql不支持
       候选键,key
sql语句类型:
       DDL:数据的定义语言
       DML:数据的操作语言
       MCL:数据库控制语言
 
字段类型:INT 整型 1字节 BIGINT 8字节 TINYINT MEDIUMINT UNSIGNED
       FLOAT 浮点型
       BIT
       DOUBLE 单精度
       CHAR (10) 字符型 固定每个字段就是10这么长 0-255
       VARCHAR (10) 灵活性 长度与实际相符
       BLOB 二进制存储数据 使用与长篇 TUNYBLOB
       TEXT MEDIUMTEXT LONGTEXT
       TIME 时间 3字节
       DATE 日期  3字节
       YEAR
       DATETIME 时间日期 TIMESTAMP 占得空间小
              yy-mm-dd hh:mm
       ENUM 65535中组合,SET 最多64组合 枚举类型
       boolean type 布尔类型
 
mysqld 是一个运行在服务端的进程,mysql是一个调用mysqld运行在客户端的命令行工具
 
客户端命令行:mysql >
            创建表:       create table 表名 (字段名 类型)
                     create table books ( id INT,name VARCHAR(255));
                     DESCRIBE books 查看表信息
                     CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ); 保存在依然可以创建 会有警告
                         CREATE TABLE books2 SELECT * from course WHERE id < 100 从另外表中创建 相当于复制 只会复制数据
                     CREATE TABLE books3 LIKE books; 创建books3和books格式一样 数据和属性都一样
       额外的表命令:           
                     COMMENT 显示注释信息
                          CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ) COMMENT 'books info';
                     DELAY_KEY_WRITE 加速
       表数据的插入:     insert into books values('01','xin');
                     insert into books values('01','xin'),('02','jing'); 批量插入
                     insert into books(name) values('long'),('jing') 单独为某一个字段插入数据
                     insert into books2 SELECT * FROM books    查询已有表插入数据
                     insert into books set name='hua'    set插入数据
              查看: select * from books
                     数据可以重复 要数据唯一性可以:
                     ALTER TABLE books ADD UNIQUE KEY (name);books表中name不允许重复
                     REPLACE insert into books(name) values('long') 相当于将内容覆盖重新写 可以实现修改某一个字段
       表数据的修改:     UPDATE books SET name=wei WHERE name=hua
                     UPDATE books SET id=id+1 ORDER BY id LIMIT 3 排序并限定前3行加1
       表数据的删除:     DELETE FROM books WHERE name=hua;删除books表中name为hua的
sql语句的使用:
       表:关系描述
       修改表中已有的字段 :ALTER TABLE 表名 CHANGE 老字段 新字段 字段类型;
                          ALTER TABLE books CHANGE id id INT UNSIGNED;
                          ALTER TABLE books CHANGE id id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT数字自动加;
       新增字段: ALTER TABLE books ADD intime DATETIME NOT NULL DEFAULT '2011-02-11'; 增加入库时间intime
                 ALTER TABLE books ADD pubtime DATETIME NOT NULL AFTER|FIRST name; 新曾一行到固定位置
       删除字段: ALTER TABLE books intime
       删除表:    DROP TABLE books
       清空表:    TRUNCATE TABLE books
       修改表名字:1、 ALTER TABLE books RENAME books2;
                 2、RENAME TABLE books2 TO books;   
       查看表信息: DESC TABLES;
       查看表创建的过程:SHOW CREATE TABLE books
      
       查询:支持正则表达式 逻辑表达式 &&(and) ||(or) 异或
                     SELECT 字段 AS 别名 FROM 表名 select name as BOOKS from books 重命名字段名并查询
                     SELECT DISTINCT startime FROM course;数据重复时只显示一行
              范围内查询:
                     select * from course where id>1 and id<5 
                     select * from course where id between 1 and 4 大于等于1小于等于4
                     select * from course where id in (1,2,4)   id为1 、2、 4 的
              like查询:
                     select * from course where course LIKE 'ha%' 以ha开头的数据
                     select * from course where course LIKE 'Li_rh033'
                     select * from course where
              排序查询:    
                     SELECT DISTINCT startime FROM course ORDEY BY startime 排序相同的显示一条记录
                     SELECT DISTINCT startime FROM course ORDEY BY startime DESC 降序排列
                     SELECT * FROM course GROUP BY startime 以startime分组
                     SELECT startime FROM course GROUP BY startime
                     SELECT startime FROM course GROUP BY startime HAVING COUNT(*)>1; 对分完组再进行限制输出
                                                 HAVING COUNT 要与GROUP BY 连用
                     聚合函数:HAVING COUNT
              函数查询:    
                     SELECT COUNT(*) FROM course 总的数据行数
                     SELECT MAX(id) FROM course id最大的 MIN 最小 AVG 平均
              限制查询:
                     select * from course limit 2 显示前两行数据;
                     select * from course order by id desc limit 2; 后两行
                     select * from course order by id limit 2; 排序限制
                     select * from course order by id limit 2,2; 从第2行开始显示后两行
                    
                    
多表查询:
              表 sru 数据 name     age      sex     course     course 数据 id course     statime
                         sara    20      f                          1    rh033    2011-08-08
                         terra   20      m                           2    rh253 2011-05-08
                         tom     45      m                       4    mysql       2011-08-12
 
 
       交叉 :内连接 外连接 (左外 右外 自连接) UNION连接
          UNION 将表连接起来   排序时要有括弧括起来:
              (select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2);
              (select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2) ORDER BY id
 
              交叉连接:
                     内连接:多个表中由相同的字段建立连接关系
                     select name, course.course from stu, course where stu.course=course.id
                     select s.name, c.course from stu as s,course as c where s.course=c.id; 取别名
                     外连接:左外 join on 多个表
                     SELECT * FROM stu as s left join course as c on s.course=c.id;where age > 20;
                            右外 join on
                     SELECT * FROM stu as s right join course as c on s.course=c.id where s.sex='m';
                            自连接 inner join y 一个表中
                     select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2;
                    select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2 where s1.name <> s2.name;
                    
子查询:多的查询条件 一个查询是针对另一个查询的结果进行的
                     select name,course from stu where sex='m' and course=rh033;
                     select name from stu where course=(select id from course='luoyingfa') 等号后的查询的返回结果要为一个
                     select s1.name from (select * from stu where sex='m') as s1 where s1.course='2' from后用子查询要起别名
        in 使用子查询:
                     select s.name from stu as s where s.course in (select id from course where course like 'L%');
                     select name from stu where course in (select id from course where startdate>'2010-11-01');
                    
mysql日志:
              error log:记录错误信息、 启动停止过程中的日志信息 、 调度事件 、启用主从服务器会记录从服务器的信息
                     启用--log-error没参数会保存至数据目录下host_name.err 即station_example.err
                         --log-error=/var/log/mysql.error
                     mysql_safe --log_warning 1 会在错误日志中记录警告信息
              binary log 二进制日志
                     对数据修改的语句会记录下来 实现pitr point-in-time recovery 将数据库恢复到某个时间点
                     实现数据库复制的
                     默认记录在数据目录下 mysql-bin.index文本日志====mysql-bin.000001 二进制格式
                                   ls /data/
                     查看二进制日志 show binary logs;显示所有的
                     二进制日志类型: 全局变量 binlog_format
                     启用时添加 --log-bin = /data/log/binary/changelog
                            --log-bin-index = /data/log/
                     查看二进制文件内容
                            # mysqlbinlog /data/mysql-bin.000001
                             mysqlbinlog /data/mysql-bin.000001 --start-datetime="2011-03-21 12:24:30"
                                   --end-datetime="2011-03-21 14:24:30"
                     mysql中查看日志
                            show binlog envents; 显示第一个二进制日志文件
                            show binlog envents in 'mysql-bin.000001';
                            show binlog envents in 'mysql-bin.000001' from 525 limit 3; 从pos:525开始的前三行
              general query log:一般日志文件 默认没开启
                     启用--general_log=
                          --general_log_file 指定一般日志文件位置
                         --slow_query_log 慢查询日志
                         --slow_query_log_log
                         --log_output 慢日志记录的格式 none 不记录 file记录在文件 table 记录在表中 默认为file
                     查看一般日志文件是否开启:
                     select @@general_log;
                     select @@general_log_log;
                    
              slow query log 慢速日志查询日志
mysql的日志滚动:日志过大做出的策略
              # mysqladmin refresh
              flush logs       手动滚动二进制和错误日志 mysql中
                            可以将其脚本放到特定的目录crontab中
              purge binary logs 修剪二进制日志 删除指定位置以前的所有日志
                     purge binary logs to 'mysql-bin.000005' 修剪000005之前的日志
                     purge binary logs before '2011-3-5 23:00:00';
检索修复表:
              myisamchk --extend-check 文件名 扩展检查修复
                        --recover stu2.MYI
                    myisamchk --extend-check /data/mydb/stu2.MYI
              mysql中执行:
              check table stu2 检查表
              repair table sru2 修复表
              analyze table stu2 分析表
              optimize table stu2 又换表
 
mysql的备份和恢复:
              数据库的损坏:电源 人为 硬件 网络失败
              备份:   完全full 增量incremental 差异differential 
                     冷备cold 温备warm 热备hot
                     逻辑备份logical 物理备份physical
              一致性备份 :consistent文件的修改时间在备份之前 可用来做恢复的
              非一致性备份: inconsistent
                     名字               支持引擎    类型          备份速度   恢复速度
              工具:     mysqldump        all引擎   温备:只读不写的         慢-----逻辑备份
                     mysqldump        innodb   热备:可读可写          
                        ibbackup 商业的 innodb     hot            速度快     快 ---物理备份 免费的xtraDB引擎与innodb完全兼容
                     mk-parallel-backup all引擎   温备        中速        中速
                     filesystem         all     冷备          最快      最快   
                     snapshot      all      hot                    
                     mysqlhotcopy         mylsam   接近冷备                ---不是热备技术
                     BACKUP              all      热备               
              mysqldump -uroot -p mydb > /root/mysql-`date +%F`.sql 备份mydb数据库
              mysqldump -uroot -p --databases mydb class > /root/mysql.sql 备份mydb和class数据库
              mysqldump -uroot -p --all-databases > /root/mysql.sql 备份所有
              恢复前一般先创建好改数据库
              mysqldump -uroot -p mydb < /root/mysql.sql 恢复 或
                     source /root/mysql.sql mysql中执行
              mysqldump参数:
              mysqldump --flush-logs 备份前先日志滚动一下 达到同步状态
                     --lock-tables 备份前将表锁定一下 防止其他用户写
                     --lock-all-tables 锁定所有的表
                     --single-transaction 备份innodb数据库引擎时 可以备份一致性的innodb即使有事务没完成
                     --all-databases 备份所有数据库
                     --databases 备份多个不是所有数据库 中间用空格隔开
                     --master-data=n 数字 记录二进制文件名和位置
                     --events 备份事件
                     --triggers 备份触发器
                     --routines 备份存储过程和存储函数的
                     --where "" 指定过滤条件,只备份某些数据
                     mysqldump -uroot -p --flush-logs --lock-all-tables --events --routines --triggers mydb >                                    /root/mysql-`date +"%F"`.sql 
              selectinfoutfile 可以备份具体的表或数据,逻辑备份
                     select * into outfile '/tmp/stu.sql' from stu 备份具体表 要有file权限一般用在表数据不小心删除
                                   truncate table stu 删除表stu的数据
                     恢复表 先创建号该表的表结构
                     mysqldump -uroot -p mydb course >/root/course.sql 备份mydb数据库的course表
                     use mydb
                     load data infile '/tmp/stu.sql' into table stu 
              备份mk-parallel-backup
                     mk-parallel-backup --basedir=/bachup
              恢复:
                     mk-parallel-restore /backup
                     http://www.maatkit.org 网站下载该rpm包进行安装
      
              snapshot 快照备份 备份的整个数据库
                  技术:    
                     ZFS: 文件系统
                     LVM :数据要在同一个LVM分区上
                     lvcreate -L 1G -n sqlsnap -s /dev/vg0
                     恢复 :停掉mysql服务
                            将快照的数据覆盖到mysql的数据目录下
 
              mysqlhotcopy 备份前要锁数据库 备份MyISAM 的物理热备
              LOCK TABLES stu READ; 锁表 将所有的表都锁上
              UNLOCK TABLE stu 表解锁 或UNLOCK TABLES
              备份:mysqlhotcopy
              mysqlhotcopy mydb /backup备份后文件的位置
              mysqlhotcopy --method=scp mydb [email protected]:/backup 备份到其他主机上
              恢复:
             
             
      
时间点备份PITR:       mysql
             
              mysqlbinlog --start-position 15465完全备份后的位置--stop-opsition 202010删除之前的位置 | mysql -uroot -p
              mysqlbinlog --start- 15465 --end-position 202010 > /tmp/bin.sql
       恢复:
              mysql -uroot -p < /tmp/bin.sql     
 
案例: 做完全备份
       做操作 创建新表  
 
 
 
www.sourceforge.org
www.rpmfind.net rpm包
www.cpan.org 模块          
模块的编译安装:
              perl Makefile.PL
              make
              make install
maatkit   
 
 
高可用集群:实现服务的持续性达到99.999% 备份 防止单点故障
       实现高可用需要的条件资源:
              探测对方服务器工作是否正常即心跳信息
              定义资源 服务 htpd------>资源管理器
              监控某个资源或服务的工作状况
       工作的三个层次:
                     Infrastructure:基础设施 :测心跳
                     Recourse Allocation
                            资源管理器 cluster resource manager :CRM
                                       CIB:cluster information base: xml文件定义资源信息
                                   LRM:本地资源的工作状况
                     Recourse
                            资源代理resource agent :脚本
       三个层次软件:
              底层的:heartbeat keeplived    ultramokey openais/corosync
                     RHCS: redhat提供的基于openais/corosync 提供多大100个节点
              二层的资源管理的:
                     RHCS开发的CRM
                     heartbeat开发的pacemaker
              三层的提供的方法:
                     heartbeat v1
                     脚本实现/etc/init.d/httpd
                     CIF 集群信息格式 pacemaker使用的
                    
      
       模型:
              1、active/passive或primary/standby 主从状态的
                     主处于工作状态
                     从处于闲置状态 可以使用性能不是很好的主机
              主从服务器使用同一个地址 流动的
              共享一个文件系统即共享存储来放置web数据
              主从服务器避免资源争用,可使用stonith设备来解决:电源交换机、FC光纤交换机、ssh 、手动manual
              2、active/active
               都处于工作状态 提供的主要服务类型不同 互为主从的 web/p smtp/s 和 smtp/p web/s
                     需要两个共享存储 写同一个文件时会出现问题 需要集群文件系统解决
                     集群文件系统:保证节点数据的同步   数据加锁在修改节点可以同时看到,只会用在高可用集群中
                        软件 ocfs2 , gfs2
               多个节点提供高可用集群 ,每个节点提供不同的服务, 提供故障转移域:转移范围 默认只有一个节点提供服务
                     故障转移域原则: 节点故障达到半数以上时,正常的节点也不再提供服务 该高可用集群就不能使用--->
                                   quorum 法定代表票数 防止brain-split 总的票数是定义好的 并不是一个节点只有
                                   一票 根据性能定义
                                   各节点停止心跳信息使用多播
      
解决集群director采用数据库的形式数据库不同步的问题
              drbd :基于块设备 主机之间保持数据的一致性
              rsync :基于文件的 实现数据的一致性
             
             
heartbeat v2版本 只能提供2个节点的集群
       资源代理类型:
              heartbeat v1
              LSB
              OCF
       基础架构层 探测心跳方式:节点强认证
                     udp 广播 udp多播 udp的组播 串行链路的
                 线缆:串行线缆   以太网线缆(交叉线   交换机中继)
                 主从通信方式:单播 组播 广播
       认证方式: md5 sha1
       主配置文件: /etc/ha.d/ha.cf
       资源管理器文件:/etc/ha.d/haresource
       认证文件:/etc/hs.d/authkeys
       配置:HA-web集群
 
主从服务配置相同
 vip:192.168.0.186
primary:
       eht0 :ip 192.168.0.187
       eth1 :ip 192.168.10.6 测心跳的
standby:
       eth0 : ip 192.168.0.188
       eth1: ip 192.168.10.7 测心跳的
      
主从节点的date保持同步 hwclock -s 与硬件同步
节点之间hostname与uname -n 一致 配置主机名
配置主机名解析/etc/hosts 将两台eth0的ip都添加进去
主机名解析 /etc/hosts 添加主从节点的主机名
1、安装软件: heartbeat    heartbeat-pils   heartbeat-stonith   libnet   perl
       yum --nogpgcheck localinstall ipvsadm heartbeat...
2、写LVS的脚本   执行权限
              脚本复制到/etc/ha.d/resource.d/
3、复制/usr/share/doc/heartbeat-2.1.4/ha.cf authkeys haresources    到/etc/ha.d/
   ha.cf
       logfacility     local0
       keepalive 2
       deadtime 30
       warntime 10
       udpport 694
       bcast  eth1
       node   primary.example.com
       node   standy.example.com
 4、 chmod 600 authkeys
       vim /etc/ha.d/authkeys 添加
          auth 1
          1 sha1 验证码
       dd if=/dev/urandom bs=512 count=1 | openssl md5 生成验证码
5、 定义资源
       vim /etc/ha.d/haresources   添加
           primary.example.com 192.168.0.186/24/eth0/192.168.0.255 httpd脚本与web服务脚本保持一致
在主节点上安装web服务httpd 不启动
              yum install httpd
              chkconfig httpd off
              cp /etc/init.d/httpd    /etc/ha.d/resource.d/
              测试web服务是否正常,正常后关闭httpd服务
 
6、开启主从服务heartbeat
ifconfig 会自动生成eth0:0 192.168.0.186 浮动ip
 
测试:http://192.168.0.186
主从的切换 cd /usr/lib/heartbeat
            .hb_standby 切换为从服务
             .hb_takeover 将资源要回来
      
 
HA+LVS结合的高可用集群:节点间的配置相同
              0网段向外提供服务 10网段提供心跳信息
              node1 eth0 :192.168.0.187 eth1:192.168.10.9
              node2 eth0: 192.168.0.188 eth1:192.168.10.10
       主机名 node1 node2 uname -n 保持一致 node1.a.com node2.a.com
       vip流动地址 真正向外提供服务192.168.0.183
       编辑/etc/hosts 将4个ip添加进去 要能通信
       1、安装heartbeat的5的软件 yum localinstall --nogpgcheck heartbeat ...
       2、写director脚本以让director能向realserver传递80请求的服务
              yum install ipvsadm
              vim ipvsd 将脚本的vip指向192.168.0.183
              chmod a+x ipvsd
              cp ipvsd /etc/ha.d/resource.d/
              cd /etc/ha.d/resource.d/
              测试脚本是否可用./ipvsd start
                            ipvsadm -Ln 查看应有脚本中定义的规则
                            ./ipvsd stop
       3、复制三个配置文件
              cp /usr/share/doc/heartbeat-2.1.4/ha.cf authkeys haresources /etc/ha.d/
              vim /etc/ha.d/ha.cf
                  bcast eth1
                  node   node1.a.com
                  node   node2.a.com
              vim /etc/ha.d/authkeys
                 auth 1
              1 sha1 验证码
               dd if=/dev/urandom bs=512 count=1 | openssl md5 生成验证码
              chmod 600 authkeys
              vim /etc/ha.d/haresources
               node1.a.com ipvsd
       4、将三个文件和脚本ipvsd拷贝到node2的相应目录上192.168.0.188
       5、启动双方节点的heartbeat
              service heartbeat start
       测试:主从的切换
              cd /usr/lib/heartbeat
                    .hb_standby 切换为从服务
                  .hb_takeover 将资源要回来
 
 
高可用集群:RHCS
RHCS的集群套件                                                       
       集群基础套件: coresync/openais,CCS(集群配置服务) 同步节点数据 ,CMAN/DLM , Fencing
       HA Service Mangement : rgmanager
       共享存储 :GFS and CLVM
       集群超级工具: iSCSI
       fence设备相当于stonith设备,在RHCS里叫做fence
 
RHCS的两个节点的集群是比较特殊的,quorum将失去意义 要靠quorum disk实现
       quorum disk:探测对方是否在一个共享存储上写数据来判断是否正常 解决资源争用
 
ccs_tool:集群配置系统工具,实现节点配置文件数据的同步
cman_tool :集群管理器
clustat:
clvmd:用在集群中的逻辑卷
clusvcadm:
rgmanager: 定义资源组