溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis yum安裝配置 redis主從

發(fā)布時間:2020-07-16 13:30:48 來源:網(wǎng)絡 閱讀:240 作者:wx5a98a78793203 欄目:系統(tǒng)運維

1.安裝

yum install epel-release.noarch -y
yum install redis -y

2.配置主從

主:
vim /etc/redis.conf #修改配置文件
bind 10.1.1.111 #修改監(jiān)聽IP
requirepass 233233 #添加密碼
masterauth 233233
#為什么要添加認證密碼,假如主掛了,再次上線。此時主就變成從了,它需要認證其它服務器,其它服務器有密碼會無法通過認證,所以預先設置好。

slave-priority 50 #增大選舉權,保證主的掛了,再次線切換時候有足夠權限拿到master

從:
vim /etc/redis.conf #修改配置文件
bind 10.1.1.112 #修改監(jiān)聽IP
requirepass 233233
#從 也要設置和主一樣密碼,假如主掛了,112提升為主,113認證的還是111的密碼,這樣112和113兩臺機器就無法連接。

slaveof 10.1.1.111 6379 #指定主的ip和端口
masterauth 233233 # 指定主的密碼
另一臺從也這個配置


systemctl start redis  #同時啟動三臺主機
redis-cli -h 10.1.1.111 -a 233233 #登陸主服務器
10.1.1.111:6379> INFO replication  #查看主從信息
#Replication
role:master
connected_slaves:2
slave0:ip=10.1.1.112,port=6379,state=online,offset=1135,lag=0
slave1:ip=10.1.1.113,port=6379,state=online,offset=1135,lag=1
master_repl_offset:1135
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1134
10.1.1.111:6379> 

在主服務器創(chuàng)建一個鍵值

11.10.1.1.111:6379> set ID 001
OK
10.1.1.111:6379> get ID
"001"
10.1.1.111:6379> 

切換到從服務器查看

[root@cs112 ~]# redis-cli  -h 10.1.1.112 -a 233233  #登陸112服務器
10.1.1.112:6379> get ID   #查看ID鍵值
"001"
10.1.1.112:6379> 

命令配置主從 (命令配置會自動同步到配置文件)
[root@web1 ~]# redis-cli -h 10.1.1.233

10.1.1.233:6379> slaveof 10.1.1.111 6379
OK  
10.1.1.233:6379> config set masterauth 233233 
OK
10.1.1.233:6379> 

登陸到主服務器查看主從

10.1.1.111:6379> INFO replication
# Replication
role:master
connected_slaves:3
slave0:ip=10.1.1.112,port=6379,state=online,offset=2602,lag=1
slave1:ip=10.1.1.113,port=6379,state=online,offset=2602,lag=1
slave2:ip=10.1.1.233,port=6379,state=online,offset=2602,lag=1
master_repl_offset:2602
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:2

#可以看到,這邊從服務器已經(jīng)有三個了,

redis主從復制相關配置

下面是redis主從復制場景的一些可調(diào)參數(shù),需要根據(jù)實際環(huán)境調(diào)整

slave-serve-stale-data yes : 是否可以把不新鮮的數(shù)據(jù)服務與客戶端
slave-read-only yes : 從節(jié)點只讀,啟用slaveof定義后才生效
repl-diskless-sync no :是否同時向多個從節(jié)點同時發(fā)數(shù)據(jù)
repl-diskless-sync-delay 5 :發(fā)送的延遲時間
repl-ping-slave-period 10 探測從節(jié)點狀態(tài)
repl-timeout 60 探測節(jié)點超時時間
repl-disable-tcp-nodelay no : 啟用nodelay
repl-backlog-size 1mb
slave-priority 100 : 從節(jié)點優(yōu)先級,復制集群中,主節(jié)點故障時,sentinel應用場景中的主節(jié)點選舉時使用的優(yōu)先級;數(shù)字越小優(yōu)先級越高,但0表示不參與選舉;
min-slaves-to-write 3:主節(jié)點僅允許其能夠通信的從節(jié)點數(shù)量大于等于此處的值時接受寫操作;
min-slaves-max-lag 10:從節(jié)點延遲時長超出此處指定的時長時,主節(jié)點會拒絕寫入操作;

