天天看點

CentOS 下安裝Redis主從,Redis主從複制,Master-Slave部署架構前言部署架構配置檔案啟動Redis檢視主從結構主從切換、調整

前言

在上一篇部落格《 CentOS6下編譯、安裝Redis源碼》中,我介紹了如何在CentOS下編譯最新的穩定版本的Redis源碼,并成功啟動了一個Redis單執行個體。本文的目标是要部署Master-Slave架構,為了友善觀察,本文将部署一個Master,多個Slave的架構,還包含一些簡單的主從管理指令的使用。

部署架構

CentOS 下安裝Redis主從,Redis主從複制,Master-Slave部署架構前言部署架構配置檔案啟動Redis檢視主從結構主從切換、調整

配置檔案

為了友善,我們可以建立一個目錄做這個事情,建立目錄:

[[email protected] redis]#mkdir /opt/redis/mss

master的配置檔案

[[email protected] redis]#cp /opt/redis/redis-stable/redis.conf /opt/redis/mss/master_6379.conf

[[email protected] redis]#vim /opt/redis/mss/master_6379.conf

打開這個檔案後,編輯如下内容:

daemonize yes

pidfile /var/run/redis_6379.pid

port 6379

logfile “/opt/redis/log/master_6379.log” # 該項可不設定,預設輸出到/dev/null

slave-read-only yes # 表示從庫隻讀,如果設定成no,表示從庫也是可以寫入的

slave1的配置檔案

[[email protected] redis]#cp /opt/redis/redis-stable/redis.conf /opt/redis/mss/slave_6380.conf

[[email protected] redis]#vim /opt/redis/mss/slave_6380.conf

打開這個檔案後,編輯如下内容:

daemonize yes

pidfile /var/run/redis_6380.pid

port 6380

logfile “/opt/redis/log/slave_6380.log” # 該項可不設定,預設輸出到/dev/null

slave-read-only yes # 表示從庫隻讀,如果設定成no,表示從庫也是可以寫入的

slaveof 127.0.0.1 6379

slave2的配置檔案

[[email protected] redis]#cp /opt/redis/redis-stable/redis.conf /opt/redis/mss/slave_6381.conf

[[email protected] redis]#vim /opt/redis/mss/slave_6381.conf

打開這個檔案後,編輯如下内容:

daemonize yes

pidfile /var/run/redis_6381.pid

port 6381

logfile “/opt/redis/log/slave_6381.log” # 該項可不設定,預設輸出到/dev/null

slave-read-only yes # 表示從庫隻讀,如果設定成no,表示從庫也是可以寫入的

slaveof 127.0.0.1 6379

slave3的配置檔案

[[email protected] redis]#cp /opt/redis/redis-stable/redis.conf /opt/redis/mss/slave_6383.conf

[[email protected] redis]#vim /opt/redis/mss/slave_6383.conf

打開這個檔案後,編輯如下内容:

daemonize yes

pidfile /var/run/redis_6383.pid

port 6383

logfile “/opt/redis/log/slave_6383.log” # 該項可不設定,預設輸出到/dev/null

slave-read-only yes # 表示從庫隻讀,如果設定成no,表示從庫也是可以寫入的

slaveof 127.0.0.1 6380

啟動Redis

啟動Master

[[email protected] ~]# mkdir /opt/redis/log

[[email protected] ~]# redis-server /opt/redis/mss/master_6379.conf

[[email protected] ~]# ps -ef | grep redis

root 1401 1 0 07:08 ? 00:00:00 redis-server *:6379

root 1405 1333 0 07:09 pts/1 00:00:00 grep redis

檢視日志:

[[email protected] ~]# tail -f /opt/redis/log/master_6379.log

啟動Slave

[[email protected] ~]# redis-server /opt/redis/mss/slave_6380.conf

[[email protected] ~]# redis-server /opt/redis/mss/slave_6381.conf

[[email protected] ~]# redis-server /opt/redis/mss/slave_6383.conf

[[email protected] ~]# ps -ef | grep redis

root 1401 1 0 07:08 ? 00:00:00 redis-server *:6379

root 1409 1 0 07:11 ? 00:00:00 redis-server *:6380

root 1414 1 0 07:11 ? 00:00:00 redis-server *:6381

root 1419 1 0 07:11 ? 00:00:00 redis-server *:6383

root 1424 1333 0 07:11 pts/1 00:00:00 grep redis

[[email protected] ~]#

從上面可以看到,三個都啟動成功了。

檢視主從結構

登入master檢視并設定Key

[[email protected] ~]# redis-cli -p 6379

127.0.0.1:6379> info Replication

#

Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6380,state=online,offset=113,lag=1

slave1:ip=127.0.0.1,port=6381,state=online,offset=113,lag=1

master_repl_offset:113

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:112

127.0.0.1:6379> set hi hello

OK

127.0.0.1:6379> get hi

“hello”

127.0.0.1:6379>

在上面的操作中,我們檢視了主從指派的情況,可以看到,master擁有兩個 slave, 分别是監聽了6380和6381端口的,然後我們設定了一個key為hi值為hello的鍵值對,我們發現,這和我們預期的部署是一樣的。

登入slave1并檢視主從資訊和設定的key

[[email protected] ~]# redis-cli -p 6380

127.0.0.1:6380> info replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:6

master_sync_in_progress:0

slave_repl_offset:532

slave_priority:100

slave_read_only:1

connected_slaves:1

slave0:ip=127.0.0.1,port=6383,state=online,offset=532,lag=1

master_repl_offset:532

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:531

127.0.0.1:6380> get hi

“hello”

127.0.0.1:6380>

我們發現,該slave的主是127.0.0.1:6379,并且還有一個Slave3【127.0.0.1:6383】,這都是符合我們預期的結果,最後擷取了hi這個key的值,結果發現已經通過過來了,一切正常。

登入slave2并檢視主從資訊和設定的key

[[email protected] ~]# redis-cli -p 6381

127.0.0.1:6381> info replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:9

master_sync_in_progress:0

slave_repl_offset:812

slave_priority:100

slave_read_only:1

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

127.0.0.1:6381> get hi

“hello”

127.0.0.1:6381>

登入slave3并檢視主從資訊和設定的key

[[email protected] ~]# redis-cli -p 6383

127.0.0.1:6383> info replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6380

master_link_status:up

master_last_io_seconds_ago:10

master_sync_in_progress:0

slave_repl_offset:924

slave_priority:100

slave_read_only:1

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

127.0.0.1:6383> get hi

“hello”

127.0.0.1:6383>

我們發現,key為hi的鍵值對也同步過來了,并且slave3的主是【127.0.0.1:6380】,即slave1。

主從切換、調整

在上一小節中我們實作了主從結構的部署,現實中我們可能會遇到某個主伺服器或是從伺服器當機的情況,可能需要手動切換主從伺服器,那麼我們可以使用簡單的slaveof指令來實作主從關系的維護。

slaveof no one: 該指令表示,斷開和主的關系,自己成為master

slaveof [ip] [port]: 表示把自己設定成 ip:port 的從Redis

模拟slave1當機,将slave3的主設定為slave2

[[email protected] ~]# redis-cli -p 6380 shutdown # 模拟slave1當機

[[email protected] ~]# redis-cli -p 6383

127.0.0.1:6383> info Replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6380

master_link_status:down # slave1 已經當機了

127.0.0.1:6383> slaveof 127.0.0.1 6381 # 重新設定slave2為自己的主

OK

127.0.0.1:6383> info Replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6381

master_link_status:up

上面的操作過程主要是,關閉slave1,然後将slave2作為slave3的master,可以看到我們成功進行了切換。

模拟slave2當機,slave3更新為獨立master

[[email protected] ~]# redis-cli -p 6381 shutdown # 模拟slave2當機

[[email protected] ~]# redis-cli -p 6383

127.0.0.1:6383> info Replication

#

Replication

role:slave

master_host:127.0.0.1

master_port:6381

master_link_status:down # slave2 也當機了

master_last_io_seconds_ago:-1

127.0.0.1:6383> slaveof no one

OK

127.0.0.1:6383> info Replication

·#· Replication

role:master # 更新成為了master

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

127.0.0.1:6383>

本節完~

繼續閱讀