Redis 哨兵安裝-Centos
Redis官網
Redis中文網
Redis 命令參考
由于機器有限,所以接下來的教程都是在一臺虛擬機中進行部署安裝.
Redis哨兵高可用架構
sentinel哨兵是特殊的redis服務,不提供讀寫服務,主要用來監控redis實例節點。哨兵架構下client端第一次從哨兵找出redis的主節點,后續就直接訪問redis的主節點,不會每次都通過sentinel代理訪問redis的主節點,當redis的主節點發生變化,哨兵會第一時間感知到,并且將新的redis主節點通知給client端(這里面redis的client端一般都實現了訂閱功能,訂閱sentinel發布的節點變動消息)
搭建主從
參考上篇 Redis 主從安裝-Centos文章,先搭建Redis主從
搭建哨兵
因為電腦配置有限,我這里使用一臺服務器,分三個端口進行演示,由于是演示就不配置額外的參數。
其中6379 端口作為默認主節點,6380和6381端口作為slave節點。
創建Sentinel 端口號26379
創建目錄和配置文件
$
mkdir -p /usr/local/sentinel/26379
$
vim /usr/local/sentinel/26379/sentinel.conf
編輯sentinel.conf內容如下
# 端口
port 26379
# 是否后臺運行
daemonize yes
# 禁止保護模式
protected-mode no
pidfile /usr/local/sentinel/26379/sentinel.pid
# 配置目錄
dir "/usr/local/sentinel/26379"
# 配置監聽的主服務器,這里sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,host代表監控的主服務器(需要使用真實ip,不然客戶端在連接時會連接本地),6379代表端口,2代表只有兩個或兩個以上的哨兵認為主服務器不可用的時候,才會進行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
sentinel auth-pass mymaster soft01
創建Sentinel 端口號26380
創建目錄和配置文件
$
mkdir -p /usr/local/sentinel/26380
$
vim /usr/local/sentinel/26380/sentinel.conf
編輯sentinel.conf內容如下
# 端口
port 26380
# 是否后臺運行
daemonize yes
# 禁止保護模式
protected-mode no
pidfile /usr/local/sentinel/26380/sentinel.pid
# 配置目錄
dir "/usr/local/sentinel/26380"
# 配置監聽的主服務器,這里sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,host代表監控的主服務器(需要使用真實ip,不然客戶端在連接時會連接本地),6379代表端口,2代表只有兩個或兩個以上的哨兵認為主服務器不可用的時候,才會進行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
sentinel auth-pass mymaster soft01
創建Sentinel 端口號26381
創建目錄和配置文件
$
mkdir -p /usr/local/sentinel/26381
$
vim /usr/local/sentinel/26381/sentinel.conf
編輯sentinel.conf內容如下
# 端口
port 26381
# 是否后臺運行
daemonize yes
# 禁止保護模式
protected-mode no
pidfile /usr/local/sentinel/26381/sentinel.pid
# 配置目錄
dir "/usr/local/sentinel/26381"
# 配置監聽的主服務器,這里sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,host代表監控的主服務器(需要使用真實ip,不然客戶端在連接時會連接本地),6379代表端口,2代表只有兩個或兩個以上的哨兵認為主服務器不可用的時候,才會進行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
sentinel auth-pass mymaster soft01
啟動Sentinel
先啟動redis主從(下面是我搭建的主從)
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6379/redis.conf
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6380/redis.conf
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6381/redis.conf$
ps -ef
| grep redis
root
9673 1 0 00:23 ? 00:00:06 /usr/local/redis/bin/redis-server *:6379
root
30195 1 0 10月18 ? 00:00:08 /usr/local/redis/bin/redis-server *:6380
root
130775 1 0 00:21 ? 00:00:06 /usr/local/redis/bin/redis-server *:6381
分別啟動哨兵
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26379/sentinel.conf
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26380/sentinel.conf
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26381/sentinel.conf$
ps -ef
| grep sentinel
root
116864 1 0 01:30 ? 00:00:00 /usr/local/redis/bin/redis-sentinel *:26379
[sentinel
]
root
119538 1 0 01:30 ? 00:00:00 /usr/local/redis/bin/redis-sentinel *:26380
[sentinel
]
root
119765 1 0 01:31 ? 00:00:00 /usr/local/redis/bin/redis-sentinel *:26381
[sentinel
]
啟動sentinel的方式:
$ ./redis-sentinel sentinel.conf
$ ./redis-server sentinel.conf --sentinel
查看Redis信息
查看redis服務的信息:
$ /usr/local/redis/bin/redis-cli -p
6379 -a soft01
127.0.0.1:637
9> info
role:master
connected_slaves:2
slave0:ip
=192.168.0.138,port
=6380,state
=online,offset
=219732,lag
=1
slave1:ip
=192.168.0.138,port
=6381,state
=online,offset
=219873,lag
=0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:219873
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:219873$ /usr/local/redis/bin/redis-cli -p
6380 -a soft01
127.0.0.1:638
0> info
role:slave
master_host:192.168.0.138
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:227684
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:227684
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:227684$ /usr/local/redis/bin/redis-cli -p
6381 -a soft01
127.0.0.1:638
1> info
role:slave
master_host:192.168.0.138
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:236482
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:236482
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:236482
查看哨兵配置文件變更信息:
$
less /usr/local/sentinel/26379/sentinel.conf
sentinel myid 511958e1eac946e44dfb00a4a97764137839d8b2
sentinel deny-scripts-reconfig
yes
sentinel monitor mymaster
192.168.0.138
6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster
0
sentinel leader-epoch mymaster
0
sentinel known-replica mymaster
192.168.0.138
6381
sentinel known-replica mymaster
192.168.0.138
6380
sentinel known-sentinel mymaster
192.168.0.138
26380 e2dbf2594ddbef6088001be07f4a9651c18260a6
sentinel known-sentinel mymaster
192.168.0.138
26381 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e
sentinel current-epoch
0$
less /usr/local/sentinel/26380/sentinel.conf
sentinel myid e2dbf2594ddbef6088001be07f4a9651c18260a6
sentinel deny-scripts-reconfig
yes
sentinel monitor mymaster
192.168.0.138
6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster
0
sentinel leader-epoch mymaster
0
sentinel known-replica mymaster
192.168.0.138
6381
sentinel known-replica mymaster
192.168.0.138
6380
sentinel known-sentinel mymaster
192.168.0.138
26381 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e
sentinel known-sentinel mymaster
192.168.0.138
26379 511958e1eac946e44dfb00a4a97764137839d8b2
sentinel current-epoch
0$
less /usr/local/sentinel/26381/sentinel.conf
sentinel myid 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e
sentinel deny-scripts-reconfig
yes
sentinel monitor mymaster
192.168.0.138
6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster
0
sentinel leader-epoch mymaster
0
sentinel known-replica mymaster
192.168.0.138
6380
sentinel known-replica mymaster
192.168.0.138
6381
sentinel known-sentinel mymaster
192.168.0.138
26380 e2dbf2594ddbef6088001be07f4a9651c18260a6
sentinel known-sentinel mymaster
192.168.0.138
26379 511958e1eac946e44dfb00a4a97764137839d8b2
sentinel current-epoch
0
由此可知,6379是Redis的主節點,6380和6381是從節點。
主節點故障測試
kill主節點
$
kill -9
9673
正常啟動主從和哨兵后,根據配置文件我們知道,6379端口號對應的redis是主節點,我們現在將主節點殺掉。
查看redis服務信息
首先查看sentinel(26379、26380、26381)配置文件,發現它們都修改了監控主節點的配置信息:
# 改之前
sentinel monitor mymaster 192.168.0.138 6379 2
# 改之后
sentinel monitor mymaster 192.168.0.138 6380 2
等sentinel選舉完成后,查看redis服務信息,發現6380變為了新的主節點,6381變為6380的從節點。
$ /usr/local/redis/bin/redis-cli -p
6380 -a soft01
127.0.0.1:638
0> info
role:master
connected_slaves:1
slave0:ip
=192.168.0.138,port
=6381,state
=online,offset
=319536,lag
=1
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:319677
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:319677$ /usr/local/redis/bin/redis-cli -p
6381 -a soft01
127.0.0.1:638
1> info
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:323935
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:323935
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:323935
最后查看各個redis.conf的變化
- /usr/local/master-slave/6379/redis.conf未變化,因為服務停止了
- /usr/local/master-slave/6380/redis.conf 去掉了 replicaof 配置,因為它已經成為新的主節點了。
- /usr/local/master-slave/6381/redis.conf內將replicaof 192.168.0.138 6379修改成replicaof 192.168.0.138 6380,指向了新的主節點。
恢復6379服務
啟動6379
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6379/redis.conf
查看/usr/local/master-slave/6379/redis.conf文件新增了replicaof 192.168.0.138 6380,自動轉為6380的從節點。查看redis服務信息,6380主節點,6379和6381都是它的從節點
$ /usr/local/redis/bin/redis-cli -p
6379 -a soft01
127.0.0.1:637
9> info
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:568652
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:568652
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:544774
repl_backlog_histlen:23879$ /usr/local/redis/bin/redis-cli -p
6380 -a soft01
127.0.0.1:638
0> info
role:master
connected_slaves:2
slave0:ip
=192.168.0.138,port
=6381,state
=online,offset
=580566,lag
=1
slave1:ip
=192.168.0.138,port
=6379,state
=online,offset
=580566,lag
=1
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:580989
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:580989$ /usr/local/redis/bin/redis-cli -p
6381 -a soft01
127.0.0.1:638
1> info
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:587094
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:587094
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:587094
這樣就完成了故障轉移。
總結
當主節點宕機后,sentinel會在slave中選舉一個變成新的master,將其他節點指向新的主節點(解決了主從模式不能自動恢復的問題)。
但是在主節點異常,哨兵進行選舉時,會出現Redis短暫的不可以用。
總結
以上是生活随笔為你收集整理的Redis 哨兵安装-Centos的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。