目錄
事情是這樣的
一、Redis下載及安裝
1、下載地址
2、解壓Redis安裝包
3、Redis編譯安裝
三、集群搭建配置
1、總體構造
2、偽集群
3、主節點redis服務6379配置
4、redis從節點服務 7001/7002配置
四、故障轉移/高可用配置(哨兵模式sentinel)
1、總體架構
2、主節點master配置哨兵sentinel
3、從節點slave配置哨兵sentinel
五、啟動集群
1、啟動所有redis服務節點
2、啟動所有哨兵sentinel服務
3、查看服務行程
六、測驗:資料同步+讀寫分離+故障轉移
1、資料同步測驗
2、master/slave節點查看
3、故障轉移(高可用)測驗
4、讀寫分離測驗
下期預告:下一期出Redis分布式搭建詳細教程~~~敬請期待,,,
事情是這樣的
今天內容干貨比較多,比較硬核,就不碼故事情節了,
建議:收藏+實操,一定要自己來一遍哦,
一、Redis下載及安裝
1、下載地址
http://distfiles.macports.org/redis/redis-5.0.7.tar.gz

2、解壓Redis安裝包
#解壓redis
[root@open-falcon mnt]# tar -zxvf redis-5.0.7.tar.gz
#解壓得到包如下
[root@open-falcon mnt]# cd redis-5.0.7
#包內檔案如下
[root@open-falcon redis-5.0.7]# ls
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-moduleapi sentinel.conf tests
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster runtest-sentinel src utils
[root@open-falcon redis-5.0.7]#
3、Redis編譯安裝
#進入解壓包
[root@open-falcon redis-5.0.7]# cd redis-5.0.7
#編譯&安裝
[root@open-falcon redis-5.0.7]# make && make install
三、集群搭建配置
1、總體構造
Redis高可用集群,一般選三臺服務器:這樣,我們在一臺主節點掛了之后,另外兩臺可以選舉其中一臺擔任主節點master的角色,
①slave節點配置從master節點同步資料
②哨兵sentinel故障轉移機制:每個redis節點搭建一個監控哨兵,當redis的master節點掛掉之后:三個哨兵選舉一個slave節點 成為master節點
#部署在同一臺服務器上,使用3個埠對外提供服務
主節點master
1臺
Redis服務 192.168.154.145 6379
sentinel哨兵 192.168.154.145 26379
從節點slave
2臺
Redis服務 192.168.154.145 27001
sentinel哨兵 192.168.154.145 27002
2、偽集群
由于現場沒有三臺服務器,我們就在一臺服務器上,使用3個埠,來給他搭一個"偽集群":
何為"偽集群"呢?
"偽集群" 架構與真正集群完全一樣,故障轉移、高可用都可以,
只是搭建在一臺服務器上,使用3個埠對外提供服務,
生產環境下,集群環境還是需要使用3臺不同的服務器,從而保證高可用,這里只是節約資源、方便搭建,
3、主節點redis服務6379配置
完整配置及步驟如下:
1、創建主節點作業目錄 redis-6379
mkdir -p /usr/local/redis-6379
2、將組態檔拷貝到作業目錄下
cp redis-5.0.7/redis.conf /usr/local/redis-6379
3、主節點 6379 埠配置
#打開主節點redis.conf
vim /usr/local/redis-6379/redis.conf
4、修改如下內容:左側為修改的行數,方便大家查找
69 bind 0.0.0.0
92 port 6379
136 daemonize yes
158 pidfile /var/run/redis_6379.pid
171 logfile "/usr/local/redis-6379/redis-6379.log"
#默認配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量備份檔案名
253 dbfilename redis-6379.rdb
#指定路徑名
263 dir /usr/local/redis-6379
#設定redis密碼
509 requirepass 123456
#開啟增量備份
701 appendonly yes
705 appendfilename "appendonly-6379.aof"
4、redis從節點服務 7001/7002配置
注意,從節點與主節點配置的區別主要在兩個地方
①配置主節點:replicaof 192.168.154.145 6379
②配置主節點的登錄密碼masterauth 123456
完整配置及步驟如下:
1、創建從節點作業目錄 redis-7001 和 redis-7002
mkdir -p /usr/local/redis-7001
mkdir -p /usr/local/redis-7002
2、將組態檔拷貝到作業目錄下
cp redis-5.0.7/redis.conf /usr/local/redis-7001
cp redis-5.0.7/redis.conf /usr/local/redis-7002
3、從節點 7001 / 7002 埠配置
#分別打開從節點redis.conf
vim /usr/local/redis-7001/redis.conf
vim /usr/local/redis-7002/redis.conf
4、7001 從節點配置,左側為修改的行數,方便大家查找
69 bind 0.0.0.0
92 port 7001
136 daemonize yes
158 pidfile /var/run/redis_7001.pid
171 logfile "/usr/local/redis-7001/redis-7001.log"
#默認配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量備份檔案名
253 dbfilename redis-7001.rdb
#指定路徑名
263 dir /usr/local/redis-7001
#設定主節點 地址埠+主節點連接密碼
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#設定redis密碼
509 requirepass 123456
#開啟增量備份
701 appendonly yes
705 appendfilename "appendonly-7001.aof"
5、7002 從節點配置,左側為修改的行數,方便大家查找
69 bind 0.0.0.0
92 port 7002
136 daemonize yes
158 pidfile /var/run/redis_7002.pid
171 logfile "/usr/local/redis-7002/redis-7002.log"
#默認配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量備份檔案名
253 dbfilename redis-7002.rdb
#指定路徑名
263 dir /usr/local/redis-7002
#設定主節點 地址埠+主節點連接密碼
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#設定redis密碼
509 requirepass 123456
#開啟增量備份
701 appendonly yes
705 appendfilename "appendonly-7002.aof"
四、故障轉移/高可用配置(哨兵模式sentinel)
1、總體架構
主節點哨兵:
6379埠redis主服務,哨兵默認埠為26379
從節點哨兵:
7001埠redis服務,哨兵使用27001埠
7002埠redis服務,哨兵使用27002埠
2、主節點master配置哨兵sentinel
為了方便管理,我們把哨兵作業目錄分別建在對應的redis作業目錄下
注意:
①配置master的地址及命名(mymaster為集群名稱):sentinel monitor mymaster 192.168.154.145 6379 2
②配置連接redis主節點的密碼 sentinel auth-pass mymaster 123456
③日志目錄一定要創建,因為出問題,方便查找原因, logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"
1、創建主節點 sentinel作業目錄
mkdir -p /usr/local/redis-6379/sentinel/
2、將組態檔拷貝到sentinel作業目錄下
cp redis-5.0.7/sentinel.conf /usr/local/redis-6379/sentinel/
3、修改組態檔 左側為修改的行數,方便大家查找
vim /usr/local/redis-6379/sentinel/sentinel.conf
#配置哨兵埠
21 port 26379
#配置行程id存盤地址
32 pidfile "/usr/local/redis-6379/redis-sentinel-26379.pid"
#配置log路徑
37 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"
#配置哨兵作業目錄
64 dir "/usr/local/redis-6379/sentinel"
#配置監控的redis主節點
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主節點登錄密碼
120 sentinel auth-pass mymaster 123456
3、從節點slave配置哨兵sentinel
①從節點的配置,除了作業目錄不同及埠,其余與主節點完全一致
1、創建從節點 sentinel作業目錄
mkdir -p /usr/local/redis-7001/sentinel/
mkdir -p /usr/local/redis-7002/sentinel/
2、將組態檔拷貝到sentinel作業目錄下
cp redis-5.0.7/sentinel.conf /usr/local/redis-7001/sentinel/
cp redis-5.0.7/sentinel.conf /usr/local/redis-7002/sentinel/
3、分別修改slave節點 哨兵組態檔
vim /usr/local/redis-7001/sentinel/sentinel.conf
vim /usr/local/redis-7002/sentinel/sentinel.conf
4、27001節點哨兵的配置 左側為修改的行數,方便大家查找
#配置哨兵埠
21 port 27001
#配置行程id存盤地址
32 pidfile "/usr/local/redis-7001/redis-sentinel-27001.pid"
#配置log路徑
37 logfile "/usr/local/redis-7001/sentinel/redis-sentinel.log"
#配置哨兵作業目錄
64 dir "/usr/local/redis-7001/sentinel"
#配置監控的redis主節點
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主節點登錄密碼
120 sentinel auth-pass mymaster 123456
5、27002哨兵節點的配置 左側為修改的行數,方便大家查找
#配置哨兵埠
21 port 27002
#配置行程id存盤地址
32 pidfile "/usr/local/redis-7002/redis-sentinel-27002.pid"
#配置log路徑
37 logfile "/usr/local/redis-7002/sentinel/redis-sentinel.log"
#配置哨兵作業目錄
64 dir "/usr/local/redis-7002/sentinel"
#配置監控的redis主節點
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主節點登錄密碼
120 sentinel auth-pass mymaster 123456
到此全部配置完成,
五、啟動集群
1、啟動所有redis服務節點
#分別啟動三個節點的redis服務
[root@mail ~]# redis-server /usr/local/redis-6379/redis.conf
[root@mail ~]# redis-server /usr/local/redis-7001/redis.conf
[root@mail ~]# redis-server /usr/local/redis-7002/redis.conf
2、啟動所有哨兵sentinel服務
#啟動時,根據組態檔啟動
[root@mail ~]# redis-sentinel /usr/local/redis-6379/sentinel/sentinel.conf
[root@mail ~]# redis-sentinel /usr/local/redis-7001/sentinel/sentinel.conf
[root@mail ~]# redis-sentinel /usr/local/redis-7002/sentinel/sentinel.conf
3、查看服務行程
#如下圖:三個redis服務+三個哨兵監控 全部啟動成功
[root@mail ~]# ps aux|grep redis
root 50845 0.0 0.1 158068 3904 ? Ssl 07:50 0:42 redis-server 0.0.0.0:6379
root 50166 0.0 0.1 161652 3768 ? Ssl 07:39 0:43 redis-server 0.0.0.0:7001
root 50173 0.1 0.2 161652 4884 ? Ssl 07:40 0:53 redis-server 0.0.0.0:7002
root 50370 0.1 0.1 152436 3692 ? Ssl 07:43 1:14 redis-sentinel *:26379 [sentinel]
root 50375 0.1 0.0 152436 1748 ? Ssl 07:43 1:15 redis-sentinel *:27001 [sentinel]
root 50431 0.1 0.0 152436 1712 ? Ssl 07:43 1:14 redis-sentinel *:27002 [sentinel]
六、測驗:資料同步+讀寫分離+故障轉移
1、資料同步測驗
測驗目標:master主節點 寫入/修改/洗掉資料,slave從節點會自動同步master的資料操作記錄,
① redis-cli鏈接master主節點,寫入age和name 兩個資料
#鏈接redis,設定兩個值,如下
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set age 25
OK
127.0.0.1:6379> set name lex
OK
② 登錄slave從節點查看
#登錄slave從節點
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看所有資料
127.0.0.1:7001> keys *
1) "age"
2) "name"
#查看age資料
127.0.0.1:7001> get age
"25"
#嘗試修改資料
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失敗,slave從節點 資料只讀
2、master/slave節點查看
① 鏈接哨兵:查看master節點和slave節點的分配情況
② 鏈接命令:redis-cli -a 123456 -p 26379 ,同樣使用redis-cli,只是鏈接到sentinel的埠即可
查看master主節點地址:6379埠服務
#鏈接哨兵sentinel 同樣使用redis-cli
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看mymaster(我們配置的集群名) 集群的master 是哪個
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "6379"
7) "runid"
8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
9) "flags"
10) "master"
...
③ 查看slave節點地址:兩個slave節點分別是7001和7002服務,可以看到兩個slave節點指向的master節點為6379
#命令如下:
127.0.0.1:26379> sentinel slaves mymaster
1) 1) "name"
2) "192.168.154.145:7001"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "7001"
9) "flags"
10) "slave"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.154.145"
35) "master-port"
36) "6379"
...
2) 1) "name"
2) "192.168.154.145:7002"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "7002"
9) "flags"
10) "slave"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.154.145"
35) "master-port"
36) "6379"
...
3、故障轉移(高可用)測驗
測驗目的:master主節點掛掉之后,我們的sentinel集群可以通過選舉機制,重新在slave節點中選舉一個作為新的master節點,
① 關閉主節點6379
#鏈接主節點,shutdown關閉主節點
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> shutdown
not connected>
② 查看此時的master節點
鏈接到哨兵,查看主節點:此時,經過三個哨兵的選舉,主節點變為 7002
#鏈接到哨兵,查看主節點:主節點變為 7002
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "7002"
7) "runid"
8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
9) "flags"
10) "master"
...
127.0.0.1:26379>
③此時,再查看slave節點的情況
發現slave節點變為:6379和7001兩個,而且6379的狀態為 "s_down,slave,disconnected",因為我們關閉了6379
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel slaves mymaster
1) 1) "name"
2) "192.168.154.145:6379"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "6379"
7) "runid"
8) "e740b7285067b2dbb8c2640745196099460f4bb3"
9) "flags"
10) "s_down,slave,disconnected"
...
2) 1) "name"
2) "192.168.154.145:7001"
3) "ip"
4) "192.168.154.145"
5) "port"
6) "7001"
7) "runid"
8) "19a7647509ba020adfd06b1eb40f1f35d06c549d"
9) "flags"
10) "slave"
...
127.0.0.1:26379>
④ 所以,故障轉移就成功了,
4、讀寫分離測驗
① redis集群開啟之后,slave從節點的權限 默認是只讀的;當然我們也可以開啟slave節點的寫入權限,
所以,寫資料:鏈接master主節點;讀資料:鏈接slave從節點,
如下圖:slave從節點,沒有寫入權限
#登錄slave從節點
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看所有資料
127.0.0.1:7001> keys *
1) "age"
2) "name"
#查看age資料
127.0.0.1:7001> get age
"25"
#嘗試修改資料
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失敗,slave從節點 資料只讀
下期預告:下一期出Redis分布式搭建詳細教程~~~敬請期待,,,
推薦閱讀
叫你別隨便重啟Redis!!!怎么樣,資料全丟了吧~~~
python你TM太皮了——區區30行代碼就能記錄鍵盤的一舉一動
白帽SQL注入實戰程序記錄(2)——根據information_schema組裝SQL注入陳述句
女神相冊密碼忘記了,我只用Python寫了20行代碼~~~
歡迎關注微信公眾號:hacklex 讓安全技術不再神秘,讓編程更加有趣~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277002.html
標籤:其他
