Redis自動化安裝以及集群實現

来源:https://www.cnblogs.com/wy123/archive/2019/09/18/11543882.html
-Advertisement-
Play Games

Redis實例安裝 安裝說明:自動解壓縮安裝包,按照指定路徑編譯安裝,複製配置文件模板到Redis實例路的數據徑下,根據埠號修改配置文件模板 配置文件,當前shell腳本,安裝包 參數1:basedir,redis安裝包路徑 參數2:安裝實例路徑 參數3:安裝包名稱 參數4:安裝實例的埠號 #! ...


Redis實例安裝 安裝說明:自動解壓縮安裝包,按照指定路徑編譯安裝,複製配置文件模板到Redis實例路的數據徑下,根據埠號修改配置文件模板 三個必須文件:1,配置文件,2,當前shell腳本,3,安裝包 參數1:basedir,redis安裝包路徑 參數2:安裝實例路徑 參數3:安裝包名稱 參數4:安裝實例的埠號
#!/bin/bash
set -e
if [ $# -lt 4 ]; then
        echo "$(basename $0): Missing script argument"
        echo "$(installdir $0) [installfilename] [port] "
        exit 9
fi
PotInUse=`netstat -anp |  awk '{print $4}'  | grep $4 | wc -l`
if [ $PotInUse -gt 0 ];then
  echo "ERROR" $4 "Port is used by another process!"
  exit 9
fi
basedir=$1
installdir=$2
installfilename=$3
port=$4
cd $basedir
tar -zxvf $installfilename.tar.gz  >/dev/null 2>&1 &
cd $installfilename
mkdir -p $installdir
make PREFIX=$installdir install
sleep 1s 
cp $basedir/redis.conf $installdir

sed -i "s/instance_port/$port/g"  $installdir/redis.conf
sleep 1s 
cd $installdir
./bin/redis-server redis.conf >/dev/null 2>&1 &

配置文件模板

################################## INCLUDES ###################################
# include /path/to/local.conf
# include /path/to/other.conf

################################## MODULES #####################################
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## NETWORK #####################################
bind 127.0.0.1 & your ip
port instance_port
tcp-backlog 511
timeout 0
tcp-keepalive 300

################################# GENERAL #####################################
daemonize yes
supervised no
pidfile ./redis_instance_port.pid
loglevel notice
logfile ./redis_log.log
databases 16
always-show-logo yes

################################ SNAPSHOTTING  ################################
save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./

################################# REPLICATION #################################
# masterauth <master-password>
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100

################################## SECURITY ###################################
requirepass your_passwrod

################################### CLIENTS ####################################
# maxclients 10000

############################## MEMORY MANAGEMENT ################################
# maxmemory <bytes>
# maxmemory-policy noeviction
# maxmemory-samples 5
# replica-ignore-maxmemory yes

############################# LAZY FREEING ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

############################## APPEND ONLY MODE ###############################
appendonly no

appendfilename "appendonly.aof"

# appendfsync always
appendfsync everysec
# appendfsync no

no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes

################################ LUA SCRIPTING  ###############################
lua-time-limit 5000

################################ REDIS CLUSTER  ###############################
cluster-enabled yes
# cluster-replica-validity-factor 10
# cluster-require-full-coverage yes
# cluster-replica-no-failover no


########################## CLUSTER DOCKER/NAT support  ########################


################################## SLOW LOG ###################################
slowlog-log-slower-than 10000
slowlog-max-len 128

################################ LATENCY MONITOR ##############################
latency-monitor-threshold 0

############################# EVENT NOTIFICATION ##############################
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# client-query-buffer-limit 1gb
# proto-max-bulk-len 512mb
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes


########################### ACTIVE DEFRAGMENTATION #######################

# Enabled active defragmentation
# activedefrag yes
# Minimum amount of fragmentation waste to start active defrag
# active-defrag-ignore-bytes 100mb
# Minimum percentage of fragmentation to start active defrag
# active-defrag-threshold-lower 10
# Maximum percentage of fragmentation at which we use maximum effort
# active-defrag-threshold-upper 100
# Minimal effort for defrag in CPU percentage
# active-defrag-cycle-min 5
# Maximal effort for defrag in CPU percentage
# active-defrag-cycle-max 75
# Maximum number of set/hash/zset/list fields that will be processed from
# the main dictionary scan
# active-defrag-max-scan-fields 1000
View Code

安裝示例
sh redis_install.sh /usr/local/redis/   /usr/local/redis5/redis9008/  redis-5.0.4  9008

Redi實例的目錄結構

 

基於Python的Redis自動化集群實現

基於Python的自動化集群實現,初始化節點為node_1~node_6,節點實例需要為集群模式,三主三從,自動化集群,分配slots,加入從節點,3秒鐘左右完成

import redis

#master
node_1 = {'host': '127.0.0.1', 'port': 9001, 'password': '***'}
node_2 = {'host': '127.0.0.1', 'port': 9002, 'password': '***'}
node_3 = {'host': '127.0.0.1', 'port': 9003, 'password': '***'}
#slave
node_4 = {'host': '127.0.0.1', 'port': 9004, 'password': '***'}
node_5 = {'host': '127.0.0.1', 'port': 9005, 'password': '***'}
node_6 = {'host': '127.0.0.1', 'port': 9006, 'password': '***'}

redis_conn_1 = redis.StrictRedis(host=node_1["host"], port=node_1["port"], password=node_1["password"])
redis_conn_2 = redis.StrictRedis(host=node_2["host"], port=node_2["port"], password=node_2["password"])
redis_conn_3 = redis.StrictRedis(host=node_3["host"], port=node_3["port"], password=node_3["password"])

# cluster meet
redis_conn_1.execute_command("cluster meet {0} {1}".format(node_2["host"],node_2["port"]))
redis_conn_1.execute_command("cluster meet {0} {1}".format(node_3["host"],node_3["port"]))
print('#################flush slots #################')
redis_conn_1.execute_command('cluster flushslots')
redis_conn_2.execute_command('cluster flushslots')
redis_conn_3.execute_command('cluster flushslots')
print('#################add slots#################')
for i in range(0,16383+1):
    if i <= 5461:
        try:
            redis_conn_1.execute_command('cluster addslots {0}'.format(i))
        except:
            print('cluster addslots {0}'.format(i) +' error')
    elif 5461 < i and i <= 10922:
        try:
            redis_conn_2.execute_command('cluster addslots {0}'.format(i))
        except:
            print('cluster addslots {0}'.format(i) + ' error')
    elif 10922 < i:
        try:
            redis_conn_3.execute_command('cluster addslots {0}'.format(i))
        except:
            print('cluster addslots {0}'.format(i) + ' error')
print()
print('#################cluster status#################')
print()
print('##################'+str(node_1["host"])+':'+str(node_1["port"])+'##################')
print(str(redis_conn_1.execute_command('cluster info'), encoding = "utf-8").split("\n")[0])
print('##################'+str(node_2["host"])+':'+str(node_2["port"])+'##################')
print(str(redis_conn_1.execute_command('cluster info'), encoding = "utf-8").split("\n")[0])
print('##################'+str(node_3["host"])+':'+str(node_3["port"])+'##################')
print(str(redis_conn_1.execute_command('cluster info'), encoding = "utf-8").split("\n")[0])

#slave cluster meet
redis_conn_1.execute_command("cluster meet {0} {1}".format(node_4["host"],node_4["port"]))
redis_conn_2.execute_command("cluster meet {0} {1}".format(node_5["host"],node_5["port"]))
redis_conn_3.execute_command("cluster meet {0} {1}".format(node_6["host"],node_6["port"]))


#cluster nodes
print(str(redis_conn_1.execute_command('cluster nodes'), encoding = "utf-8"))

示例

這樣一個Redis的集群,從實例的安裝到集群的安裝,環境依賴本身沒有問題的話,基本上1分鐘之內可以完成這個搭建過程。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、ramdisk介紹 ramdisk通過直面意思就大概能理解意思,ram disk虛擬記憶體盤,將ram模擬成硬碟來使用的文件系統。對於傳統的磁碟文件系統來說,這樣做的好處是可以極大提高文件訪問速度;但由於是ram,所以 在掉電後,這部分內容不能保存。ramdisk文件系統是在系統上電後直接從磁碟一 ...
  • 比較 新的Linux發行版 已經沒有 文件了。因為已經將其服務化了。 解決方法: 1、設置 2、激活 3、添加啟動服務 手工創建或者拷貝已有的/etc/rc.local,並賦予執行許可權 ...
  • 摘要 Recovery模式指的是一種可以對安卓機內部的數據或系統進行修改的模式(類似於windows PE或DOS)。也可以稱之為安卓的恢復模式,在這個所謂的恢復模式下,我們可以刷入新的安卓系統,或者對已有的系統進行備份或升級,也可以在此恢復出廠設置(格式化數據和緩存)。 1. Recovery相關 ...
  • 執行:systemctl get-default //顯示預設的界面方式 multi-user.target //命令行界面 graphical.target //圖形化界面 執行:systemctl set-default multi-user.target //設置開機以命令行模式界面啟動 執行 ...
  • 最近在做一個VPN中間件的配置工作,在配置iptables的時候,當用戶想刪除EIP(即釋放當前連接),發現使用iptables的相關命令會提示錯誤。 我就納悶了,怎麼會出現這個問題,按照官方的文檔也有錯? "官方文檔地址" 解決方法: 1. 按行刪除 如果按照行號刪除,就不會有這篇文章了,當然如果 ...
  • 利用 pandas庫讀取excel表格數據 初入IT行業,願與大家一起學習,共同進步,有問題請指出!! 還在為數據讀取而頭疼呢,請看下方簡潔介紹: 數據來源為國家統計局網站下載: 具體方法 代碼: 結果: 讀出x列的結果可以用matplotlib.pyplot庫繪製直線圖、餅圖、折線圖 ...
  • 系統:win10(其他版本系統不在本次內容) MYSQL下載地址:https://dev.mysql.com/downloads/mysql/ MySQL安裝主流分為兩種:msi,zip Zip:壓縮版,這需要配置init文件,然後通過win+R 進入cmd控制台進行操作(本次 以msi版本為主,後 ...
  • Redis事務控制 1、Redis事務控制的相關命令彙總 |命令名|作用| | | | |MULTI|表示開始收集命令,後面所有命令都不是馬上執行,而是加入到一個隊列中。| |EXEC|執行MULTI後面命令隊列中的所有命令。| |DISCARD|放棄執行隊列中的命令。| |WATCH|“觀察”、“ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...