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

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

一、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.優化參數

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

3.配置文件說明

3.1后臺運行

daemonize?yes

3.2bind地址監聽

默認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?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
esac
chkconfig?redis?on
service?redis?restart

3.5 設置密碼

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

requirepass?redispwd??
redis-cli?-p?6379?-a?redispwd????????????#連接數據庫需要-a輸入密碼

3.6 備份恢復

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

CONFIG?GET?dir????????????#查看備份目錄
save?????????????????????#執行備份

e10c245f11955ad2fc393636f5290f42.png

4.Redis持久化

4.1 rdb方式

工作原理:

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

redis主進程fork一個子進程fork出來的子進程將內存的數據集dump到臨時的RDB

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

默認配置如下:

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

其意義:

1key更新值時每900秒保存一次數據到硬盤

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

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

4.2 aof方式

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

工作原理

AOF append only file

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

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

三種appedn方式:

appendfsync?always
appendfsync?everysec
appendfsync?no

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

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

appendfsync no從不 fsync :將數據交給操作系統來處理。更快,也更不安全的選擇。

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

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

5. Redis主從復制

5.1 概述

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

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

  • 允許單個master配置多個slave

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

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

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

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

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

5.2 Master持久化功能關閉時Replication的安全性

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

5.3 replication工作原理

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

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

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

masterslave斷開重連后,一般都會對整份數據進行復制。但從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 PasswdOK

登錄,密碼驗證192.168.1.1:6379>info

查看數據庫狀態192.168.1.1:6379>info replication

查看slave的復制狀態192.168.1.1:6379>set key 123

插入數據192.168.1.1:6379>keys *

列出數據

flushdb

清空當前數據

flushall

清除所有數據庫

7.測試主從及切換

7.1 主從測試

wKioL1jP9QezMT9AAAEgqHq56Rk010.png

wKiom1jP9VTRP8_6AAEz8t7g2Ts415.png

7.2主從切換

停止主

wKiom1jP9avAqGw-AAHij6zjxrI896.png

切換從為主

redis-cli -h localhost slaveof NO ONE

wKiom1jP9frQwHqoAAJ23aica_s403.png

恢復原來主數據庫

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

啟動原來的主redis

wKioL1jP9ieySz7lAABO0OJWaqg371.png

在從數據庫切換主數據庫redis-cli -h localhost -p 6379 slaveof 172.17.10.193?6379

測試從已經切換回來

wKiom1jP9orAKHKBAAG-4RX46dY624.png


二、Redis 集群搭建

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

Redis安裝成功后,創建單獨目錄

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

再在其下創建目錄 7000700170027003

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日志開啟??有需要就開啟,它會每次寫操作都記錄一條日志

wKioL1jP9wuTALJ1AAJdH_ia7q0316.png

查看服務是否已經起來

wKiom1jP907gCiFVAAVOM88BxiQ959.png

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腳本創建集群

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節點分配一個slave節點?

wKioL1jP9-qBGHjBAAN9gZeb_hY841.png

wKiom1jP-B_yI7k7AAZgpzN7hpk902.png

./redis-trib.rb check 172.17.10.191:7000

wKioL1jP-GDCWLOhAAdfJXakOLM869.png

4.測試

redis-cli -c -p 7000

設置數據,然后停止7000端口監聽的redis

登錄其他,查看獲取數據。

wKiom1jP-SHgz3pHAAGxK9Waces741.png

wKioL1jP-Viz50OrAAK1SPaAZBs433.png

wKioL1jP-aXAN5rLAAZnRIXXPRA368.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396438.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396438.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396438.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AutoMapperHelper

/// <summary>/// AutoMapper幫助類/// </summary>public static class AutoMapperHelper{/// <summary>/// 單個對象映射/// </summary>public static T MapTo<T>(this object obj){if (obj null) return default(T);Mapper.CreateMap(obj.Ge…

web項目開發人員配比_我如何找到Web開發人員的第一份工作

web項目開發人員配比I have always had an interest in coding for the web. I built my first site almost 15 years ago using Yahoo’s Geocities, which allowed HTML styling and a few layout choices.我一直對網絡編碼感興趣。 大約15年前&#xff0c;我使用Yahoo的Geoc…

蘋果手機輸入屏保后鎖屏_修一塊手機屏幕要7080元?

這幾天華為Mate X的兩次開售成為大家議論的話題&#xff0c;一些搶到的人自然沉浸在快樂之中&#xff0c;想著是自己留著用&#xff0c;還是轉手賺一把。而一些想搶而沒搶到的人或許正在研究如何在明天的第三次開售中抓好機會吧&#xff01;當然&#xff0c;也有像小編這樣的&a…

中間介(MiddleWare)

引子-Django的生命周期 在學習中間介之前&#xff0c;我們先來回顧一下Django的生命周期&#xff1a;用戶發起請求&#xff0c;請求會被發送到urlconf中的url&#xff0c;然后會指向對應的views函數進行處理&#xff0c;views函數處理完成后&#xff0c;用模板渲染好html&#…

對MariaDB10.0的Sphinx進行擴展

已修改過的文件&#xff1a;http://pan.baidu.com/s/1o8DHvkA 將這兩個文件放到MariaDB的解壓目錄后&#xff0c;再進行安裝 /usr/local/mariadb-10.0.28/storage/sphinx/ 如下是修改的代碼 get_rec ( byte * buf, const byte * key, uint keylen,uint a,uint b,uint c );index…

C++常用特性原理解析

