Redis單機和集群環境搭建

一、安裝單機版redis?

1、可以自己去官網下載,當然也可以用課程提供的壓縮包

# yum install gcc
# wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
# tar -xzvf tcl8.6.1-src.tar.gz
# cd  /usr/local/tcl8.6.1/unix/
# ./configure  
# make && make install

2、使用redis-3.2.8.tar.gz(穩定版)

# tar -zxvf redis-3.2.8.tar.gz
# cd /usr/local/redis-3.2.8
# make
# make test
# make install

3、redis的生產環境啟動方案

(1)redis utils目錄下,有個redis_init_script腳本
(2)將redis_init_script腳本拷貝到linux的/etc/init.d目錄中,將redis_init_script重命名為redis_6379,6379是我們希望這個redis實例監聽的端口號
(3)修改redis_6379腳本的第6行的REDISPORT,設置為相同的端口號(默認就是6379)
(4)創建兩個目錄:/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)
(5)修改redis配置文件(默認在根目錄下,redis.conf),拷貝到/etc/redis目錄中,修改名稱為6379.conf
(6)修改redis.conf中的部分配置為生產環境

daemonize    yes                            #讓redis以daemon進程運行
pidfile      /var/run/redis_6379.pid        #設置redis的pid文件位置
port        6379                           #設置redis的監聽端口號
dir         /var/redis/6379                 #設置持久化文件的存儲位置

(7)啟動redis,執行cd /etc/init.d, chmod 777 redis_6379,./redis_6379 start

(8)確認redis進程是否啟動,ps -ef | grep redis

(9)讓redis跟隨系統啟動自動啟動

  在redis_6379.config腳本中,最上面,加入兩行注釋

    # chkconfig:?? 2345 90 10

    # description:? Redis is a persistent key-value database

    chkconfig redis_6379 on

4、redis cli的使用

redis-cli SHUTDOWN                                  #連接本機的6379端口停止redis進程
redis-cli -h 127.0.0.1 -p 6379 SHUTDOWN         #制定要連接的ip和端口號
redis-cli PING                                      #ping redis的端口,看是否正常
redis-cli                                           #進入交互式命令行SET k1 v1
GET k1

二、Redis集群(讀寫分離+高可用+多master)

1、redis cluster的重要配置

?????? cluster-enabled <yes/no>

  cluster-config-file <filename>:這是指定一個文件,供cluster模式下的redis實例將集群狀態保存在那里,包括集群中其他機器的信息,比如節點的上線和下限,故障轉移,不是我們去維護的,給它指定一個文件,讓redis自己去維護的

  cluster-node-timeout <milliseconds>:節點存活超時時長,超過一定時長,認為節點宕機,master宕機的話就會觸發主備切換,slave宕機就不會提供服務

2、在三臺機器上啟動6個redis實例

(1)在eshop-cache03上部署目錄

  /etc/redis(存放redis的配置文件);

  /var/redis/6379(存放redis的持久化文件)

(2)編寫配置文件

redis cluster集群,要求至少3個master,去組成一個高可用,健壯的分布式的集群,每個master都建議至少給一個slave,3個master,3個slave,最少的要求

正式環境下,建議都是說在6臺機器上去搭建,至少3臺機器

保證,每個master都跟自己的slave不在同一臺機器上,如果是6臺自然更好,一個master+一個slave就死了

?3臺機器去搭建6個redis實例的redis cluster

# mkdir -p /etc/redis-cluster
# mkdir -p /var/log/redis
# mkdir -p /var/redis/7001

.conf配置文件:

port 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize    yes                            
pidfile        /var/run/redis_7001.pid                         
dir         /var/redis/7001        
logfile /var/log/redis/7001.log
bind 192.168.31.187        
appendonly yes

  至少要用3個master節點啟動,每個master加一個slave節點,先選擇6個節點,啟動6個實例

  將上面的配置文件,在/etc/redis下放6個,分別為: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf

(3)準備生產環境的啟動腳本

  在/etc/init.d下,放6個啟動腳本,分別為: redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006

  每個啟動腳本內,都修改對應的端口號

(4)分別在3臺機器上,啟動6個redis實例

  將每個配置文件中的slaveof給刪除

3、創建集群

# yum install -y ruby
# yum install -y rubygems
# gem install redis

 3.1、在執行 gem install redis時候,出現
?? ?ERROR:? Error installing redis:
??????? redis requires Ruby version >= 2.2.2.
?這是由于linux本身默認的ruby版本過低
??

    # sudo yum install curl# curl -L get.rvm.io | bash -s stable# source /usr/local/rvm/scripts/rvm# rvm list known# rvm install 2.5.1# rvm use 2.5.1# rvm use 2.5.1 --default

