redis 主從復制實戰

1.準備好4臺機器

192.168.42.150 redis-node1 #主
192.168.42.151 redis-node2 #從 
192.168.42.152 redis-node3 #從
192.168.42.153 redis-node4 #從

將主機解析寫入hosts文件,分發至每臺機器

2.安裝redis,配置好基本配置

(1) 4臺機器,分別安裝redis

cd /usr/local/src
wget http://192.168.42.26/install_package/down/redis-3.2.3-1.el7.x86_64.rpm
yum install redis-3.2.3-1.el7.x86_64.rpm -y

(2) 4臺機分別配置好,配置文件,做好備份

cp /etc/redis.conf{,.back}
vim redis.conf
daemonize yes
bind 192.168.42.150  #改為各個節點的IP

(3) 依照上面設定的從主機,在從主機配置文件中開啟從配置(需要配置3臺機器)

# slaveof <masterip> <masterport>
slaveof  192.168.42.150 6379

(4) 啟動redis-server(4臺同時啟動)

redis-server /etc/redis.conf

(5) 在主機器上登錄redis

[root@redis-node1 ~]# redis-cli -h 192.168.42.150
192.168.42.150:6379> 
192.168.42.150:6379> keys *
1) "magedu"
192.168.42.150:6379> 
192.168.42.150:6379> set ok "verygood!!!"
OK
192.168.42.150:6379> get ok
"verygood!!!"
192.168.42.150:6379>

登錄其他3臺從服務器

redis-cli -h 192.168.42.151
redis-cli -h 192.168.42.152
redis-cli -h 192.168.42.153
拿153做示例:
[root@redis-node4 src]# redis-cli -h 192.168.42.153
192.168.42.153:6379> keys *
1) "magedu"
192.168.42.153:6379> 
192.168.42.153:6379> get ok
"verygood!!!"
192.168.42.153:6379>

至此為至redis主/從已經實現,在主節點上查看信息

192.168.42.150:6379> INFO Replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.42.151,port=6379,state=online,offset=22806,lag=1
slave1:ip=192.168.42.152,port=6379,state=online,offset=22806,lag=1
slave2:ip=192.168.42.153,port=6379,state=online,offset=22806,lag=1
master_repl_offset:22806
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:22805

接下來在四個結點上配置sentinel,實現故障轉移。此處實現累似于MariaDB的MHA 在上面我們已經配置好主從復制集群,現在我們需要添加一臺機器[192.168.42.154]來做高可用 同樣我們需要設置好,IP,主機名,下載安裝redis

192.168.42.154 redis-sentinel  #將主機解析追加至其他的4臺的hosts文件中,本機也需要一份
cd /usr/local/src
wget http://192.168.42.26/install_package/down/redis-3.2.3-1.el7.x86_64.rpm
yum install redis-3.2.3-1.el7.x86_64.rpm -y

(1)配置sentinel

# sentinel monitor <master-name> <ip> <redis-port> <quorum> #法定人數
cp /etc/redis-sentinel.conf{,.back}
vim /etc/redis-sentinel.conf

daemonize yes
sentinel monitor mymaster 192.168.42.150 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster centos.123 #這是認證選項,我們這里的主節點并沒有開啟認證

(2)啟動sentinel

redis-sentinel /etc/redis-sentinel.conf

查看端口是否已經啟動

[root@redis-sentinel src]# ss -tnl
State      Recv-Q Send-Q  Local Address:Port                 Peer Address:Port              
LISTEN     0      128                 *:22                              *:*                  
LISTEN     0      100         127.0.0.1:25                              *:*                  
LISTEN     0      511                 *:26379                           *:*                  
LISTEN     0      128                :::22                             :::*                  
LISTEN     0      100               ::1:25                             :::*                  
LISTEN     0      511                :::26379                          :::*

(3)模擬故障:

192.168.42.150:6379
pkill redis
#查看
[root@redis-node1 ~]# ss -tnl
State      Recv-Q Send-Q                             Local Address:Port                                            Peer Address:Port              
LISTEN     0      128                                            *:22                                                         *:*                  
LISTEN     0      100                                    127.0.0.1:25                                                         *:*                  
LISTEN     0      128                                           :::22                                                        :::*                  
LISTEN     0      100                                          ::1:25

(4)查看故障是否轉移

登錄192.168.42.151:6379 #巧了,恰好151變成主了
192.168.42.151:6379> 
192.168.42.151:6379> INFO Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.42.153,port=6379,state=online,offset=5413,lag=1
slave1:ip=192.168.42.152,port=6379,state=online,offset=5413,lag=2
master_repl_offset:5413
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:5412
192.168.42.151:6379> 

登錄192.168.42.152:6379查看,的確是151變成主了
192.168.42.152:6379> INFO Replication
# Replication
role:slave
master_host:192.168.42.151
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:11402
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
192.168.42.152:6379>

(4)我們再把151的進程殺了,再來看一次,可以看到只有一主一從了

192.168.42.152:6379> INFO Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.42.153,port=6379,state=online,offset=1625,lag=1
master_repl_offset:1768
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1767
192.168.42.152:6379>

(5)最后我們將殺死的兩臺redis恢復,再來查看

