mysql,redis

1、搭建mysql服務(wù)器,并實(shí)現(xiàn)主主復(fù)制、半同步復(fù)制

存儲(chǔ)引擎:

表類型:也稱為“表類型”,表級(jí)別概念,不建議在同一個(gè)庫中的表上使用不同的ENGINE;

CREATE TABLE ... ENGINE[=]STORAGE_ENGINE_NAME ...

SHOW TABLE STATUS

常見的存儲(chǔ)引擎:

MyISAM, Aria, InnoDB, MRG_MYISAM, CSV, BLACKHOLE, MEMORY, PERFORMANCE_SCHEMA, ARCHIVE, FEDERATED

InnoDB:InnoBase

Percona-XtraDB, Supports transactions, row-level locking, and foreign keys

數(shù)據(jù)存儲(chǔ)于“表空間(table space)"中:

(1) 所有數(shù)據(jù)庫中的所有類型為InnoDB的表的數(shù)據(jù)和索引存儲(chǔ)于同一個(gè)表空間中;

表空間文件:datadir定義的目錄中

文件:ibdata1, ibdata2, ...

(2) innodb_file_per_table=ON,意味著每表使用單獨(dú)的表空間文件;

每表的數(shù)據(jù)文件(數(shù)據(jù)和索引,存儲(chǔ)于數(shù)據(jù)庫目錄)存儲(chǔ)于自己專用的表空間文件中,并存儲(chǔ)于數(shù)據(jù)庫目錄下: tbl_name.ibd

表結(jié)構(gòu)的定義:在數(shù)據(jù)庫目錄,tbl_name.frm

事務(wù)型存儲(chǔ)引擎,適合對(duì)事務(wù)要求較高的場景中;但較適用于處理大量短期事務(wù);

基于MVCC(Mutli Version Concurrency Control)支持高并發(fā);支持四個(gè)隔離級(jí)別,默認(rèn)級(jí)別為REPEATABLE-READ;間隙鎖以防止幻讀;

使用聚集索引(主鍵索引);

支持”自適應(yīng)Hash索引“;

鎖粒度:行級(jí)鎖;間隙鎖;

總結(jié):

數(shù)據(jù)存儲(chǔ):表空間;

并發(fā):MVCC,間隙鎖,行級(jí)鎖;

索引:聚集索引、輔助索引;

性能:預(yù)讀操作、內(nèi)存數(shù)據(jù)緩沖、內(nèi)存索引緩存、自適應(yīng)Hash索引、插入操作緩存區(qū);

備份:支持熱備;

MyISAM:

支持全文索引(FULLTEXT index)、壓縮、空間函數(shù)(GIS);

不支持事務(wù)

鎖粒度:表級(jí)鎖

崩潰無法保證表安全恢復(fù)

適用場景:只讀或讀多寫少的場景、較小的表(以保證崩潰后恢復(fù)的時(shí)間較短);

文件:每個(gè)表有三個(gè)文件,存儲(chǔ)于數(shù)據(jù)庫目錄中

tbl_name.frm:表格式定義;

tbl_name.MYD:數(shù)據(jù)文件;

tbl_name.MYI:索引文件;

特性:

加鎖和并發(fā):表級(jí)鎖;

修復(fù):手動(dòng)或自動(dòng)修復(fù)、但可能會(huì)丟失數(shù)據(jù);

索引:非聚集索引;

延遲索引更新;

表壓縮;

行格式:

{DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

其它的存儲(chǔ)引擎:

CSV:將CSV文件(以逗號(hào)分隔字段的文本文件)作為MySQL表文件;

MRG_MYISAM:將多個(gè)MyISAM表合并成的虛擬表;

BLACKHOLE:類似于/dev/null,不真正存儲(chǔ)數(shù)據(jù);

MEMORY:內(nèi)存存儲(chǔ)引擎,支持hash索引,表級(jí)鎖,常用于臨時(shí)表;

FEDERATED: 用于訪問其它遠(yuǎn)程MySQL服務(wù)器上表的存儲(chǔ)引擎接口;

MariaDB額外支持很多種存儲(chǔ)引擎:

OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE、...

搜索引擎:

lucene, sphinx

lucene:Solr, ElasticSearch


并發(fā)控制:

鎖:Lock

鎖類型 :

讀鎖:共享鎖,可被多個(gè)讀操作共享;

寫鎖:排它鎖,獨(dú)占鎖;

鎖粒度:

表鎖:在表級(jí)別施加鎖,并發(fā)性較低;

行鎖:在行級(jí)別施加鎖,并發(fā)性較高;維持鎖狀態(tài)的成本較大;

鎖策略:在鎖粒度及數(shù)據(jù)安全性之間尋求一種平衡機(jī)制;

存儲(chǔ)引擎:級(jí)別以及何時(shí)施加或釋放鎖由存儲(chǔ)引擎自行決定;

MySQL Server:表級(jí)別,可自行決定,也允許顯式請(qǐng)求;

鎖類別:

顯式鎖:用戶手動(dòng)請(qǐng)求的鎖;

隱式鎖:存儲(chǔ)引擎自行根據(jù)需要施加的鎖;

顯式鎖的使用:

(1) LOCK TABLES

LOCK TABLES? tbl_name? read|write, tbl_name read|write, ...

UNLOCK TABLES

(2) FLUSH TABLES

FLUSH TABLES tbl_name,... [WITH READ LOCK];

UNLOCK TABLES;

(3) SELECT cluase

[FOR UPDATE | LOCK IN SHARE MODE]


show processlist; #查看線程列表


手動(dòng)控制事務(wù):

啟動(dòng):START TRANSACTION

提交:COMMIT

回滾:ROLLBACK

事務(wù)支持savepoints:

SAVEPOINT identifier

ROLLBACK [WORK] TO [SAVEPOINT] identifier

RELEASE SAVEPOINT identifier

事務(wù)隔離級(jí)別:

READ-UNCOMMITTED:讀未提交 --> 臟讀;

READ-COMMITTED:讀提交--> 不可重復(fù)讀;

REPEATABLE-READ:可重復(fù)讀 --> 幻讀;

SERIALIZABLE:串行化;

mysql> SELECT @@session.tx_isolation;

+----------------------------------+

| @@session.tx_isolation |

+----------------------------------+

| REPEATABLE-READ? ? ? ? |

+----------------------------------+

查看InnoDB存儲(chǔ)引擎的狀態(tài)信息:

SHOW ENGINE innodb STATUS;


日志:

查詢?nèi)罩荆篻eneral_log

