redis主從簡單安裝
1·從redis官網(wǎng)下載redis-4.0.14.tag.gz
2.然后解壓重斑,并進入
3.進入后先安裝
tar xzf redis--4.0.14.tar.gz
cd redis--4.0.14
make && make install
我們只有一臺服務器慎框,要配置主從結構膜毁,必須啟動多實例,我們啟動配置三個redis實例,端口分別為7379张足,8379触创,9379。
7379為主服務器为牍,8379 和9379為從服務器哼绑。
執(zhí)行完 make && make install 會在/usr/local/bin 目錄下創(chuàng)建文件
我們將這些文件都移動到當前redis的bin目錄下
cd /redis/redis7379
mkdir bin
cd /redis/redis7379/bin
mv /usr/local/bin/* ./
配置redis.conf 端口為7379
port 7379 ##修改端口
bind 172.31.123.211 ##綁定本機Ip 使用ifconfig命令查看
loglevel debug;//修改日志級別
logfile /redis/redis7379/log/redis_7379.log ;//日志的文件路徑
pidfile /redis/redis7379/pid/redis_7379.pid ;//pid的文件路徑 pid安裝并沒有 需要收到創(chuàng)建,默認制定為/var/run/redis_7379.pid
slaveof 172.31.123.211 7379;//配置主服務器為7379
配置完畢之后 進入到bin目錄下
./redis-server ../redis.conf
ps -ef|grep redis 如果成功啟動則會出現(xiàn)下面這種情況
root 29405 1 0 10:51 ? 00:00:41 ./redis-server 172.31.123.211:7379
再次解壓一個redis 重命名為redis8379
配置redis.conf 端口為8379
port 8379 ##修改端口
bind 172.31.123.211 ##綁定本機Ip 使用ifconfig命令查看
loglevel debug;//修改日志級別
logfile /redis/redis7379/log/redis_8379.log ;//日志的文件路徑
pidfile /redis/redis7379/pid/redis_8379.pid ;//pid的文件路徑 pid安裝并沒有 需要收到創(chuàng)建碉咆,默認制定為/var/run/redis_8379.pid
slaveof 172.31.123.211 7379;//配置主服務器為7379
然后啟動./redis-server ../redis.conf
再次解壓一個redis 重命名為redis8379
配置redis.conf 端口為8379
port 8379 ##修改端口
bind 172.31.123.211 ##綁定本機Ip 使用ifconfig命令查看
loglevel debug;//修改日志級別
logfile /redis/redis8379/log/redis_8379.log ;//日志的文件路徑
pidfile /redis/redis8379/pid/redis_8379.pid ;//pid的文件路徑 pid安裝并沒有 需要收到創(chuàng)建抖韩,默認制定為/var/run/redis_8379.pid
slaveof 172.31.123.211 7379;//配置主服務器為7379
修改成功后調用./redis-cli -h 172.31.123.211 -p 7379 連接
[root@iZ8ykv3uxiy4adZ bin]# ./redis-cli -h 172.31.123.211 -p 7379
172.31.123.211:7379>
則表明連接成功。
使用info Replication 查看
role:master ;//表明為主庫
master_host:172.31.123.211
master_port:7379
master_link_status:up
然后在主庫設置值 從庫讀取值疫铜。是否會同步
哨兵模式配置
在redis 的目錄下有sentinel.conf文件 修改redis7379目錄下的文件
port 27379
sentinel monitor mymaster 172.31.123.211 7379 1
#設定5秒內沒有響應茂浮,說明服務器掛了
sentinel down-after-milliseconds mymaster 5000
#設定15秒內master沒有活起來,就重新選舉主
sentinel failover-timeout mymaster 15000
redis8389 和redis9379中的sentinel.conf配置文件是差不多的。
Redis主從采用異步復制席揽,那么當主節(jié)點掛掉時顽馋,從節(jié)點可能沒有收到全部的同步消息,這部分未同步的消息可能就丟失了幌羞,如果主從延時過大寸谜,那么丟的消息可能會更多,sentinel(哨兵)無法保證消息不丟失新翎,但是也可能保證消息少都是程帕,他提供兩個參數(shù)住练〉貑可以限制主從延時過大
min-slaves-to-write 1 #主節(jié)點必須至少有一個從節(jié)點在進行正常復制,否則就停止對外服務喪失可用性讲逛,
min-slaves-max-lag 10 #什么時候下是正常復制或者是異常復制亏吝,如果10s內沒有收到從節(jié)點的反饋,就意味著同步不正常了
Redis哨兵模式原理:
Redis Sentinel 是一個分布式系統(tǒng)盏混,可以在一個架構中運行多個 Sentinel 進程(progress)蔚鸥, 這些進程使用流言協(xié)議(gossip protocols)來 接收關于主服務器是否下線的信息, 并使用投票協(xié)議(agreement protocols)來決定是否執(zhí)行自動故 障遷移许赃, 以及選擇哪個從服務器作為新的主服務器止喷。
Redis Sentinel 的三個任務:
1.監(jiān)控:哨兵會不定期檢查主服務器和從服務器是否運作正常。
2.提醒:當被監(jiān)控的某個主服務器出現(xiàn)異常混聊,哨兵可以通過API向管理員發(fā)送通知弹谁。
3.故障遷移:當一個主服務器不能正常工作時,哨兵會進行自動故障遷移工作句喜,它會是一個從服務器變成主服務器预愤,當一個客戶端嘗試連接故障服務器的時候,它也會向新客戶端返回新的地址咳胃。
Sentinel.conf配置文件介紹:
1.sentinel monitor <master-name> <ip> <port> <quorum>
意思是讓哨兵做定期監(jiān)控 master-name 為哨兵的名稱 ip 和端口 quorum為當主服務器出現(xiàn)
2.sentinel down-after-milliseconds <master-name> <times>
每個哨兵節(jié)點會定期發(fā)送ping命令來判斷Redis節(jié)點和其余的哨兵節(jié)點是否是可達的 如果超過了配置的times 時間就會認為是不可達的植康。times為毫秒
3.sentinel parallel-syncs <master-name> <nums>
當主服務器故障時,每次從服務器向新的主服務器發(fā)的復制節(jié)點的個數(shù)
4.sentinel failover-timeout <master-name> <times>
當發(fā)送故障遷移時展懈,超過了配置的時間就會故障遷移失敗
5.sentinel notification-script <master-name> <script-path>
當redis發(fā)生故障時销睁,將會調用這個腳本 script-path為腳本路徑
哨兵的定時監(jiān)控
當啟動一個哨兵(Sentinel)時會發(fā)生一下情況:
1.每隔一秒每隔哨兵都會向其余的哨兵節(jié)點和主節(jié)點以及從節(jié)點,發(fā)送一次Ping命令存崖,做一次心跳檢測冻记。
2.每隔兩秒redis的哨兵將所有監(jiān)視的主丶從節(jié)點向指定頻道上發(fā)送當前的主節(jié)點信息。
3.每隔哨兵都會每隔10秒都會向主節(jié)點和從節(jié)點發(fā)送info命令金句,獲取最新的拓撲結構圖檩赢。
主觀下線:單個哨兵認為某個服務下線,sentinel配置文件中的down-after-milliseconds設置了判斷主觀下線的時間長度,如果超過了改時間贞瞒,那么該哨兵會認為該實例以及下線了偶房。
客觀下線:當主觀下線的節(jié)點是主節(jié)點時,該節(jié)點會根據(jù)sentinel is-masterdown-by-addr <quorum>命令哨兵會征求其他節(jié)點的哨兵的意見军浆,如果認為主觀下線的票數(shù)大于 quorum棕洋,此時哨兵節(jié)點就會認為該節(jié)點有問題,就會客觀下線了乒融。
哨兵主節(jié)點選取流程
如果主節(jié)點被判定為客觀下線后掰盘,就要選取一個從節(jié)點來當主節(jié)點。
1.每隔從節(jié)點都可能成為主節(jié)點赞季,當他確定主節(jié)點下線后愧捕,會向其他節(jié)點發(fā)送
is-master-down-by-addr 命令,來詢問是否可以將自己設置為主節(jié)點申钩,
2.當其它哨兵收到此命令時次绘,可以同意或者拒絕它成為領導者;
3.如果哨兵3發(fā)現(xiàn)自己在選舉的票數(shù)大于等于num(sentinels)/2+1時撒遣,將成為領導者邮偎,如果沒有超過,繼續(xù)選舉…………
自動故障轉移機制
sentinel狀態(tài)數(shù)據(jù)結構中保存了主服務的所有從服務信息义黎,領頭sentinel按照如下的規(guī)則從服務列表中挑選出新的主服務過濾掉主觀下線的節(jié)點
選擇slave-priority最高的節(jié)點禾进,如果由則返回沒有就繼續(xù)選擇
選擇出復制偏移量最大的系節(jié)點,因為復制便宜量越大則數(shù)據(jù)復制的越完整廉涕,如果由就返回了泻云,沒有就繼續(xù)
選擇run_id最小的節(jié)點