mysql 主從複製 、主主複製 大全

 
數據庫的索引: 快速查找數據 更新時會較慢  安行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: 定義資源組
 
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章