慢查詢?nèi)罩荆簂og_slow_queries

錯(cuò)誤日志:log_error, log_warnings

二進(jìn)制日志:binlog

中繼日志:relay_log

事務(wù)日志:innodb_log

1、查詢?nèi)罩?/p>

記錄查詢語句,日志存儲(chǔ)位置:

文件:file

表:table (mysql.general_log)

general_log={ON|OFF}

general_log_file=HOSTNAME.log

log_output={FILE|TABLE|NONE}

2、慢查詢?nèi)罩?/p>

慢查詢:運(yùn)行時(shí)間超出指定時(shí)長的查詢;

long_query_time

存儲(chǔ)位置:

文件:FILE

表:TABLE,mysql.slog_log

log_slow_queries={ON|OFF}

slow_query_log={ON|OFF}

slow_query_log_file=

log_output={FILE|TABLE|NONE}

log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk

log_slow_rate_limit

log_slow_verbosity

3、錯(cuò)誤日志

記錄信息:

(1) mysqld啟動(dòng)和關(guān)閉過程 輸出的信息;

(2) mysqld運(yùn)行中產(chǎn)生的錯(cuò)誤信息;

(3) event scheduler運(yùn)行時(shí)產(chǎn)生的信息;

(4) 主從復(fù)制架構(gòu)中,從服務(wù)器復(fù)制線程啟動(dòng)時(shí)產(chǎn)生的日志;

log_error=

/var/log/mariadb/mariadb.log|OFF

log_warnings={ON|OFF}

4、二進(jìn)制日志

用于記錄引起數(shù)據(jù)改變或存在引起數(shù)據(jù)改變的潛在可能性的語句(STATEMENT)或改變后的結(jié)果(ROW),也可能是二者混合;

功用:“重放”

binlog_format={STATEMENT|ROW|MIXED}

STATEMENT:語句;

ROW:行;

MIXED:混編;

查看二進(jìn)制日志文件列表:

SHOW MASTER|BINARY LOGS;

查看當(dāng)前正在使用的二進(jìn)制日志文件:

SHOW MASTER STATUS;

查看二進(jìn)制 日志文件中的事件:

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

服務(wù)器變量:

log_bin=/PATH/TO/BIN_LOG_FILE

只讀變量;

session.sql_log_bin={ON|OFF}

控制某會(huì)話中的“寫”操作語句是否會(huì)被記錄于日志文件中;

max_binlog_size=1073741824

sync_binlog={1|0}

mysqlbinlog:

YYYY-MM-DD hh:mm:ss

--start-datetime=

--stop-datetime=

-j, --start-position=#

? --stop-position=#


? --user, --host, --password

二進(jìn)制日志事件格式:

# at 553

#160831? 9:56:08 server id 1? end_log_pos 624? Query? thread_id=2? ? exec_time=0? ? error_code=0

SET TIMESTAMP=1472608568/*!*/;

BEGIN

/*!*/;

事件的起始位置:# at 553

事件發(fā)生的日期時(shí)間:#160831? 9:56:08

事件發(fā)生的服務(wù)器id:server id 1

事件的結(jié)束位置:end_log_pos 624

事件的類型:Query

事件發(fā)生時(shí)所在服務(wù)器執(zhí)行此事件的線程的ID: thread_id=2

語句的時(shí)間戳與將其寫入二進(jìn)制日志文件中的時(shí)間差:exec_time=0

錯(cuò)誤代碼:error_code=0

事件內(nèi)容:SET TIMESTAMP=1472608568/*!*/;

中繼日志:

從服務(wù)器上記錄下來從主服務(wù)器的二進(jìn)制日志文件同步過來的事件;

事務(wù)日志:

事務(wù)型存儲(chǔ)引擎innodb用于保證事務(wù)特性的日志文件:

redo log

undo log

主/從架構(gòu):

異步復(fù)制:

半同步復(fù)制:

一主多從;

一從一主;

級(jí)聯(lián)復(fù)制;

循環(huán)復(fù)制;

雙主復(fù)制;

一從多主:

每個(gè)主服務(wù)器提供不同的數(shù)據(jù)庫;

配置:

時(shí)間同步;

復(fù)制的開始位置:

從0開始;

從備份中恢復(fù)到從節(jié)點(diǎn)后啟動(dòng)的復(fù)制,復(fù)制的起始點(diǎn)備份操作時(shí)主節(jié)點(diǎn)所處的日志文件及其事件位置;

主從服務(wù)器mysqld程序版本不一致?

從的版本號(hào)高于主的版本號(hào);

主服務(wù)器:

配置文件my.cnf

server_id=#

log_bin=log-bin

啟動(dòng)服務(wù):

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'USERNAME'@'HOST' IDENTIFIED BY 'YOUR_PASSWORD';

mysql> FLUSH PRIVILEGES;

從服務(wù)器:

配置文件my.cnf

server_id=#

relay_log=relay-log

read_only=ON

啟動(dòng)服務(wù):

mysql> CHANGE MASTER TO MASTER_HOST='HOST',MASTER_USER='USERNAME',MASTER_PASSWORD='YOUR_PASSWORD',MASTER_LOG_FILE='BINLOG',MASTER_LOG_POS=#;

mysql> START SLAVE [IO_THREAD|SQL_THREAD];

