数据库的索引: 快速查找数据 更新时会较慢
安行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: 定义资源组