目錄
redis 叢集建置以及監控環境
叢集基本建置
#簡單下載
安裝編譯工具
#建立redis叢集資料夾
檢視叢集運作狀態:使用指令
自帶測試工具redis-benchmark
叢集建置初始不需要密碼,啟動完成後,先看每個節點的設定檔是否有讀寫權限,如果沒有讀寫權限,需要chmod修改的讀寫權限,透過
监控部署
RedisLive搭建部署
运行环境部署
Q&A
首頁 Java java教程 redis 集群搭建以及redislive監測部署

redis 集群搭建以及redislive監測部署

Aug 09, 2018 pm 05:36 PM
java redis集群

redis 叢集建置以及監控環境

實作3主3從的叢集虛擬機器單機ip:192.168.40.128

叢集基本建置

#簡單下載

  • #透過wget http://download.redis.io/releases/redis-4.0.10.tar.gz

  • 解壓縮tar zxvf redis-4.0.10.tar.gz

  • #指定安裝路徑,切換root使用者執行make && make PREFIX=/usr/ local/redis install,可能出現權限不夠的問題,sudo同樣會報錯,直接使用root進行操作。


安裝編譯工具

  • #sudo apt-get update

  • sudo apt-get install gcc

  • #sudo apt-get install make

  • sudo apt-get install tcl


#建立redis叢集資料夾

  • ##因為是/usr,所以總是在root權限下操作

  • cd /usr/local/redis

  • mkdir cluster

  • cd cluster

  • mkdir 7000 7001 7002 7003 7004 7005


#修改設定檔

複製redis conf內的config檔複製到六個資料夾中,並且修改以下內容

# 端口号  
port 7000  
# 后台启动  
daemonize yes  
# 开启集群  
cluster-enabled yes  
#集群节点配置文件  
cluster-config-file nodes-7000.conf  
# 集群连接超时时间  
cluster-node-timeout 5000  
# 进程pid的文件位置  
pidfile /home/ubuntu/redis-4.0.10/pid/redis-7000.pid
#工作文件夹
dir "/home/ubuntu/redis-4.0.10/working"
# 开启aof  
appendonly yes  
# aof文件路径  
appendfilename "appendonly-7005.aof"  
# rdb文件路径  
dbfilename dump-7000.rdb
登入後複製

redis 的設定檔中的bind指定的是redis伺服器的網路卡ip,也就是redis伺服器的ip


#啟動腳本

  • ##cd / home/ubuntu/redis-4.0.10/

  • #touch start.link.sh

    為了操作簡單,建立腳本

  • #修改啟動腳本,為
  • #!/bin/bash
    export BASE_FLOD="/usr/local/redis"
    {BASE_FLOD}/bin/redis-server /usr/local/redis/cluster/7000/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/cluster/7001/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/cluster/7002/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/cluster/7003/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/cluster/7004/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/cluster/7005/redis.conf
    #cd src
    #./redis-trib.rb create --replicas 1 192.168.40.128:7000 192.168.40.128:7001 192.168.40.128:7002 192.168.40.128:7003 192.168.40.128:7004 192.168.40.128:7005
    登入後複製
  • 其中註解的是為了簡化初始啟動的,ip需要跟每個節點配置的redis.conf 中bind 屬性綁定的一致,啟動後可以透過ps -ef | grep redis指令查詢對應的執行緒是否啟動

叢集啟動

    關聯程式所使用的ruby寫的,所以要建置rudy的運作環境,需要安裝rudbygem
  • sudo apt-get install ruby​​ ruby​​gems -y

  • gem install redis,運行到這裡會感覺十分慢,需要耐心等待,在redis安裝目錄下,src資料夾redis-trib.rb
  • 運行
  • redis-trib. rb create --replicas 1 192.168.40.128:7000 192.168.40.128:7001 192.168.40.128:7002 192.168.40.168.40.128:7002 192.168.40.128:7038:7002 192.168.40.128:7038. 28:7005

    ,檢查配置的資訊是否有錯誤,沒有直接yes就可以.  [OK] All 16384 slots covered.代表接群啟動成功。

節點查看,重啟

檢視叢集運作狀態:使用指令

./redis-trib.rb check 192.168.40.128:7000

,進行叢集的狀態檢查

效能測試