mysql> SHOW SLAVE STATUS;

課外作業(yè):基于SSL的復(fù)制的實(shí)現(xiàn);

主主復(fù)制:

互為主從:兩個(gè)節(jié)點(diǎn)各自都要開啟binlog和relay log;

1、數(shù)據(jù)不一致;

2、自動(dòng)增長id;

定義一個(gè)節(jié)點(diǎn)使用奇數(shù)id

auto_increment_offset=1

auto_increment_increment=2

另一個(gè)節(jié)點(diǎn)使用偶數(shù)id

auto_increment_offset=2

auto_increment_increment=2

配置:

1、server_id必須要使用不同值;

2、均啟用binlog和relay log;

3、存在自動(dòng)增長id的表,為了使得id不相沖突,需要定義其自動(dòng)增長方式;

服務(wù)啟動(dòng)后執(zhí)行如下兩步:

4、都授權(quán)有復(fù)制權(quán)限的用戶賬號(hào);

5、各把對(duì)方指定為主節(jié)點(diǎn);

復(fù)制時(shí)應(yīng)該注意的問題:

1、從服務(wù)設(shè)定為“只讀”;

在從服務(wù)器啟動(dòng)read_only,但僅對(duì)非SUPER權(quán)限的用戶有效;

阻止所有用戶:

mysql> FLUSH TABLES WITH READ LOCK;

2、盡量確保復(fù)制時(shí)的事務(wù)安全

在master節(jié)點(diǎn)啟用參數(shù):

sync_binlog = ON

如果用到的是InnoDB存儲(chǔ)引擎:

innodb_flush_logs_at_trx_commit=ON

innodb_support_xa=ON

3、從服務(wù)器意外中止時(shí)盡量避免自動(dòng)啟動(dòng)復(fù)制線程

4、從節(jié)點(diǎn):設(shè)置參數(shù)

sync_master_info=ON

sync_relay_log_info=ON

半同步復(fù)制

支持多種插件:/usr/lib64/mysql/plugins/

需要安裝方可使用:

mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name';

半同步復(fù)制:

semisync_master.so

semisync_slave.so

主節(jié)點(diǎn):

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

+------------------------------------+-------+

| Variable_name? ? ? ? ? ? ? ? ? ? ? | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled? ? ? | OFF? |

| rpl_semi_sync_master_timeout? ? ? | 10000 |

| rpl_semi_sync_master_trace_level? | 32? ? |

| rpl_semi_sync_master_wait_no_slave | ON? ? |

+------------------------------------+-------+

MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;

從節(jié)點(diǎn):

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';? ? ? ? ? ? ? ? ? ? ? ?

+---------------------------------+-------+

| Variable_name? ? ? ? ? ? ? ? ? | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled? ? | OFF? |

| rpl_semi_sync_slave_trace_level | 32? ? |

+---------------------------------+-------+

MariaDB [mydb]> STOP SLAVE IO_THREAD;

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [mydb]> START SLAVE IO_THREAD;

判斷方法:

主節(jié)點(diǎn):

MariaDB [mydb]> SELECT @@global.rpl_semi_sync_master_clients;

復(fù)制過濾器:

僅復(fù)制有限一個(gè)或幾個(gè)數(shù)據(jù)庫相關(guān)的數(shù)據(jù),而非所有;由復(fù)制過濾器進(jìn)行;

有兩種實(shí)現(xiàn)思路:

(1) 主服務(wù)器

主服務(wù)器僅向二進(jìn)制日志中記錄有關(guān)特定數(shù)據(jù)庫相關(guān)的寫操作;

問題:其它庫的time-point recovery將無從實(shí)現(xiàn);

binlog_do_db=

binlog_ignore_db=

(2) 從服務(wù)器

從服務(wù)器的SQL THREAD僅重放關(guān)注的數(shù)據(jù)庫或表相關(guān)的事件,并將其應(yīng)用于本地;

問題:網(wǎng)絡(luò)IO和磁盤IO;

Replicate_Do_DB=

Replicate_Ignore_DB=

Replicate_Do_Table=

Replicate_Ignore_Table=

Replicate_Wild_Do_Table=

Replicate_Wild_Ignore_Table=


主從架構(gòu)

修改配置文件。

加入server-id。開啟二進(jìn)制日志


將二進(jìn)制日志目錄所有者更改為mysql

從節(jié)點(diǎn)修改配置文件,啟用中繼日志,將會(huì)把主節(jié)點(diǎn)二進(jìn)制日志復(fù)制過來

mkdir /data/mysql

[root@centos7 ~]# chown -R mysql.mysql /data/mysql/


MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.%' identified by '123456'; #主節(jié)點(diǎn)創(chuàng)建復(fù)制賬號(hào)賦予復(fù)制權(quán)限

skip_name_resolve=ON #避免mysql將ip地址解析為主機(jī)名,這里可以跳過解析,在配置文件中加入此行


change master to master_host='192.168.1.196',master_port=3306,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=245;

在從節(jié)點(diǎn)配置連接信息。

master_host='192.168.1.196'#主節(jié)點(diǎn)主機(jī)。master_log_file='mysql-bin.000001'#指定從哪個(gè)二進(jìn)制文件開始復(fù)制,master_log_pos=245;#從二進(jìn)制文件中的哪個(gè)位置復(fù)制

start slave;備用節(jié)點(diǎn)開啟復(fù)制

查看同步狀態(tài)




主主復(fù)制:

互為主從:兩個(gè)節(jié)點(diǎn)各自都要開啟binlog和relay log;

1、數(shù)據(jù)不一致;

2、自動(dòng)增長id;

定義一個(gè)節(jié)點(diǎn)使用奇數(shù)id

auto_increment_offset=1

auto_increment_increment=2

另一個(gè)節(jié)點(diǎn)使用偶數(shù)id

auto_increment_offset=2

auto_increment_increment=2

配置:

1、server_id必須要使用不同值;