3.高可用

先找一臺從服務器把優(yōu)先級調(diào)高

vim /etc/redis.conf #修改112配置,控制選舉
slave-priority 90   #調(diào)到90,默認100,越小權限越大,0不參與選舉
systemctl restart redis  #重啟一下

找三臺服務器 配置sentinel服務

 vim /etc/redis-sentinel.conf
 bind 10.1.1.112  #監(jiān)聽IP,建議不要用0.0.0.0 會出錯
 sentinel monitor mymaster 10.1.1.111 6379 2 #設置主服務器ip
 sentinel auth-pass mymaster 233233            #主服務器的認證
 #其他兩臺除了IP不一樣其他 一樣配置

配置好了 啟動sentinel

如何查看sentinel是否已經(jīng)正常運行
vim /etc/redis-sentinel.conf #打開sentinel的配置文件
redis yum安裝配置  redis主從
#查看最后幾行,sentinel正常運行的話,能獲取的到局域網(wǎng)其他redis主機信息,其他sentinel主機信息,如圖。

測試
先將主服務器的redis的服務給停掉
redis-cli -h 10.1.112 -p 26379 #登陸sentinel服務

 10.1.1.112:26379>  SENTINEL masters #查看主服務器狀態(tài)
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "10.1.1.113"
    5) "port"
    6) "6379"
    7) "runid"
    8) "7ee5fe0e808bd06638f0f4c365d95c7694c6770c"
    9) "flags"
   10) "master"

上面我們已經(jīng)能看到主的已經(jīng)轉(zhuǎn)移到113主機了,打開其他從服務器配置可以發(fā)現(xiàn),配置文件里指向10.1.1.111為主的已經(jīng)被改成了113了。

redis-cli -h 10.1.1.112 -a 233233 #登錄112的從服務器

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.1.1.113
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1253
slave_priority:70
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

#上面可以看到從 從服務器112 主已經(jīng)變成了113服務器了

#總結(jié),主服務器掛了再次上線的的角色就變成slave了,除非再次觸發(fā)選舉,而且權限要比其他機器權限大。

一個查看sentinel命令
[root@cs11 ~]# redis-cli -h 192.168.0.11 -a 233233 -p 26379 info |tail -1
#登錄到26379端口(這個端口就是默認sentinel運行的端口),運行info命令,取最后一行
master0:name=mymaster,status=ok,address=192.168.0.14:6379,slaves=2,sentinels=3
#表示master是192.168.0.14 有2個從,3個哨兵

配置文件解釋

sentinel monitor mymaster 192.168.0.11 6379 2 
#192.168.0.11是master redis的IP地址和端口,2是代表2個sentinel(哨兵)檢測到異常,才判斷是real fail. Mymaster主機組的名稱可以隨便定義

sentinel auth-pass mymaster 233233
 #當redis訪問都需要密碼的時候,即在redis.conf有配置requirepass項的時候,需要定義此項

sentinel down-after-milliseconds mymaster 30000 
#指定sentinel監(jiān)控到redis實例持續(xù)異常多長時間后,會判決其狀態(tài)為down。若實際業(yè)務需要sentinel盡快判決出redis實例異常,則可適當配小,單位是毫秒

sentinel can-failover mymaster yes
 #在sentinel檢測到O_DOWN后,是否對這臺redis啟動failover機制

 sentinel parallel-syncs mymaster 1 
 #執(zhí)行故障轉(zhuǎn)移時,最多可以有多少個從服務器同時對新的主服務器進行同步,這個數(shù)字越小,完成故障轉(zhuǎn)移所需的時間就越長,但越大就意味著越多的從服務器因為復制而不可用??梢酝ㄟ^將這個值設為 1 來保證每次只有一個從服務器處于不能處理命令請求的狀態(tài)。

 failover-timeout mymaster900000 
 #若sentinel在該配置值內(nèi)未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗

 sentinel notification-script mymaster1  /root/通知.sh
 #當sentinel觸發(fā)時,切換主從狀態(tài)時,需要執(zhí)行的腳本。當主down的時候可以通知當事人

