數據庫的索引: 快速查找數據 更新時會較慢 安行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備份後文件的位置
恢復:
時間點備份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: 定義資源組