2、均啟用binlog和relay log;

3、存在自動(dòng)增長id的表,為了使得id不相沖突,需要定義其自動(dòng)增長方式;

服務(wù)啟動(dòng)后執(zhí)行如下兩步:

4、都授權(quán)有復(fù)制權(quán)限的用戶賬號(hào);

5、各把對(duì)方指定為主節(jié)點(diǎn);

復(fù)制時(shí)應(yīng)該注意的問題:

1、從服務(wù)設(shè)定為“只讀”;

在從服務(wù)器啟動(dòng)read_only,但僅對(duì)非SUPER權(quán)限的用戶有效;

阻止所有用戶:

mysql> FLUSH TABLES WITH READ LOCK;

2、盡量確保復(fù)制時(shí)的事務(wù)安全

在master節(jié)點(diǎn)啟用參數(shù):

sync_binlog = ON

如果用到的是InnoDB存儲(chǔ)引擎:

innodb_flush_logs_at_trx_commit=ON

innodb_support_xa=ON

3、從服務(wù)器意外中止時(shí)盡量避免自動(dòng)啟動(dòng)復(fù)制線程

4、從節(jié)點(diǎn):設(shè)置參數(shù)

sync_master_info=ON

sync_relay_log_info=ON

修改配置文件,啟用二進(jìn)制日志和中繼日志

serverid區(qū)別開來


GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repluser@'192.168.1.%' IDENTIFIED BY '123456';

在兩邊節(jié)點(diǎn)都需要?jiǎng)?chuàng)建復(fù)制賬號(hào)

在復(fù)制時(shí)要指定對(duì)方當(dāng)前的二進(jìn)制日志記錄點(diǎn),

change MASTER TO MASTER_HOST='192.168.1.196',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=245;

change MASTER TO MASTER_HOST='192.168.1.198',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=418;



半同步復(fù)制

支持多種插件:/usr/lib64/mysql/plugins/

需要安裝方可使用:

mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name';

半同步復(fù)制:

semisync_master.so

semisync_slave.so

主節(jié)點(diǎn):

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';


MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

+------------------------------------+-------+

| Variable_name? ? ? ? ? ? ? ? ? ? ? | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled? ? ? | OFF? |

| rpl_semi_sync_master_timeout? ? ? | 10000 |

| rpl_semi_sync_master_trace_level? | 32? ? |

| rpl_semi_sync_master_wait_no_slave | ON? ? |

+------------------------------------+-------+

MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;

從節(jié)點(diǎn):

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';? ? ? ? ? ? ? ? ? ? ? ?

+---------------------------------+-------+

| Variable_name? ? ? ? ? ? ? ? ? | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled? ? | OFF? |

| rpl_semi_sync_slave_trace_level | 32? ? |

+---------------------------------+-------+

MariaDB [mydb]> STOP SLAVE IO_THREAD;

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [mydb]> START SLAVE IO_THREAD;

判斷方法:

主節(jié)點(diǎn):

MariaDB [mydb]> SELECT @@global.rpl_semi_sync_master_clients;

復(fù)制過濾器:

僅復(fù)制有限一個(gè)或幾個(gè)數(shù)據(jù)庫相關(guān)的數(shù)據(jù),而非所有;由復(fù)制過濾器進(jìn)行;

有兩種實(shí)現(xiàn)思路:

(1) 主服務(wù)器

主服務(wù)器僅向二進(jìn)制日志中記錄有關(guān)特定數(shù)據(jù)庫相關(guān)的寫操作;

問題:其它庫的time-point recovery將無從實(shí)現(xiàn);

binlog_do_db=

binlog_ignore_db=

(2) 從服務(wù)器

從服務(wù)器的SQL THREAD僅重放關(guān)注的數(shù)據(jù)庫或表相關(guān)的事件,并將其應(yīng)用于本地;

問題:網(wǎng)絡(luò)IO和磁盤IO;

Replicate_Do_DB= #白名單

Replicate_Ignore_DB=#黑名單

Replicate_Do_Table= #表白名單

Replicate_Ignore_Table=#表黑名單

Replicate_Wild_Do_Table=#表通配符白名單

Replicate_Wild_Ignore_Table=


復(fù)制的監(jiān)控和維護(hù):

(1) 清理日志:PURGE

PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr };

(2) 復(fù)制監(jiān)控

MASTER:

SHOW MASTER STATUS;

SHOW BINLOG EVENTS;

SHOW BINARY LOGS;

SLAVE:

SHOW SLAVE STATUS;

判斷從服務(wù)器是否落后于主服務(wù)器:

Seconds_Behind_Master: 0

(3) 如何確定主從節(jié)點(diǎn)數(shù)據(jù)是否一致?

通過表的CHECKSUM檢查;

使用percona-tools中pt-table-checksum;

(4) 主從數(shù)據(jù)不一致時(shí)的修復(fù)方法?

重新復(fù)制;


mysql 讀寫分離器

proxysql

vi /etc/yum.repos.d/proxysql.repo

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/latest

gpgcheck=1

gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key

yum install proxysql

ProxySQL:

配置示例:

datadir="/var/lib/proxysql"

admin_variables=

{

admin_credentials="admin:admin"

mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"

}

mysql_variables=

{

threads=4

max_connections=2048

default_query_delay=0

default_query_timeout=36000000

have_compress=true

poll_timeout=2000

interfaces="0.0.0.0:3306;/tmp/mysql.sock"

default_schema="information_schema"

stacksize=1048576

server_version="5.5.30"

connect_timeout_server=3000

monitor_history=600000

monitor_connect_interval=60000

monitor_ping_interval=10000

monitor_read_only_interval=1500

monitor_read_only_timeout=500

ping_interval_server=120000

ping_timeout_server=500

commands_stats=true

sessions_sort=true

connect_retries_on_failure=10

}

mysql_servers =