4.集群的搭建

這里我們要用一臺機器模擬9個主機,每個redis端口不一樣,真實環(huán)境,ip不一樣而已,
mkdir /date/700{1,2,3,4,5,6,7,8,9} -p # 創(chuàng)建9個文件夾存放配置log等
vim redis.conf #先修改一個模板,把配置文件cp一份改成下面的一樣

    port 6379
    bind 127.0.0.1
    daemonize yes 
    #redis后臺運行
    cluster-enabled yes
    #開啟集群
    cluster-config-file nodes_6379.conf
    #集群的配置,配置文件首次啟動自動生成
    cluster-node-timeout 8000
    #請求超時,默認15秒,可自行設置
    appendonly yes
    #開啟aof持久化模式,每次寫操作請求都追加到appendonly.aof文件中
    logfile "/data/6379/redis.log"
    #日志路徑
    pidfile /var/run/redis_6379.pid 
    #pid路徑

#端口還是用6379應為這個改的模板,等會后面用sed 批量修改
for((i=1;i<=9;i++));do cp redis.conf /date/700$i/redis.conf ; sed -i "s/6379/700$i/" /date/700$i/redis.conf;done
#批量復制配置文件到各個文件夾,在修改6379 端口號 。
for((i=1;i<=9;i++));do redis-server /date/700$i/redis.conf;done
#批量啟動

ps -ef |grep redis #查看下服務有沒有起來
redis yum安裝配置  redis主從

./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 127.0.0.1:7009 --cluster-replicas 1
#創(chuàng)建集群的命令 --replicas 1表示為集群的master節(jié)點創(chuàng)建1個slave。那么9個實例里,有4master,有5是slave。
--replicas 0不為集群的master節(jié)點創(chuàng)建slave。
redis yum安裝配置  redis主從
#如圖,集群被成功創(chuàng)建,1 2 3 4 被設置了成master ,其他均為slave

./redis-cli -p 7001 -c #登陸到集群里
redis yum安裝配置  redis主從
#上圖,我登陸進去了創(chuàng)建一個鍵值 cs1 ,該鍵值以一創(chuàng)建就被分配到7004端口分片上,后面我無論登陸那個端口,只要我get cs1 都會被重定向到7004端口上
redis yum安裝配置  redis主從
#我又創(chuàng)建一個cs2 ,該鍵值被分配到了7001端口,無論那個端口訪問cs2,都會被重定向到7001,就是redis的分片機制

常見集群命令

redis yum安裝配置  redis主從

127.0.0.1:7004> cluster info #查看集群狀態(tài)信息
redis yum安裝配置  redis主從

新增集群一個主節(jié)點

redis yum安裝配置  redis主從
#按照之前的方法,在復制兩份配置文件,啟動兩個redis 端口為7010 7011
./redis-cli --cluster add-node 127.0.0.1:7010 127.0.0.1:7001
#新增節(jié)點命令 前面?zhèn)€地址是需要添加的地址,后面那個是任意已經(jīng)在集群的節(jié)點
redis yum安裝配置  redis主從
./redis-cli -c -p 7001 cluster nodes #查看集群節(jié)點
redis yum安裝配置  redis主從
#如圖添加成功,但是新增的節(jié)點不會有任何數(shù)據(jù),因為他沒有分配任何槽需要為新節(jié)點手動分配槽
./redis-cli --cluster reshard 127.0.0.1:7010
redis yum安裝配置  redis主從
./redis-cli -c -p 7001 cluster nodes #在看下節(jié)點信息
redis yum安裝配置  redis主從
#此時7010端口已經(jīng)有槽了,里已經(jīng)存了 2000/16384的數(shù)據(jù)了,如果壞了這部數(shù)據(jù)就會丟失了,所以我們給它加個從節(jié)點冗余

