溫馨提示×

溫馨提示×

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

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

Redis-3.2主從復制與集群搭建

發(fā)布時間:2020-06-29 20:30:56 來源:網(wǎng)絡 閱讀:20326 作者:KaliArch 欄目:數(shù)據(jù)庫

一、Redis 主從搭建

1.下載并解壓

yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl 
wget  http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
cd redis-3.2.4
make 
cd src && make test && make install
mkdir /etc/redis
cp ../redis.conf /etc/redis/redis.conf

2.系統(tǒng)參數(shù)調優(yōu)

vim /etc/sysctl.conf
net.core.somaxconn = 20480  #最大隊列長度,應付突發(fā)的大并發(fā)連接請求,默認為128
net.ipv4.tcp_max_syn_backlog = 20480  #半連接隊列長度,此值受限于內存大小,默認為1024
vm.overcommit_memory = 1
0 表示檢查是否有足夠的內存可用,如果是,允許分配;如果內存不夠,拒絕該請求,并返回一個錯誤給應用程序。
1 允許分配超出物理內存加上交換內存的請求
2 內核總是返回true
sysctl -p  #加載生效參數(shù)

3.配置文件說明

3.1 后臺運行

daemonize yes

3.2 bind地址監(jiān)聽

默認bind的填寫的127.0.0.1這樣配置是只允許本地訪問
bind 0.0.0.0

3.3 日志配置

logfile "/var/log/redis.log"

3.4 服務啟動腳本

vim /etc/init.d/redis

# chkconfig: 2345 90 10
# description: service of redis for start and stop add by tomener
 
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
 
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/redis.conf"
AUTH="Passwd"
BIND_IP='0.0.0.0'
case "$1" in
        start)
                if [ -f $PIDFILE ]
                then
                       echo "$PIDFILE exists, process is already running or crashed."
                else
                       echo "Starting Redis server..."
                       $EXEC $CONF
                fi
                if [ "$?"="0" ]
                then
                       echo "Redis is running..."
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                       echo "$PIDFILE exists, process is not running."
                else
                       PID=$(cat $PIDFILE)
                       echo "Stopping..."
                       $REDIS_CLI -h $BIND_IP -a $AUTH -p $REDISPORT  SHUTDOWN
                       sleep 2
                       while [ -x $PIDFILE ]
                       do
                               echo "Waiting for Redis to shutdown..."
                               sleep 1
                       done
                       echo "Redis stopped"
                fi
                ;;
         restart|force-reload)
                ${0} stop
                ${0} start
                ;;
         *)
                echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                exit 1
esac
chkconfig redis on    #設置開機自啟動
service redis restart    #啟動服務

3.5 設置密碼

編輯配置文件/etc/redis/redis.conf,重啟生效

requirepass redispwd  
redis-cli -p 6379 -a redispwd            #連接數(shù)據(jù)庫需要-a參數(shù)輸入密碼

3.6 備份恢復

使用命令查看備份目錄,此目錄為服務啟動時候的目錄,恢復可以將文件存放到此目錄下,重啟啟動redis服務,既可完成rdb數(shù)恢復。

CONFIG GET dir           #查看備份目錄
save                 #執(zhí)行備份

Redis-3.2主從復制與集群搭建

4.Redis持久化

4.1 rdb方式

工作原理:

redis生成dump.rdb文件時,工作過程如下:

redis主進程fork一個子進程,fork出來的子進程將內存的數(shù)據(jù)集dump到臨時的RDB

當子進程對臨時的RDB文件寫入完畢,redis用新的RDB文件代替舊的RDB文件

默認配置如下:

save 900 1
save 300 10
save 60 10000

其意義:

1key更新值時每900秒保存一次數(shù)據(jù)到硬盤

10key更新值時每300秒保存一次到硬盤

10000key更新值時每60秒保存一次到硬盤

4.2 aof方式

aof本質是redis操作(寫操作)日志文件。aof默認是未開啟的,需要在配置文件中進行設置,在配置文件中將這一行改為appendonly yes就可以了。

工作原理:

AOF append only file