?  3.2、執行中出現:[curl: (35) SSL connect error
? 解決方法:升級網絡安全服務即可。
?

# yum update nss 
# cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin

# redis-trib.rb create --replicas 1 192.168.51.118:7001 192.168.51.118:7002 192.168.51.119:7003 192.168.51.119:7004 192.168.51.120:7005 192.168.51.120:7006
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.51.119:7003

?出現這個error,是由于防火墻導致,此時,關閉防火墻的方法為:

  3.3、永久性生效

開啟:chkconfig iptables on

關閉:chkconfig iptables off

  3.4、 即時生效,重啟后失效

開啟:service iptables start

關閉:service iptables stop


--replicas: 每個master有幾個slave

6臺機器,3個master,3個slave,盡量自己讓master和slave不在一臺機器上

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.51.118:7001
192.168.51.119:7003
192.168.51.120:7005
Adding replica 192.168.51.119:7004 to 192.168.51.118:7001
Adding replica 192.168.51.118:7002 to 192.168.51.119:7003
Adding replica 192.168.51.120:7006 to 192.168.51.120:7005
M: c929af23011ce7e6888721845d1d300196c3046f 192.168.51.118:7001slots:0-5460 (5461 slots) master
S: 60643541639fa838a23708027dfd8f05084fa0bb 192.168.51.118:7002replicates c330af95e5053ead51943d17b7ede77ff26e357c
M: c330af95e5053ead51943d17b7ede77ff26e357c 192.168.51.119:7003slots:5461-10922 (5462 slots) master
S: bde24d208a5c42771348bbedb2351f0b7ef9c06a 192.168.51.119:7004replicates c929af23011ce7e6888721845d1d300196c3046f
M: 422632826b23edf928d213e980ea0680b1a15ac0 192.168.51.120:7005slots:10923-16383 (5461 slots) master
S: 1e242b9cd55bd702dd386ed3d74916ad6fb78a10 192.168.51.120:7006replicates 422632826b23edf928d213e980ea0680b1a15ac0
Can I set the above configuration? (type 'yes' to accept): yes

?redis-trib.rb check 192.168.31.187:7001

4、讀寫分離+高可用+多master

讀寫分離:每個master都有一個slave
高可用:master宕機,slave自動被切換過去
多master:橫向擴容支持更大數據量

轉載于:https://www.cnblogs.com/Chi-Sophia/p/9886545.html

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

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

相關文章

yum離線安裝

安裝yum-plugin-downloadonly插件 yum install -y yum-plugin-downloadonly下載對應的軟件包&#xff0c;我們以mysql為例&#xff0c;終端輸入如下命令 yum install -y --downloadonly --downloaddir/soft/mysql mysql --downloaddir用來指定下載的路徑轉載于:https://www.cnb…

算法 --- 遞歸實現多級樹展開結構

說明 先根據數據渲染,然后再實現事件 渲染 在項目中,經常會給出一個深度不確定的數組,數字結構如下: data [{name: a, child:[{name: a1},{name: a2, child: [{name:a21}]}]},{name: b} ]要求將數組渲染成對應的目錄結構, 結構如下: <ul><li>a<ul><…

PYTHON自動化Day4-交換變量,字符串方法,拷貝,集合,文件,文件指針

一.判斷 # 非空即真、非0即真 # 不為空的話就是true&#xff0c;是空的話就是false # 只要不是0就是true&#xff0c;是0就是false# 布爾類型 # True False name input(請輸入你的名字&#xff1a;).strip() a [] #false d{} # false c 0 #false f tuple() #false e #fa…

Ajax-jsonp

一、什么是Jsonp jsonp(json with padding) 是一種“使用模式”&#xff0c;可以讓網頁從別的域名那獲取資料&#xff0c;即跨域讀取數據。 為什么會使用jsonp呢&#xff1f;因為同源策略&#xff08;數據來源一致&#xff09;&#xff0c;現在所有支持javascript 的瀏覽器都會…

javascript --- [讀書筆記] 回流與重繪 前端優化小結

1. 瀏覽器渲染原理 請說出: 從用戶在瀏覽器地址輸入網址,到看整個頁面,中間都發生了哪些事情? HTTP請求階段HTTP響應階段瀏覽器渲染階段 1.1 可能用到的知識 1.1.1 進程 Process、線程 Thread、 棧內存 Stack 進程: 就是開的每一個程序: QQ、網易云音樂、Typora、VSCode……

ARP協議,以及ARP欺騙

1.定義&#xff1a; 地址解析協議&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機&#xff0c;并接收返回消息&#xff0c;以此…

css --- [小結]讓盒子水平垂直居中的解決方案

描述 有如下模型,想辦法讓 <style>.box{width: 500px;height: 500px;background: skyblue;} </style> <div class"box"><div class"inner"></div> </div>想辦法讓inner在box中水平垂直居中 方案1: 使用絕對定位 讓…

數組洗牌 Fisher Yates

看播放器代碼時發現的這個洗牌算法&#xff0c;再網上查了一番 作用是把數組變成隨機序列&#xff0c;原理類似于從牌堆A中隨機抽牌放進牌堆B 代碼1&#xff1a; 返回一個由&#xff08;數組下標&#xff09;組成的數組 function random(length) {function shuffle (arr) {for…

一個不錯的MYSQL數據庫備份類,PHP版,一個文件,精簡版

1 <?php2 class DbManage {3 var $db; // 數據庫連接4 var $database; // 所用數據庫5 var $sqldir; // 數據庫備份文件夾6 // 換行符7 private $ds "\n";8 // 存儲SQL的變量9 public $sqlContent "";10 // 每條sql…

javascript --- 堆棧內存與閉包的作用

你可能會用到的 堆內存: 存儲引用類型值所在的空間棧內存: 存儲基本類型值和存儲代碼所在空間函數上下文: JS每一個函數在執行的時候都會創建一個執行上下文 1. 堆內存中的數字和字符串都是相等的 let a {}, b0, c0; a[b] marron; a[c] Mar console.log(a[b]) // Mar第一…

python_sting字符串的方法及注釋

string類型是python內置的類型&#xff0c;無需安裝 方法/屬性說明 capitalize() 把字符串的第一個字符改為大寫 casefold() 把整個字符串的所有字符改為小寫 center(width) 將字符串居中&#xff0c;并使用空格填充至長度width的新字符串 count(sub[,start[,end]]) …

作業3

import turtle turtle.bgcolor(red) turtle.color(yellow)turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(100)turtle.right(144) turtle.end_fill() turtle.done()轉載于:https://www.cnblogs.com/zhangkef97/p/9016608.html

javascript --- [小練習]變量提升、優先級綜合

求下列函數輸出結果 function Foo() {getName function() {console.log(1)}return this } Foo.getName function() {console.log(2) } Foo.prototype.getName function() {console.log(3) } var getName function() {console.log(4) }function getName() {console.log(5) …

Confluence 6 自定義 Decorator 模板的宏和針對高級用戶

宏 頁面的某些部分使用的是 Velocity 宏進行創建的&#xff0c;包括導航欄。有關宏的創建&#xff0c;你可以參考頁面 Working With Decorator Macros 頁面中的內容。 針對高級用戶 velocity 目錄是 Confluence 首先進行模板搜索的查找路徑。你可以對 Confluence 的 velocity …

Matlab之rand(), randn(), randi()函數的使用方法

1. rand()函數用于生成取值在&#xff08;0~1&#xff09;之間均勻分布的偽隨機數。rand(n)&#xff1a;生成n*n的0~1之間的滿足均勻分布的偽隨機矩陣&#xff1b;rand(m,n)&#xff1a;生成m*n的偽隨機數&#xff1b;rand(m,n,double)&#xff1a;生成m*n的雙精度偽隨機數&am…

javascript --- [有趣的條件]雙等號的隱式調用和數據劫持

1 雙等號的隱式調用和數據劫持 求下面條件,在a為什么樣時,等號成立 if(a 1 && a 2 && a 3){console.log(等號成立) }1.1 雙等號的隱式轉換 首先得了解雙等號的隱式轉換規則 等式備注對象 字符串隱式調用 toString方法將對象轉換成字符串null undeifne…

分組查詢

1、簡單分組查詢 語法形式&#xff1a; select function() from table_name where condition group by field; 進行分組查詢時&#xff0c;分組所依據的字段上的值一定要有重復值&#xff0c;否則分組沒有任何意義。 2、實現統計功能分組查詢 關鍵字group by單獨使用時&#xf…

深入探討多模態模型和計算機視覺

近年來&#xff0c;機器學習領域在從圖像識別到自然語言處理的不同問題類型上取得了顯著進展。然而&#xff0c;這些模型中的大多數都對來自單一模態的數據進行操作&#xff0c;例如圖像、文本或語音。相比之下&#xff0c;現實世界的數據通常來自多種模態&#xff0c;例如圖像…

移動硬盤函數不正確要如何尋回資料

移動磁盤打不開函數不正確&#xff0c;是因為這個I盤的文件系統內部結構損壞導致的。要恢復里面的數據就必須要注意&#xff0c;這個盤不能格式化&#xff0c;否則數據會進一步損壞。具體的恢復方法看正文 工具/軟件&#xff1a;AuroraDataRecovery 步驟1&#xff1a;先百度搜索…

vue --- [全家桶]vue-router

1. Vue - router Vue Router是 Vue.js 官方的路由管理器它和Vue.js的核心深度集成,可以非常方便的用于SPA應用程序的開發 Vue Router包含的功能有: 支持HTML5歷史模式或hash模式支持嵌套路由支持路由參數支持編程式路由支持命名路由 <div id"app"><rout…