192.168.42.152:6379> INFO Replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.42.153,port=6379,state=online,offset=12763,lag=1
slave1:ip=192.168.42.151,port=6379,state=online,offset=12763,lag=1
slave2:ip=192.168.42.150,port=6379,state=online,offset=12763,lag=0
master_repl_offset:12763
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:12762
192.168.42.152:6379> 

可以看出此時的1主3從又回來了,不過此時主節點,是152

回到150,和151的節點查看效果
192.168.42.150:6379> INFO Replication
# Replication
role:slave
master_host:192.168.42.152
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:23555
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
192.168.42.150:6379> 



192.168.42.151:6379> INFO Replication
# Replication
role:slave
master_host:192.168.42.152
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:20782
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

接下來我們配置有密碼認證的主從和高可用

我們之前在配置sentinel,時還記得 #法定人數嗎,判斷為失效至少需要2個 Sentinel進程的同意,只要同意Sentinel的數量不達標,自動failover就不會執行

sentinel monitor #法定人數

我們現在將154這臺干脆也做成redis的從服務器,而sentinel,是這5臺的集合(150,151,152,153,154)

(1).將153的配置文件推到154一份

scp /etc/redis.conf{,.back} root@192.168.42.154:/etc/
 到154這邊稍微修改一下
 vim /etc/redis.conf
 bind 192.168.42.154

因此這次我們是要做密碼認證的,因此5臺機器都需要加上密碼

(2).我們現在查看之前做了 sentinel后,配置文件系統自動幫我們改了,現在我們要恢復到初始狀態,重新來過

所有的配置文件還需要設置我們的密碼(為了方便管理,我們這里統一設置成magedu) requirepass magedu

所有從節點加上

#masterauth <master-password>
masterauth magedu
slaveof 192.168.42.150 6379

(3).密碼設置好之后,啟動所有服務

redis-server /etc/redis.conf
ss -tnl

登錄150,需要認證了

[root@redis-node1 ~]# redis-cli -h 192.168.42.150
192.168.42.150:6379> keys *
(error) NOAUTH Authentication required.

[root@redis-node1 ~]# redis-cli -h 192.168.42.150
192.168.42.150:6379> keys *
(error) NOAUTH Authentication required.
192.168.42.150:6379> keys *
(error) NOAUTH Authentication required.
192.168.42.150:6379> AUTH magedu
OK

同樣的,我們需要登錄認證其他機器

再150機器上設置key
192.168.42.150:6379> set zlyc "zai lai yi ci"
OK
192.168.42.150:6379> get zlyc
"zai lai yi ci"
192.168.42.150:6379> 

其他機器讀取OK
192.168.42.151:6379> get zlyc
"zai lai yi ci"
192.168.42.151:6379>

原創文章,作者:srayban,如若轉載,請注明出處:http://www.www58058.com/81688

(0)
sraybansrayban
上一篇 2017-07-18 09:40
下一篇 2017-07-18 15:06

相關推薦

  • 如何將遷移home到獨立分區中

        背景(centos7中):         由于在剛開始學習linux時磁盤分配追求簡單,只是把一個磁盤簡單的分了3個分區。現在,因用戶數據增多、磁盤空間變少、當數據撐滿磁盤時,會導致系統崩潰。為防止此種情況的發生我必須把把根下的/home 目錄遷移出 來獨立分…

    2017-08-10
  • ThirdWeek_SecondDay

    Python學習筆記整理

    Linux干貨 2017-10-09
  • Linux發行版及哲學思想

    Linux各發行版以及哲學思想 什么是Linux 為什么會有不同的Linux發行版 現有主流發行版,及其他們之間相互關系 Linux所遵循的哲學思想 什么是Linux Linux是一種自由和開放源代碼的Unix-like操作系統,由當時就讀于芬蘭赫爾辛基大學的Linus Torvalds于1991年10月5日首次發布于互聯網。Linux遵循第二版GNU通用公…

    Linux干貨 2016-10-29
  • 系統之鍬sysdig:Linux服務器監控和排障利器

    當你需要追蹤某個進程產生和接收的系統調用時,首先浮現在你腦海中的是什么?你可能會想到strace,那么你是對的。你會使用什么樣的命令行工具來監控原始網絡通信呢?如果你想到了tcpdump,你又作出了一個極佳的選擇。而如果你碰到必須追蹤打開的文件(在Unix意義上:一切皆文件)的需求,可能你會使用lsof。 strace、tcpdump以及lsof,確實是些偉…

    Linux干貨 2015-02-09
  • 馬哥教育網絡班22期+第5周課程練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@rhel677850 ~]# grep "^\(root\|fedora\|user1\)" /etc/passwd|awk -F: '{print $1,$7}&#039…

    Linux干貨 2016-09-26
  • 如何安裝VMware Workstation

    1、打開安裝包,直接點擊“下一步” 2、選擇接受條款,單擊“下一步” 3、選擇安裝路徑,單擊“下一步” 4、單擊“下一步”,也可以勾選掉兩個選項   5、單擊“下一步”   6、點擊“安裝”   7、完成安裝  

    2017-07-11

評論列表(1條)

  • PowerMichael
    PowerMichael 2017-07-30 21:11

    這里有個坑,CentOS7 daemonize 由systemd托管了,所以這里不應該設置為yes,不然一退出終端,redis進程就GG了。

欧美性久久久久