每當Redis執(zhí)行一個改變數(shù)據(jù)集的命令時,這個命令都會被追加到AOF文件的末尾。

redis重新啟動時,程序可以通過AOF文件恢復數(shù)據(jù)。

三種appedn方式:

appendfsync always
appendfsync everysec
appendfsync no

appendfsync always每次有新命令追加到 AOF 文件時就執(zhí)行一次 fsync :非常慢,也非常安全

appendfsync everysec每秒 fsync 一次:足夠快(和使用 RDB 持久化差不多),并且在故障時只會丟失 1 秒鐘的數(shù)據(jù)。

appendfsync no從不 fsync :將數(shù)據(jù)交給操作系統(tǒng)來處理。更快,也更不安全的選擇。

推薦(并且也是默認)的措施為每秒 fsync 一次, 這種 fsync 策略可以兼顧速度和安全性。

aof能夠保證數(shù)據(jù)的安全,但是在重啟時比較耗時,而且aof文件的體積比rdb文件大。

5.Redis主從復制

5.1 概述

Redisreplication機制允許slavemaster那里通過網(wǎng)絡傳輸拷貝到完整的數(shù)據(jù)備份。具有以下特點:

  • 異步復制,從2.8版本開始,slave能不時地從master那里獲取到數(shù)據(jù)。

  • 允許單個master配置多個slave,易橫向擴展

  • slave允許其它slave連接到自己。一個slave除了可以連接master外,它還可以連接其它的slave。形成一個圖狀的架構。

  • master在進行replication時是非阻塞的,這意味著在replication期間,master依然能夠處理客戶端的請求。

  • slavereplication期間也是非阻塞的,也可以接受來自客戶端的請求,但是它用的是之前的舊數(shù)據(jù)??梢酝ㄟ^配置來決定slave是否在進行replication時用舊數(shù)據(jù)響應客戶端的請求,如果配置為否,那么slave將會返回一個錯誤消息給客戶端。不過當新的數(shù)據(jù)接收完全后,必須將新數(shù)據(jù)與舊數(shù)據(jù)替換,即刪除舊數(shù)據(jù),在替換數(shù)據(jù)的這個時間窗口內,slave將會拒絕客戶端的請求和連接。

  • 一般使用replication來可以實現(xiàn)擴展性,例如說,可以將多個slave配置為只讀,或者是純粹的數(shù)據(jù)冗余備份。

  • 能夠通過replication來避免master每次持久化時都將整個數(shù)據(jù)集持久化到硬盤中。只需把master配置為不進行持久化操作(把配置文件中持久化相關的配置項注釋掉即可),然后連接上一個slave,這個slave則被配置持久化選項。不過需要注意的是,在這個方案中,必須確保master不會自動啟動。

5.2 安全性

Master持久化功能關閉時Replication的安全性當有需要使用到replication機制時,一般都會強烈建議把master的持久化開關打開。即使為了避免持久化帶來的延遲影響,不把持久化開關打開,那么也應該把master配置為不會自動啟動的。

5.3 replication工作原理

如果你為master配置了一個slave,不管這個slave是否是第一次連接上Master,它都會發(fā)送一個SYNC命令給master請求復制數(shù)據(jù)。

master收到SYNC命令后,會在后臺進行數(shù)據(jù)持久化,持久化期間,master會繼續(xù)接收客戶端的請求,它會把這些可能修改數(shù)據(jù)集的請求緩存在內存中。當持久化進行完畢以后,master會把這份數(shù)據(jù)集發(fā)送給slave,slave會把接收到的數(shù)據(jù)進行持久化,然后再加載到內存中。然后,master再將之前緩存在內存中的命令發(fā)送給slave。

masterslave之間的連接由于某些原因而斷開時,slave能夠自動重連master,如果master收到了多個slave并發(fā)連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送給多個并發(fā)連接的slave。

masterslave斷開重連后,一般都會對整份數(shù)據(jù)進行復制。但從redis2.8版本開始,支

5.4 主從配置

replication相關的配置比較簡單,只需要把下面一行加到slave的配置文件中:

slaveof  masterIPaddress  6379

如果master通過requirepass配置項設置了密碼,slave每次同步操作都需要驗證密碼,可以通過在slave的配置文件中添加以下配置項:

masterauth <password>

6 常用命令

啟動redis

redis-server /etc/redis/redis.conf

客戶端命令工具

/usr/local/bin/redis-cli -h 192.168.1.1
192.168.1.1:6379> auth Passwd           #登錄,密碼驗證
192.168.1.1:6379>info               #查看數(shù)據(jù)庫狀態(tài)
192.168.1.1:6379>info replication            #查看slave的復制狀態(tài)
192.168.1.1:6379>set key 123          #插入數(shù)據(jù)
192.168.1.1:6379>keys *            #列出數(shù)據(jù)
flushdb                    #清空當前數(shù)據(jù)
flushall                   #清除所有數(shù)據(jù)庫


7.測試主從及切換

7.1 主從測試

Redis-3.2主從復制與集群搭建

Redis-3.2主從復制與集群搭建

7.2主從切換

停止主

Redis-3.2主從復制與集群搭建

切換從為主

redis-cli -h localhost slaveof NO ONE

Redis-3.2主從復制與集群搭建

恢復原來主數(shù)據(jù)庫

將現(xiàn)在的主redis根目錄下dump.rdb文件拷貝覆蓋到原來主redis的根目錄

啟動原來的主redis

Redis-3.2主從復制與集群搭建

在從數(shù)據(jù)庫切換主數(shù)據(jù)庫redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379

測試從已經(jīng)切換回來

Redis-3.2主從復制與集群搭建


二、Redis 集群搭建

Redis高版本使用ruby實現(xiàn)了集群,所以需要ruby環(huán)境,安裝ruby環(huán)境和redisgem接口后,就可以使用redisredis-trib.rb腳本創(chuàng)建集群。

Redis安裝成功后,創(chuàng)建單獨目錄

mkdir /usr/local/redis/cluster -p

再在其下創(chuàng)建目錄 7000、7001、7002、7003

mkdir /usr/local/redis/cluster/7000 -p
cp redis.conf /usr/local/redis/cluster/7000/

redis.conf分別拷貝到這幾個目錄下面,并分別修改redis.conf 中的端口號port和目錄名一致

分別修改配置文件

daemonize    yes                          //redis后臺運行
pidfile  /var/run/redis_7000.pid              //pidfile文件對應7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                        //開啟集群  把注釋#去掉
cluster-config-file  nodes_7000.conf          //集群的配置  配置文件首次啟動自動生成 7000,7001,7002
cluster-node-timeout  5000                  //請求超時  設置5秒夠了
appendonly  yes                           //aof日志開啟  有需要就開啟,它會每次寫操作都記錄一條日志

Redis-3.2主從復制與集群搭建

查看服務是否已經(jīng)起來

Redis-3.2主從復制與集群搭建

2.安裝相關軟件包

yum -y install ruby ruby-devel rubygems rpm-build

再用 gem 這個命令來安裝 redis接口    gemruby的一個工具包

gem install redis

如果安裝失敗,可手動安裝

wget https://rubygems.global.ssl.fastly.NET/gems/redis-3.2.1.gem
sudo gem install -l ./redis-3.2.1.gem

3.redis-trib.rb腳本創(chuàng)建集群

cd /root/redis-3.2.4/src
./redis-trib.rb create --replicas 1 172.17.10.191:7000 172.17.10.191:7001 172.17.10
7005 172.17.10.191:7006

--replicas  1  表示 自動為每一個master節(jié)點分配一個slave節(jié)點 

Redis-3.2主從復制與集群搭建

Redis-3.2主從復制與集群搭建

./redis-trib.rb check 172.17.10.191:7000

Redis-3.2主從復制與集群搭建

4.測試

redis-cli -c -p 7000

設置數(shù)據(jù),然后停止7000端口監(jiān)聽的redis

登錄其他,查看獲取數(shù)據(jù)。

Redis-3.2主從復制與集群搭建

Redis-3.2主從復制與集群搭建

Redis-3.2主從復制與集群搭建

向AI問一下細節(jié)

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

AI