在我的早期印象中&#xff0c;C這門語言是軟件工程發展過程中&#xff0c;出于對面向對象語言級支持不可或缺的情況下&#xff0c;一群曾經信誓旦旦想要用C統治宇宙的極客們妥協出來的一個高性能怪咖。 它駁雜萬分&#xff0c;但引人入勝&#xff0c;出于多(mian)種(shi)原因&a…

容器created狀態_docker容器狀態的轉換實現

一 docker容器狀態轉換圖二 實戰[rootlocalhost ~]# docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 3Server Version: 17.09.0-ceStorage Driver: overlayBacking Filesystem: xfsSupports d_type: falseLogging Driver: json-fileCgroup Driver: cgroupfsPlu…

nodejs命令行執行程序_在NodeJS中編寫命令行應用程序

nodejs命令行執行程序by Peter Benjamin彼得本杰明(Peter Benjamin) 在NodeJS中編寫命令行應用程序 (Writing Command-Line Applications in NodeJS) With the right packages, writing command-line apps in NodeJS is a breeze.有了合適的軟件包&#xff0c;用NodeJS編寫命令…

python re findall 效率_python re模塊findall()詳解

今天寫代碼&#xff0c;在寫到鄭澤的時候遇到了一個坑&#xff0c;這個坑是re模塊下的findall()函數。下面我將結合代碼&#xff0c;記錄一下importrestring"abcdefg acbdgef abcdgfe cadbgfe"#帶括號與不帶括號的區別#不帶括號regexre.compile("((\w)\s\w)&quo…

ubuntu16.04配置sonarqube+MySQL

環境&#xff1a;rootubuntu:~# uname -a Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux rootubuntu:~# rootubuntu:~# cat /etc/issue Ubuntu 16.04 LTS \n \lrootubuntu:~#安裝配置mysql&#xff1a;1、更新源…

mysql 多表混全_mysql--淺談多表查詢1

這是對自己學習燕十八老師mysql教程的總結&#xff0c;非常感謝燕十八老師。依賴軟件&#xff1a;mysql5.6系統環境&#xff1a;win連接查詢在談連接查詢之前我們需要對數學上的笛卡爾積有一定的了解現在有兩個集合m和nm (m1,m2,.....mx)n (n1,n2,.....ny)m*n得到的笛卡爾積有…

鼠標固定在屏幕中間_無線電競黑科技,雷柏VT950Q游戲鼠標評測

雷柏作為目前小有聲譽的PC外設品牌&#xff0c;其定位高性能游戲領域的VT系列產品&#xff0c;想必大家也比較熟悉了。VT系列的產品除了有超強的性能以及出色的設計感&#xff0c;同時還都是性價比非常高的產品&#xff0c;即便是采用了旗艦級傳感器&#xff0c;定位最為高端的…

談論源碼_5,000名開發人員談論他們的薪水

談論源碼Let’s dive into the most interesting results from the O’Reilly 2016 Salary Survey of 5,000 developers (which excluded managers and students).讓我們來看看OReilly 2016年薪金調查對5,000名開發人員(其中不包括經理和學生)最有趣的結果。 性別工資差距是真…

WebSnapshotsHelper(HTML轉換為圖片)

1 /// <summary>2 /// WebBrowser Url生成圖片3 /// HTML轉圖片4 /// </summary>5 public class WebSnapshotsHelper6 {7 Bitmap m_Bitmap;8 string m_Url;9 int m_BrowserWidth, m_BrowserHeight, m_ThumbnailWidth,…

兩個多項式相乘求解系數數組算法

題目描述&#xff1a; 給出兩個多項式&#xff0c;最高次冪分別為n和m&#xff0c;求解這兩個系數相乘得到的系數數組。 分析&#xff1a; 最高次冪如果是m和n&#xff0c;那么他們相乘得到的系數數組的最高次冪一定是nm&#xff0c;對于其他的系數&#xff0c;不妨設a[],b[]是…

synchronized 和 reentrantlock 區別是什么_JUC源碼系列之ReentrantLock源碼解析

目錄ReentrantLock 簡介ReentrantLock 使用示例ReentrantLock 與 synchronized 的區別ReentrantLock 實現原理ReentrantLock 源碼解析ReentrantLock 簡介ReentrantLock 是 JDK 提供的一個可重入的獨占鎖&#xff0c;獨占鎖&#xff1a;同一時間只有一個線程可以持有鎖可重入&am…

gulp 和npm_為什么我離開Gulp和Grunt去看npm腳本

gulp 和npmI know what you’re thinking. WAT?! Didn’t Gulp just kill Grunt? Why can’t we just be content for a few minutes here in JavaScript land? I hear ya, but…我知道你在想什么 WAT &#xff1f;&#xff01; 古爾普不是殺死了咕unt嗎&#xff1f; 為什么…

mysql8.0遞歸_mysql8.0版本遞歸查詢

1.先在mysql數據庫添加數據DROP TABLE IF EXISTS dept;CREATE TABLE dept (id int(11) NOT NULL,pid int(11) DEFAULT NULL,name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,date datetime(0) DEFAULT NULL,PRIMARY KEY (id) USING BTREE) ENGINE…

js 輪播插件

flexslider pc插件 個人用過flickerplate 移動端插件 個人用過個人覺得比較好的移動端插件swiper http://www.swiper.com.cn/ 用過個人覺得比較好的pc端插件待定

計算機中的字符編碼

字符編碼 什么是計算機編碼 計算機只能處理二進制的數據&#xff0c;其它的數據都要進行轉換&#xff0c;但轉換必須要有一套字符編碼(是字符與二進制的一個對應關系)。常用的字符&#xff1a;a-z、0-9、其它的符號等&#xff0c;計算機也不能直接處理。 &#xff08;字符編碼類…