(

{

address = "172.18.0.67" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

port = 3306? ? ? ? ? # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

hostgroup = 0? ? ? ? ? # no default, required

status = "ONLINE"? ? # default: ONLINE

weight = 1? ? ? ? ? ? # default: 1

compression = 0? ? ? # default: 0

},

{

address = "172.18.0.68"

port = 3306

hostgroup = 1

status = "ONLINE"? ? # default: ONLINE

weight = 1? ? ? ? ? ? # default: 1

compression = 0? ? ? # default: 0

},

{

address = "172.18.0.69"

port = 3306

hostgroup = 1

status = "ONLINE"? ? # default: ONLINE

weight = 1? ? ? ? ? ? # default: 1

compression = 0? ? ? # default: 0

}

)

mysql_users:

(

{

username = "root"

password = "mageedu"

default_hostgroup = 0

max_connections=1000

default_schema="mydb"

active = 1

}

)

mysql_query_rules:

(

)

scheduler=

(

)

mysql_replication_hostgroups=

(

{

writer_hostgroup=0

reader_hostgroup=1

}

)

2、搭建mysql服務(wù)器,并用mysqldump實(shí)現(xiàn)備份還原

備份工具:

mysqldump:mysql服務(wù)自帶的備份工具;邏輯備份工具;#將表查出來,轉(zhuǎn)換為insert語句,還原時(shí)在表插入數(shù)據(jù)

完全、部分備份;

InnoDB:熱備;

MyISAM:溫備;

cp/tar

lvm2:快照(請(qǐng)求一個(gè)全局鎖),之后立即釋放鎖,達(dá)到幾乎熱備的效果;物理備份;

注意:不能僅備份數(shù)據(jù)文件;要同時(shí)備份事務(wù)日志;

前提:要求數(shù)據(jù)文件和事務(wù)日志位于同一個(gè)邏輯卷;

xtrabackup:

由Percona提供,開源工具,支持對(duì)InnoDB做熱備,物理備份工具;

完全備份、部分備份;

完全備份、增量備份;

完全備份、差異備份;

mysqlhotcopy

select:

備份:SELECT cluase INTO OUTFILE 'FILENAME';

恢復(fù):CREATE TABLE

導(dǎo)入:LOAD DATA


mysqldump:

邏輯備份、完全備份、部分備份;

二次封裝工具:

mydumper

phpMyAdmin

Usage:

mysqldump [OPTIONS] database [tables]

OR? ? mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

OR? ? mysqldump [OPTIONS] --all-databases [OPTIONS]

mysqldump mydb:表級(jí)別備份

mysqldump --databases mydb:庫級(jí)別備份

MyISAM存儲(chǔ)引擎:支持溫備,備份時(shí)要鎖定表;

-x, --lock-all-tables:鎖定所有庫的所有表,讀鎖;

-l, --lock-tables:鎖定指定庫所有表;

InnoDB存儲(chǔ)引擎:支持溫備和熱備;

--single-transaction:創(chuàng)建一個(gè)事務(wù),基于此快照?qǐng)?zhí)行備份;

其它選項(xiàng):

-R, --routines:存儲(chǔ)過程和存儲(chǔ)函數(shù);

--triggers

-E, --events? ? ?