自帶測試工具redis-benchmark

  • redis-benchmark - h 192.168.40.128 -p 6379 -c 100 -n 100000

    100個並發連接,100000個請求,偵測host 為localhost 連接埠為6379的redis 伺服器效能。

  • redis-benchmark -h 192.168.40.128 -p 6379 -q -d 100

    測試存取大小為100位元組的封包的效能。

  • redis-benchmark -t set,lpush -n 100000 -q

    只測試某些操作的效能。

  • redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"

    只測試某些數值存取的效能。

叢集密碼設定

叢集建置初始不需要密碼,啟動完成後,先看每個節點的設定檔是否有讀寫權限,如果沒有讀寫權限,需要chmod修改的讀寫權限,透過

./redis-cli -c -p port
config set masterauth password
config set requirepass password
config rewrite
登入後複製

分別連接每個節點進行設定

若要重啟發現連線不上,修改啟動腳本redis-.sh 99行,配置啟動腳本密碼啟動


@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60,:password => "yangfan@1995")

程式碼測試
/*
 *集群连接测试
 */

@Test
public void testJedisCluster() {
    Set<HostAndPort> nodes = new LinkedHashSet<>();
    //所有主机节点ip和端口
    nodes.add(new HostAndPort("192.168.40.128", 7000));
    nodes.add(new HostAndPort("192.168.40.128", 7001));
    nodes.add(new HostAndPort("192.168.40.128", 7002));
    nodes.add(new HostAndPort("192.168.40.128", 7003));
    nodes.add(new HostAndPort("192.168.40.128", 7004));
    nodes.add(new HostAndPort("192.168.40.128", 7005));
    //没有密码
    //JedisCluster cluster = new JedisCluster(nodes);
    //添加密码调用
    JedisCluster cluster = new JedisCluster(nodes, 5000, 5000, 10, "yangfan@1995", new GenericObjectPoolConfig());
    //cluster.zadd("test_1", String.valueOf(""),"id_2");
    System.out.println(cluster.zscore("test_1", "id_1"));
    try {
        cluster.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
登入後複製

主從模式、哨兵、叢集的關係

    #主從模式是指定複製和持久化關係,指定了主從備份的關係
  1. 哨兵:當主資料庫遇到異常中斷服務後,開發者可以透過手動的方式選擇一個從資料庫來升格為主資料庫,以使得系統能夠繼續提供服務。主要是為了解決主從複製手動切換主從關係的偵測工具,可以自動切換主從。
  2. 使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,共有16384个slot。每个redis分得一些slot,hash_slot = crc16(key) mod 16384 找到对应slot,键是可用键,如果有{}则取{}内的作为可用键,否则整个键是可用键集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。

监控部署

RedisLive搭建部署


运行环境部署

  1. git clone https://github.com/kumarnitin/RedisLive.git
    下载redislive,解压缩unzip -o -d /home/ubuntu/ RedisLive-master.zip

  2. 进入src文件夹,复制example文件,编辑

    "RedisServers":
    [
        {
        "server": "192.168.40.128",
        "port" : 7000,
        "password" : "yangfan@1995"
        },
        //...多个监听
    ],
    
    "DataStoreType" : "redis",
    
    "RedisStatsServer": //存储的redis监听接口
    {
        "server" : "127.0.0.1",
        "port" : 6379
    },
    
    "SqliteStatsStore" :
    {
        "path":  "/home/ubuntu/redis-4.0.10/working/redislive.db" //进行存储的文件
    } }
    登入後複製

  3. ubuntu@ubuntu:~/redis-4.0.10$ mkdir pid  
    ubuntu@ubuntu:~/redis-4.0.10$ mkdir log  
    ubuntu@ubuntu:~/redis-4.0.10$ mkdir working
      //保存aof,rdb,node-config文件。

  4. RedisLive分为两部分,其中一部分为监控脚本,另一部分为web服务,所以需要分别启动。`./redis-monitor.py
      --duration=120`./redis-live.py

  5. Q&A

    1. redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster redis node的redis.conf 绑定ip设置为指定的redis节点ip,启动集群时只用指定ip启动,不使用192.168.40.128

    2. connect refuse  关闭防火墙

    3. No module named redis

    • 查看python位置 which python

    • 先备份 sudo cp /usr/bin/python /usr/bin/python_cp

    • 删除 sudo rm /usr/bin/python

    • 默认设置成python3.5,创建链接 sudo ln -s /usr/bin/python3.5 /usr/bin/python

    相关推荐:

    Redis集群搭建全记录

    Redis集群部署及常用的操作命令

    以上是redis 集群搭建以及redislive監測部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles