日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Redis-3.2主从复制与集群搭建

發(fā)布時(shí)間:2023/12/31 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis-3.2主从复制与集群搭建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、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ù)調(diào)優(yōu)

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

3.配置文件說(shuō)明

3.1 后臺(tái)運(yùn)行

daemonize?yes

3.2 bind地址監(jiān)聽(tīng)

默認(rèn)bind的填寫的127.0.0.1這樣配置是只允許本地訪問(wèn) bind?0.0.0.0

3.3 日志配置

logfile?"/var/log/redis.log"

3.4 服務(wù)啟動(dòng)腳本

vim?/etc/init.d/redis#?chkconfig:?2345?90?10 #?description:?service?of?redis?for?start?and?stop?add?by?tomenerPATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/local/bin/redis-server REDIS_CLI=/usr/local/bin/redis-cliPIDFILE=/var/run/redis_6379.pid CONF="/etc/redis/redis.conf" AUTH="Passwd" BIND_IP='0.0.0.0' case?"$1"?instart)if?[?-f?$PIDFILE?]thenecho?"$PIDFILE?exists,?process?is?already?running?or?crashed."elseecho?"Starting?Redis?server..."$EXEC?$CONFfiif?[?"$?"="0"?]thenecho?"Redis?is?running..."fi;;stop)if?[?!?-f?$PIDFILE?]thenecho?"$PIDFILE?exists,?process?is?not?running."elsePID=$(cat?$PIDFILE)echo?"Stopping..."$REDIS_CLI?-h?$BIND_IP?-a?$AUTH?-p?$REDISPORT??SHUTDOWNsleep?2while?[?-x?$PIDFILE?]doecho?"Waiting?for?Redis?to?shutdown..."sleep?1doneecho?"Redis?stopped"fi;;restart|force-reload)${0}?stop${0}?start;;*)echo?"Usage:?/etc/init.d/redis?{start|stop|restart|force-reload}"?>&2exit?1 esacchkconfig?redis?on????#設(shè)置開(kāi)機(jī)自啟動(dòng) service?redis?restart????#啟動(dòng)服務(wù)

3.5 設(shè)置密碼

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

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

3.6 備份恢復(fù)

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

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

4.Redis持久化

4.1 rdb方式

工作原理:

當(dāng)redis生成dump.rdb文件時(shí),工作過(guò)程如下:

redis主進(jìn)程fork一個(gè)子進(jìn)程,fork出來(lái)的子進(jìn)程將內(nèi)存的數(shù)據(jù)集dump到臨時(shí)的RDB

當(dāng)子進(jìn)程對(duì)臨時(shí)的RDB文件寫入完畢,redis用新的RDB文件代替舊的RDB文件

默認(rèn)配置如下:

save?900?1 save?300?10 save?60?10000

其意義:

當(dāng)1個(gè)key更新值時(shí)每900秒保存一次數(shù)據(jù)到硬盤

當(dāng)10個(gè)key更新值時(shí)每300秒保存一次到硬盤

當(dāng)10000個(gè)key更新值時(shí)每60秒保存一次到硬盤

4.2 aof方式

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

工作原理:

AOF append only file

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

當(dāng)redis重新啟動(dòng)時(shí),程序可以通過(guò)AOF文件恢復(fù)數(shù)據(jù)。

三種appedn方式:

appendfsync?always appendfsync?everysec appendfsync?no

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

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

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

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

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

5.Redis主從復(fù)制

5.1 概述

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

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

  • 允許單個(gè)master配置多個(gè)slave,易橫向擴(kuò)展

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

  • master在進(jìn)行replication時(shí)是非阻塞的,這意味著在replication期間,master依然能夠處理客戶端的請(qǐng)求。

  • slavereplication期間也是非阻塞的,也可以接受來(lái)自客戶端的請(qǐng)求,但是它用的是之前的舊數(shù)據(jù)。可以通過(guò)配置來(lái)決定slave是否在進(jìn)行replication時(shí)用舊數(shù)據(jù)響應(yīng)客戶端的請(qǐng)求,如果配置為否,那么slave將會(huì)返回一個(gè)錯(cuò)誤消息給客戶端。不過(guò)當(dāng)新的數(shù)據(jù)接收完全后,必須將新數(shù)據(jù)與舊數(shù)據(jù)替換,即刪除舊數(shù)據(jù),在替換數(shù)據(jù)的這個(gè)時(shí)間窗口內(nèi),slave將會(huì)拒絕客戶端的請(qǐng)求和連接。

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

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

5.2 安全性

Master持久化功能關(guān)閉時(shí)Replication的安全性當(dāng)有需要使用到replication機(jī)制時(shí),一般都會(huì)強(qiáng)烈建議把master的持久化開(kāi)關(guān)打開(kāi)。即使為了避免持久化帶來(lái)的延遲影響,不把持久化開(kāi)關(guān)打開(kāi),那么也應(yīng)該把master配置為不會(huì)自動(dòng)啟動(dòng)的。

5.3 replication工作原理

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

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

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

當(dāng)masterslave斷開(kāi)重連后,一般都會(huì)對(duì)整份數(shù)據(jù)進(jìn)行復(fù)制。但從redis2.8版本開(kāi)始,支

5.4 主從配置

replication相關(guān)的配置比較簡(jiǎn)單,只需要把下面一行加到slave的配置文件中:

slaveof ?masterIPaddress ?6379

如果master通過(guò)requirepass配置項(xiàng)設(shè)置了密碼,slave每次同步操作都需要驗(yàn)證密碼,可以通過(guò)在slave的配置文件中添加以下配置項(xiàng):

masterauth <password>

6 常用命令

啟動(dòng)redis

redis-server /etc/redis/redis.conf

客戶端命令工具

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


7.測(cè)試主從及切換

7.1 主從測(cè)試



7.2主從切換

停止主


切換從為主

redis-cli -h localhost slaveof NO ONE

恢復(fù)原來(lái)主數(shù)據(jù)庫(kù)

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

啟動(dòng)原來(lái)的主redis


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

測(cè)試從已經(jīng)切換回來(lái)



二、Redis 集群搭建

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

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

mkdir?/usr/local/redis/cluster?-p

再在其下創(chuàng)建目錄 7000700170027003

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

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

分別修改配置文件

daemonize????yes??????????????????????????//redis后臺(tái)運(yùn)行 pidfile??/var/run/redis_7000.pid??????????????//pidfile文件對(duì)應(yīng)7000,7002,7003 port??7000????????????????????????????????//端口7000,7002,7003 cluster-enabled??yes????????????????????????//開(kāi)啟集群??把注釋#去掉 cluster-config-file??nodes_7000.conf??????????//集群的配置??配置文件首次啟動(dòng)自動(dòng)生成?7000,7001,7002 cluster-node-timeout??5000??????????????????//請(qǐng)求超時(shí)??設(shè)置5秒夠了 appendonly??yes???????????????????????????//aof日志開(kāi)啟??有需要就開(kāi)啟,它會(huì)每次寫操作都記錄一條日志


查看服務(wù)是否已經(jīng)起來(lái)


2.安裝相關(guān)軟件包

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

再用 gem 這個(gè)命令來(lái)安裝 redis接口? ? gemruby的一個(gè)工具包

gem?install?redis

如果安裝失敗,可手動(dòng)安裝

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? 表示 自動(dòng)為每一個(gè)master節(jié)點(diǎn)分配一個(gè)slave節(jié)點(diǎn)?



./redis-trib.rb check 172.17.10.191:7000


4.測(cè)試

redis-cli -c -p 7000

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

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




轉(zhuǎn)載于:https://blog.51cto.com/kaliarch/1908617

總結(jié)

以上是生活随笔為你收集整理的Redis-3.2主从复制与集群搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。