--master-data[=#]

1:記錄為CHANGE MASTER TO語句,此語句不被注釋;

2:記錄為CHANGE MASTER TO語句,此語句被注釋;

--flush-logs:鎖定表完成后,即進(jìn)行日志刷新操作;


mysqldump -uroot --all-databases -x -E --master-data=2 --flush-logs > /root/alldb-`date +%F`.sql

備份之后插入數(shù)據(jù)到表中

保存二進(jìn)制日志,刪庫


還原

查表


mysql -uroot < alldb-2019-09-29.sql

還原


3、使用xtrabackup實(shí)現(xiàn)完全備份,增量備份,并還原

使用Xtrabackup進(jìn)行MySQL備份:

一、安裝

1、簡介

Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,據(jù)官方介紹,這也是世界上惟一一款開源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫進(jìn)行熱備的工具。特點(diǎn):

(1)備份過程快速、可靠;

(2)備份過程不會(huì)打斷正在執(zhí)行的事務(wù);

(3)能夠基于壓縮等功能節(jié)約磁盤空間和流量;

(4)自動(dòng)實(shí)現(xiàn)備份檢驗(yàn);

(5)還原速度快;

2、安裝

其最新版的軟件可從 http://www.percona.com/software/percona-xtrabackup/ 獲得。本文基于RHEL5.8的系統(tǒng),因此,直接下載相應(yīng)版本的rpm包安裝即可,這里不再演示其過程。

二、備份的實(shí)現(xiàn)

1、完全備份

# innobackupex --user=DBUSER --password=DBUSERPASS? /path/to/BACKUP-DIR/

如果要使用一個(gè)最小權(quán)限的用戶進(jìn)行備份,則可基于如下命令創(chuàng)建此類用戶:

mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;

mysql> FLUSH PRIVILEGES;

使用innobakupex備份時(shí),其會(huì)調(diào)用xtrabackup備份所有的InnoDB表,復(fù)制所有關(guān)于表結(jié)構(gòu)定義的相關(guān)文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關(guān)文件,同時(shí)還會(huì)備份觸發(fā)器和數(shù)據(jù)庫配置信息相關(guān)的文件。這些文件會(huì)被保存至一個(gè)以時(shí)間命名的目錄中。



備份的目錄以當(dāng)前時(shí)間點(diǎn)為目錄名,二進(jìn)制日志記錄點(diǎn)為000003 pos為245,表示備份的節(jié)點(diǎn),以后可以基于這個(gè)節(jié)點(diǎn)往后利用二進(jìn)制日志還原

在備份的同時(shí),innobackupex還會(huì)在備份目錄中創(chuàng)建如下文件:

(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號(hào))范圍信息;

每個(gè)InnoDB頁(通常為16k大小)都會(huì)包含一個(gè)日志序列號(hào),即LSN。LSN是整個(gè)數(shù)據(jù)庫系統(tǒng)的系統(tǒng)版本號(hào),每個(gè)頁面相關(guān)的LSN能夠表明此頁面最近是如何發(fā)生改變的。

(2)xtrabackup_binlog_info —— mysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二進(jìn)制日志文件及用于InnoDB或XtraDB表的二進(jìn)制日志文件的當(dāng)前position。

(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;

(5)backup-my.cnf —— 備份命令用到的配置選項(xiàng)信息;

在使用innobackupex進(jìn)行備份時(shí),還可以使用--no-timestamp選項(xiàng)來阻止命令自動(dòng)創(chuàng)建一個(gè)以時(shí)間命名的目錄;如此一來,innobackupex命令將會(huì)創(chuàng)建一個(gè)BACKUP-DIR目錄來存儲(chǔ)備份數(shù)據(jù)。

2、準(zhǔn)備(prepare)一個(gè)完全備份

一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致狀態(tài)。“準(zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。

innobakupex命令的--apply-log選項(xiàng)可用于實(shí)現(xiàn)上述功能。如下面的命令:

# innobackupex --apply-log? /path/to/BACKUP-DIR

如果執(zhí)行正確,其最后輸出的幾行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

120407? 9:01:36? InnoDB: Starting shutdown...

120407? 9:01:40? InnoDB: Shutdown completed; log sequence number 92036620

120407 09:01:40? innobackupex: completed OK!

在實(shí)現(xiàn)“準(zhǔn)備”的過程中,innobackupex通常還可以使用--use-memory選項(xiàng)來指定其可以使用的內(nèi)存的大小,默認(rèn)通常為100M。如果有足夠的內(nèi)存可用,可以多劃分一些內(nèi)存給prepare的過程,以提高其完成速度。

刪庫

innobackupex --apply-log . #對(duì)當(dāng)前目錄執(zhí)行指定應(yīng)用日志

一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致狀態(tài)。“準(zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。

innobakupex命令的--apply-log選項(xiàng)可用于實(shí)現(xiàn)上述功能。如下面的命令:

# innobackupex --apply-log? /path/to/BACKUP-DIR

如果執(zhí)行正確,其最后輸出的幾行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

120407? 9:01:36? InnoDB: Starting shutdown...

120407? 9:01:40? InnoDB: Shutdown completed; log sequence number 92036620

120407 09:01:40? innobackupex: completed OK!

在實(shí)現(xiàn)“準(zhǔn)備”的過程中,innobackupex通常還可以使用--use-memory選項(xiàng)來指定其可以使用的內(nèi)存的大小,默認(rèn)通常為100M。如果有足夠的內(nèi)存可用,可以多劃分一些內(nèi)存給prepare的過程,以提高其完成速度。


3、從一個(gè)完全備份中恢復(fù)數(shù)據(jù)

注意:恢復(fù)不用啟動(dòng)MySQL

innobackupex命令的--copy-back選項(xiàng)用于執(zhí)行恢復(fù)操作,其通過復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來執(zhí)行恢復(fù)過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關(guān)信息。

# innobackupex --copy-back? /path/to/BACKUP-DIR

如果執(zhí)行正確,其輸出信息的最后幾行通常如下:

innobackupex: Starting to copy InnoDB log files

innobackupex: in '/backup/2012-04-07_08-17-03'

innobackupex: back to original InnoDB log directory '/mydata/data'

innobackupex: Finished copying back files.

120407 09:36:10? innobackupex: completed OK!


innobackupex --copy-back /data/backup/2019-09-29_22-51-00/


當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。如:

# chown -R? mysql:mysql? /mydata/data/



要實(shí)現(xiàn)第一次增量備份,可以使用下面的命令進(jìn)行:

# innobackupex --incremental /backup --incremental-basedir=BASEDIR

其中,BASEDIR指的是完全備份所在的目錄,此命令執(zhí)行結(jié)束后,innobackupex命令會(huì)在/backup目錄中創(chuàng)建一個(gè)新的以時(shí)間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過增量備份之后再一次進(jìn)行增量備份時(shí),其--incremental-basedir應(yīng)該指向上一次的增量備份所在的目錄。

需要注意的是,增量備份僅能應(yīng)用于InnoDB或XtraDB表,對(duì)于MyISAM表而言,執(zhí)行增量備份時(shí)其實(shí)進(jìn)行的是完全備份。

“準(zhǔn)備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:

(1)需要在每個(gè)備份(包括完全和各個(gè)增量備份)上,將已經(jīng)提交的事務(wù)進(jìn)行“重放”。“重放”之后,所有的備份數(shù)據(jù)將合并到完全備份上。

(2)基于所有的備份將未提交的事務(wù)進(jìn)行“回滾”。

于是,操作就變成了:

# innobackupex --apply-log --redo-only BASE-DIR

接著執(zhí)行:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

而后是第二個(gè)增量:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

innobackupex --copy-back ./

其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執(zhí)行如上操作;

增量備份

innobackupex --incremental /data/backup/ --incremental-basedir=/data/backup2019-09-29_23-21-27

刪除表操作

MariaDB [mydb]> delete from tb1 where id=1;

增量備份完之后在刪除一次表,利用二進(jìn)制日志還原

delete from tb1 where id=2;

查看完全備份二進(jìn)制日志記錄點(diǎn)

將記錄點(diǎn)往后的記錄導(dǎo)出

mysqlbinlog -j 1178 /data/mysql/mysql-bin.000001 > /root/xtraback-binlog.sql

然后刪庫

[root@centos7 2019-09-29_23-21-27]$ innobackupex --apply-log --redo-only . #第一次提交

innobackupex --apply-log --redo-only . --incremental-dir=/data/backup/2019-09-29_23-33-16 #將增量備份也應(yīng)用至第一次的完備,然后合并日志

[root@centos7 2019-09-29_23-21-27]$innobackupex --copy-back ./ . #然后合并應(yīng)用日志

innobackupex --copy-back ./ #還原需要修改權(quán)限


set sql_log_bin=OFF; #關(guān)閉

source /tmp/xtraback-binlog.sql #在還原xtrabackup


4、搭建redis,并說明redis持久化原理

程序環(huán)境:

配置文件:/etc/redis.conf

主程序:/usr/bin/redis-server

6379/tcp

客戶端:/usr/bin/redis-cli

Unit File:/usr/lib/systemd/system/redis.service

數(shù)據(jù)目錄:/var/lib/redis

安裝:

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz

$ tar xzf redis-5.0.5.tar.gz

$ cd redis-5.0.5

$ make


$ src/redis-server

$ src/redis-cli

redis> set foo barOK

redis> get foo"bar"



redis的幾個(gè)配置段

配置和使用Redis:

基本配置項(xiàng)

網(wǎng)絡(luò)配置項(xiàng)

持久化相關(guān)配置

復(fù)制相關(guān)的配置

安全相關(guān)配置

Limit相關(guān)的配置

SlowLog相關(guān)的配置

INCLUDES

Advanced配置


網(wǎng)絡(luò)配置項(xiàng):

bind IP

port PORT

protected-mode

tcp-backlog

unixsocket

timeout:連接的空閑超時(shí)時(shí)長;


安全配置:

requirepass <PASSWORD>

rename-command <COMMAND> <NEW_CMND_NAME>

在AOF或Replication環(huán)境中,不推薦使用;


Limits相關(guān)的配置:

maxclients

maxmemory <bytes>

maxmemory-policy noeviction

淘汰策略:volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl, noeviction

maxmemory-samples 5

淘汰算法運(yùn)行時(shí)的采樣樣本數(shù);


SlowLog相關(guān)的配置:

slowlog-log-slower-than 10000

單位是微秒;

slowlog-max-len 128

SlowLog記錄的日志最大條目;


Redis的持久化:

RDB:snapshotting, 二進(jìn)制格式;按事先定制的策略,周期性地將數(shù)據(jù)從內(nèi)存同步至磁盤;數(shù)據(jù)文件默認(rèn)為dump.rdb;

客戶端顯式使用SAVE或BGSAVE命令來手動(dòng)啟動(dòng)快照保存機(jī)制;

SAVE:同步,即在主線程中保存快照,此時(shí)會(huì)阻塞所有客戶端請(qǐng)求;

BGSAVE:異步;

AOF:Append Only File, fsync

記錄每次寫操作至指定的文件尾部實(shí)現(xiàn)的持久化;當(dāng)redis重啟時(shí),可通過重新執(zhí)行文件中的命令在內(nèi)存中重建出數(shù)據(jù)庫;

BGREWRITEAOF:AOF文件重寫;

不會(huì)讀取正在使用AOF文件,而是通過將內(nèi)存中的數(shù)據(jù)以命令的方式保存至臨時(shí)文件中,完成之后替換原來的AOF文件;

RDB相關(guān)的配置:

*save <seconds> <changes>

save 900 1

save 300 10?

save 60 10000?

表示:三個(gè)策略滿足其中任意一個(gè)均會(huì)觸發(fā)SNAPSHOTTING操作;900s內(nèi)至少有一個(gè)key有變化,300s內(nèi)至少有10個(gè)key有變化,60s內(nèi)至少有1W個(gè)key發(fā)生變化;

stop-writes-on-bgsave-error yes

dump操作出現(xiàn)錯(cuò)誤時(shí),是否禁止新的寫入操作請(qǐng)求;

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb:指定rdb文件名

*dir /var/lib/redis:rdb文件的存儲(chǔ)路徑

AOF相關(guān)的配置

*appendonly no

appendfilename "appendonly.aof"

*appendfsync

Redis supports three different modes:

no:redis不執(zhí)行主動(dòng)同步操作,而是OS進(jìn)行;

everysec:每秒一次;

always:每語句一次;

no-appendfsync-on-rewrite no

是否在后臺(tái)執(zhí)行aof重寫期間不調(diào)用fsync,默認(rèn)為no,表示調(diào)用;

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

上述兩個(gè)條件同時(shí)滿足時(shí),方會(huì)觸發(fā)重寫AOF;與上次aof文件大小相比,其增長量超過100%,且大小不少于64MB;

aof-load-truncated yes

注意:持久機(jī)制本身不能取代備份;應(yīng)該制訂備份策略,對(duì)redis庫定期備份;

RDB與AOF同時(shí)啟用:

(1) BGSAVE和BGREWRITEAOF不會(huì)同時(shí)進(jìn)行;

(2) Redis服務(wù)器啟動(dòng)時(shí)用持久化的數(shù)據(jù)文件恢復(fù)數(shù)據(jù),會(huì)優(yōu)先使用AOF;


5、搭建redis,并實(shí)現(xiàn)主從復(fù)制

復(fù)制:

特點(diǎn):

一個(gè)Master可以有多個(gè)slave主機(jī),支持鏈?zhǔn)綇?fù)制;

Master以非阻塞方式同步數(shù)據(jù)至slave主機(jī);

配置slave節(jié)點(diǎn):

redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>

redis-cli> CONFIG SET masterauth <PASSWORD>

配置參數(shù):

*slaveof

*masterauth

slave-serve-stale-data yes

slave-read-only yes

*repl-diskless-sync no

no, Disk-backed, Diskless

新的從節(jié)點(diǎn)或某較長時(shí)間未能與主節(jié)點(diǎn)進(jìn)行同步的從節(jié)點(diǎn)重新與主節(jié)點(diǎn)通信,需要做“full synchronization",此時(shí)其同步方式有兩種style:

Disk-backend:主節(jié)點(diǎn)新創(chuàng)建快照文件于磁盤中,而后將其發(fā)送給從節(jié)點(diǎn);

Diskless:主節(jié)占新創(chuàng)建快照后直接通過網(wǎng)絡(luò)套接字文件發(fā)送給從節(jié)點(diǎn);為了實(shí)現(xiàn)并行復(fù)制,通常需要在復(fù)制啟動(dòng)前延遲一個(gè)時(shí)間段;

repl-diskless-sync-delay 5

repl-ping-slave-period 10

*repl-timeout 60

repl-disable-tcp-nodelay no

repl-backlog-size 1mb

*slave-priority 100

復(fù)制集群中,主節(jié)點(diǎn)故障時(shí),sentinel應(yīng)用場景中的主節(jié)點(diǎn)選舉時(shí)使用的優(yōu)先級(jí);數(shù)字越小優(yōu)先級(jí)越高,但0表示不參與選舉;

min-slaves-to-write 3:主節(jié)點(diǎn)僅允許其能夠通信的從節(jié)點(diǎn)數(shù)量大于等于此處的值時(shí)接受寫操作;

min-slaves-max-lag 10:從節(jié)點(diǎn)延遲時(shí)長超出此處指定的時(shí)長時(shí),主節(jié)點(diǎn)會(huì)拒絕寫入操作;


在從節(jié)點(diǎn)上修改配置文件,增加主節(jié)點(diǎn)ip端口,驗(yàn)證密碼





Server相關(guān)的命令:

CLIENT GETNAME

*CLIENT KILL

CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]

*CLIENT LIST

CLIENT PAUSE

CLIENT PAUSE timeout

CLIENT REPLY

CLIENT SETNAME:Set the current connection name

? SHUTDOWN [NOSAVE|SAVE]

CONFIG GET #查詢配置文件中的配置段

CONFIG RESETSTAT?

CONFIG REWRITE #將命令行中保存的配置寫入配置文件

CONFIG SET #在命令行中修改配置文件中的配置

INFO:服務(wù)器狀態(tài)信息查看;分為多個(gè)secion;

INFO [section]

在命令行中直接配置從節(jié)點(diǎn)加入主節(jié)點(diǎn)復(fù)制

配置完成后,使用config rewrite 寫入配置文件完成永久有效



6、搭建redis集群

sentinel:https://redis.io/topics/sentinel?#官方文檔

主要完成三個(gè)功能:監(jiān)控、通知、自動(dòng)故障轉(zhuǎn)移

選舉:流言協(xié)議、投票協(xié)議

配置項(xiàng):

port 26379

sentinel monitor <master-name> <ip> <redis-port> <quorum>

sentinel auth-pass <master-name> <password>

<quorum>表示sentinel集群的quorum機(jī)制,即至少有quorum個(gè)sentinel節(jié)點(diǎn)同時(shí)判定主節(jié)點(diǎn)故障時(shí),才認(rèn)為其真的故障;

s_down: subjectively down

o_down: objectively down

sentinel down-after-milliseconds <master-name> <milliseconds>

監(jiān)控到指定的集群的主節(jié)點(diǎn)異常狀態(tài)持續(xù)多久方才將標(biāo)記為“故障”;

sentinel parallel-syncs <master-name> <numslaves>

指在failover過程中,能夠被sentinel并行配置的從節(jié)點(diǎn)的數(shù)量;

sentinel failover-timeout <master-name> <milliseconds>

sentinel必須在此指定的時(shí)長內(nèi)完成故障轉(zhuǎn)移操作,否則,將視為故障轉(zhuǎn)移操作失敗;

sentinel notification-script <master-name> <script-path>

通知腳本,此腳本被自動(dòng)傳遞多個(gè)參數(shù);

redis-cli -h SENTINEL_HOST -p SENTINEL_PORT

redis-cli>

SENTINEL masters

SENTINEL slaves <MASTER_NAME>

SENTINEL failover <MASTER_NAME>

SENTINEL get-master-addr-by-name <MASTER_NAME>


vim /etc/redis-sentinel.conf? #修改配置文件

port 26379

bind 0.0.0.0

sentinel monitor mymaster 192.168.1.196 6379 2 #添加監(jiān)控主節(jié)點(diǎn)ip及端口,以及投票權(quán)重

sentinel auth-pass mymaster 123456 #密碼

sentinel down-after-milliseconds mymaster 5000 #超時(shí)時(shí)長

sentinel parallel-syncs mymaster 1 #幾路并發(fā)時(shí)間

sentinel failover-timeout mymaster 180000 #sentinel必須在此指定的時(shí)長內(nèi)完成故障轉(zhuǎn)移操作,否則,將視為故障轉(zhuǎn)移操作失??;

復(fù)制至其他節(jié)點(diǎn)。

systemctl start redis-sentinel #在其他節(jié)點(diǎn)啟動(dòng)sentinel服務(wù)即可

會(huì)自動(dòng)記錄主從節(jié)點(diǎn)

redis cluster

修改配置文件。

vim /etc/redis.conf

cluster-enabled yes #啟用集群

cluster-config-file cluster.conf #集群配置文件

cluster-node-timeout 15000 #超時(shí)時(shí)長

cluster-slave-validity-factor 10 #主從判斷因子

將配置文件復(fù)制至其他集群節(jié)點(diǎn)


rm -rf /var/lib/redis/dump.rdb #這里我刪除之前配置的數(shù)據(jù)。


redis-cli -a 123456 -c cluster addslots {0..5500}?

啟動(dòng)redis后為每個(gè)節(jié)點(diǎn)分配slots; cluster addslots

每個(gè)slot要獨(dú)立創(chuàng)建,可用范圍為0-16383,共16384個(gè);

redis-cli -h 192.168.1.198 -a 123456 -c cluster addslots {5501..11000}

redis-cli -h 192.168.1.202 -a 123456 -c cluster addslots {11001..16385}

設(shè)定集群成員關(guān)系;cluster meet

cluster info;

集群建立成功后每個(gè)slots都為16384

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容