新增從節(jié)點

./redis-cli --cluster add-node 127.0.0.1:7011 127.0.0.1:7001
#依然是這個命令,增加了一個7011端口的節(jié)點
./redis-cli -c -p 7001 cluster nodes #在用查看節(jié)點的命令看一下
redis yum安裝配置  redis主從
#上圖能看見7011端口依然上線,角色是master 沒有槽,我們要給他轉(zhuǎn)變成slave角色

./redis-cli -c -p 7011
127.0.0.1:7011>  cluster replicate d7ff265c7293735c5bbf9c5ef34d2bc54fe1a3ea

./redis-cli -c -p 7001 cluster nodes #在用查看節(jié)點的命令看一下
redis yum安裝配置  redis主從
#再用查看節(jié)點的命令看一下,可以發(fā)現(xiàn)7011已經(jīng)變成了slave 狀態(tài),且后面跟著7010的ID號,表示7011是7010的slave。

添加可能出現(xiàn)的報錯及解決辦法
redis yum安裝配置  redis主從
redis yum安裝配置  redis主從

刪除主節(jié)點

由于主節(jié)點上有槽刪了會丟失數(shù)據(jù),所以我們要先移動槽到其他主節(jié)點上去
./redis-cli --cluster reshard 127.0.0.1:7001 #啟動程序分槽

How many slots do you want to move (from 1 to 16384)? 2000
#您要移動多少個插槽(從1到16384)?
What is the receiving node ID? 4ef4f52ddff10e66eff50f40d765bb390ab935dd
接收節(jié)點ID是什么? 4ef4f52ddff10e66eff50f40d765bb390ab935dd
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
    #請輸入所有源節(jié)點ID。
?? #鍵入“ all”以將所有節(jié)點用作哈希槽的源節(jié)點。(抽取所有master的槽均攤2000)
?? #輸入所有源節(jié)點ID后,鍵入“ done”。              (只抽取一個ID的槽,這里我們要把7003的槽移空)
Source node #1: dfe430fa679ef9a38aa5e072df4c957b3ed9a92d
#源節(jié)點1:dfe430fa679ef9a38aa5e072df4c957b3ed9a92d
Source node #2: done
#源節(jié)點2:已完成

Ready to move 2000 slots.
#準備移動2000個插槽。
    Source nodes:
        #源節(jié)點:
    M: dfe430fa679ef9a38aa5e072df4c957b3ed9a92d 127.0.0.1:7003
       slots: (0 slots) master 
             #移動完成后,還有多少槽
  Destination node:
    #目標節(jié)點
    M: 4ef4f52ddff10e66eff50f40d765bb390ab935dd 127.0.0.1:7002
       slots:[0-3115],[5782-8857],[10181-11698],[12181-12953] (8483 slots) master
             #移動完成后,還有多少槽
       4 additional replica(s)
            # 4個其他副本
  Resharding plan:
    #分片計劃:
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#您是否要繼續(xù)執(zhí)行建議的分片計劃(是/否)? 是

redis yum安裝配置  redis主從
#一點要用cluster nodes 命令確保要刪除的主節(jié)點沒槽了,才能執(zhí)行下面的刪除操作

./redis-cli --cluster del-node 127.0.0.1:7003 dfe430fa679ef9a38aa5e072df4c957b3ed9a92d
#刪除7003節(jié)點,要輸入ip+端口+ID
redis yum安裝配置  redis主從

刪除從節(jié)點

刪除從節(jié)點7009
./redis-cli --cluster del-node 127.0.0.1:7009 088ace239a35fbbbb8f7fe68618331383c762c6b
#由于7009節(jié)點只是從節(jié)點,沒有槽,所以直接刪除即可
redis yum安裝配置  redis主從
#用cluster nodes 查看,可以發(fā)現(xiàn)7003 和 7009 節(jié)點已經(jīng)被刪除了

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI