1. 程式人生 > >codis3.2.1叢集搭建與測試

codis3.2.1叢集搭建與測試

Codis是一套用go語言編寫的,為了應對高並環境下的redis叢集軟體,原理是對一個redis key操作前,先把這個key通過crc32演算法,分配到不同redis的某一個slot,實現併發讀寫功能.而且能通過zookeeper呼叫redis-sentinel來實現故障切換功能.現在最新版本是3.2.1,依託於redis3.2.9開發出來.

優點:實現高併發讀寫,資料一致性高.

缺點:效能有較大損耗,故障切換無法保證不丟key,無法進行讀寫分離.

架構介紹

1.需要用到的軟體有:

codis3.2.1

描述:codis叢集套件,裡面含有redis相關程式,和叢集專用程式,主要功能程式解析:

codis-server:屬於

redis-server優化版,基於 redis-3.2.9 分支開發。增加了額外的資料結構,以支援 slot 有關的操作以及資料遷移指令。

codis-proxy:客戶端連線的 Redis 代理服務, 實現了 Redis 協議。 除部分命令不支援以外(例如:keys *,flush ),表現的和原生的 Redis 沒有區別(就像 Twemproxy)。

redis-sentinel:可以實現對Redis的監控、通知、自動故障轉移。如果Master不能工作,則會自動啟動故障轉移程序,將其中的一個Slave提升為Master,其他的Slave重新設定新的Master服務。Sentinel的配置由 codis-dashboard

zookeeper一起控制,不需要手工填寫.

codis-dashboard:叢集管理工具,支援 codis-proxycodis-server 的新增、刪除,以及據遷移等操作。在叢集狀態發生改變時,codis-dashboard 維護叢集下所有 codis-proxy 的狀態的一致性。

codis-fe:叢集web管理介面。

go1.9.1

描述:codis依賴語言包

jdk1.8

描述:zookeeper依賴語言包

zookeeper-3.4.11

描述:用於存放資料配置路由表。zookeeper簡稱zk。在生產環境中,zk部署越多,其可靠性越高。由於zk叢集是以宕機個數過半才會讓整個叢集宕機,因此,奇數個

zk更佳。

2. 邏輯架構如下:

訪問層:訪問方式可以是類似keepalived叢集的vip方式,或者是通過java程式碼呼叫jodis控制元件再連線上zookeeper叢集,然後查詢到可用的proxy,進而連線呼叫不同的codis-proxy地址來實現高可用的LVSHA功能.

代理層:中間層由codis-proxyzookeeper處理資料走向和分配,通過crc32演算法,key平均分配在不同redis的某一個slot.實現類似raid0的條帶化,在舊版本的codis,slot需要手工分配,codis3.2之後,只要點一個按鈕slot會自動分配,相當方便,但是也可以手動分配,需要另外呼叫codis-admin命令.

資料層:最後codis-proxy把資料存進真實的redis-server主伺服器上,由於codis的作者黃東旭相當注重資料一致性,不允許有資料延時造成的資料不一致,所以架構從一開始就沒考慮主從讀寫分離.從伺服器僅僅是作為故障切換的冗餘架構,codis-dashboard監控各服務的狀態,然後通過改寫zookeeper資料和呼叫redis-sentinel實現故障切換功能.

1.png

3.因為機器有限,部署的架構如下:

zookeeper叢集:

10.0.2.5:2181

10.0.2.6:2181

10.0.2.7:2181

codis-configcodis-dashboard

10.0.2.6:18087

10.0.2.6:8090

codis-proxy

10.0.2.5:19000

10.0.2.7:19000

codis-server

10.0.2.5:6379(),10.0.2.5:6380()

10.0.2.6:6379(),10.0.2.6:6380()

10.0.2.7:6379(),10.0.2.7:6380()

安裝部署

1. 下載程式程式碼

1)下載golang語言程式包,

按正常途徑是要×××的,不過國內地址也有人放出來了,因為codis3.2要求至少是1.71.8以上版本的,那乾脆下最新版吧.

https://studygolang.com/dl/golang/go1.9.1.linux-amd64.tar.gz

2)下載java語言程式包,

Java的下載地址一直在變,所以最好自己上去看著來下載

http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1513326216_bcf60226458d67751e1d8d1bbe6689b4

3)下載zookeeper程式

直接就是程式包,不用編譯了,好方便

http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

4)下載codis3.2.1

直接就是程式包,不用編譯了,好方便

https://github.com/CodisLabs/codis/releases/download/3.2.1/codis3.2.1-go1.7.6-linux.tar.gz

2. 安裝程式

1) 安裝java

12345678910111213141516171819#解壓程式包tar xf jdk-8u144-linux-x64.tar.gz#移動到指定目錄mv jdk1.8.0_144/ /usr/local/#進入指定目錄,並建立程式軟連線cd /usr/local/ln -sf jdk1.8.0_144/ jdk#建立環境變數檔案echo export JAVA_HOME=/usr/local/jdk  export JRE_HOME=/usr/local/jdk/jre  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib  export PATH=$PATH:$JAVA_HOME/bin ”> /etc/profile.d/java.sh#過載環境變數source /etc/profile#測試檢查是否安裝完成java -versionjava version "1.8.0_144"Java(TM) SE Runtime Environment (build 1.8.0_144-b01)Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

安裝完畢

2) 安裝golang

123456789#解壓程式包tar xf go1.9.1.linux-amd64.tar.gz#移動到指定目錄mv go /usr/local/#把程式包裡的命令軟連線到系統預設命令目錄ln -sf /usr/local/go/bin//usr/bin/#測試檢查是否安裝完成go versiongo version go1.9.1 linux/amd64

安裝完成

3) 安裝zookeeper

1234567#解壓程式包tar xf zookeeper-3.4.11.tar.gz#移動到指定目錄mv zookeeper-3.4.11 /usr/local/#進入指定目錄,並建立程式軟連線cd /usr/local/ln -sf zookeeper-3.4.11/ zookeeper

安裝完成,等候配置.

4) 安裝codis

1234567#解壓程式包tar xf codis3.2.1-go1.7.6-linux.tar.gz#移動到指定目錄mv codis3.2.1-go1.7.6-linux /usr/local/#進入指定目錄,並建立程式軟連線cd /usr/local/ln -sf codis3.2.1-go1.7.6-linux/ codis

安裝完成,等候配置,因為我們用的都是二進位制程式包,只要依賴包有正常安裝,就不會報錯,直接就能用,所以安裝就很簡單.

3. 配置程式

1) 配置zookeeper,3臺一起都是這麼配置

1234567891011121314151617181920212223#設定hosts跳轉規則,好像不這麼設定的話,不能順利啟動echo “10.0.2.5        zookeeper-node110.0.2.6        zookeeper-node210.0.2.7        zookeeper-node3” >> /etc/hosts#建立程式目錄mkdir -p /data/zookeeper#建立配置檔案,資料夾裡有一個模板,有興趣可以看看vim /usr/local/zookeeper/conf/zoo.cfg#最大連線數設定(單ip限制). 注:預設60,設成0即無限制. maxClientCnxns=500#一個週期(tick)的時長(單位:毫秒). tickTime=28800#初始化同步階段最多耗費tick個數. 注:可用預設值initLimit=10#等待應答的最大間隔tick個數. 注:可用預設值syncLimit=5#資料儲存目錄,剛才建立那個. 注:勿放在/tmp目錄dataDir=/data/zookeeper/#通訊埠. 注:可用預設值clientPort=2181server.1=zookeeper-node1:2888:3888server.2=zookeeper-node2:2888:3888server.3=zookeeper-node3:2888:3888

生成ID,這裡需要注意, myid對應的zoo.cfgserver.ID.比如zookeeper-node2對應的myid應該是2,不按規定設定,zookeeper叢集將無法啟動

1echo "1"/data/zookeeper/myid

==============================================

例如:在zookeeper-node3那臺10.0.2.7的伺服器,就應該是

1echo "3"/data/zookeeper/myid

====================================================

#zoo.cfg最後三行特別說明

說明:server.A=BCD:其中 A 是一個數字,表示這個是第幾號伺服器;B 是這個伺服器的 ip 地址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的埠;D 表示的是萬一叢集中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的 Leader,而這個埠就是用來執行選舉時伺服器相互通訊的埠。

1234567#最後啟動,因為zookeeper的server是有順序的,最好是按順序啟動,先啟動server.1再啟動server2,最後啟動server.3這樣/usr/local/zookeeper/bin/zkServer.sh start#檢視狀態,會有follower和leader的區別,他們自己會選誰是leader/usr/local/zookeeper/bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgMode: follower

配置並啟動完畢.

2) 配置codis-server,3臺一起都是這麼配置

注意:codis-server就是redis-server程式,屬於codis優化版本,配合codis叢集使用.

所以就是配置個redis的主從結構,實際生產環境不要搭在一起

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#建立redis資料目錄,配置檔案目錄,日誌目錄mkdir -p /data/redis/data/config/mkdir -p /data/redis/data/logs/#建立主庫的配置檔案,暫時只配置這些,其他先預設vim /data/redis/data/config/redis_6379.conf#允許後臺執行daemonize yes#設定埠,最好是非預設埠port 6379#繫結登入IP,安全考慮,最好是內網bind *#命名並指定當前redis的PID路徑,用以區分多個redispidfile "/data/redis/data/config/redis_6379.pid"#命名並指定當前redis日誌檔案路徑logfile "/data/redis/data/logs/redis_6379.log"#指定RDB檔名,用以備份資料到硬碟並區分不同redis,當使用記憶體超過可用記憶體的45%時觸發快照功能dbfilename "dump_6379.rdb"#指定當前redis的根目錄,用來存放RDB/AOF檔案dir "/data/redis/data"#當前redis的認證金鑰,redis執行速度非常快,這個密碼要足夠強大,#所有codis-proxy叢集相關的redis-server認證密碼必須全部一致requirepass "123"#當前redis的最大容量限制,建議設定為可用記憶體的45%內,最高能設定為系統可用記憶體的95%,#可用config set maxmemory 去線上修改,但重啟失效,需要使用config rewrite命令去重新整理配置檔案#注意,使用codis叢集,必須配置容量大小限制,不然無法啟動maxmemory 100000kb#LRU的策略,有四種,看情況選擇maxmemory-policy allkeys-lru#如果做故障切換,不論主從節點都要填寫密碼且要保持一致masterauth "123"#建立從庫的配置檔案,暫時只配置這些,其他先預設vim /data/redis/data/config/redis_6380.conf#允許後臺執行daemonize yes#設定埠,最好是非預設埠port 6380#繫結登入IP,安全考慮,最好是內網bind *#命名並指定當前redis的PID路徑,用以區分多個redispidfile "/data/redis/data/config/redis_6380.pid"#命名並指定當前redis日誌檔案路徑logfile "/data/redis/data/logs/redis_6380.log"#指定RDB檔名,用以備份資料到硬碟並區分不同redis,當使用記憶體超過可用記憶體的45%時觸發快照功能dbfilename "dump_6380.rdb"#指定當前redis的根目錄,用來存放RDB/AOF檔案dir "/data/redis/data"#當前redis的認證金鑰,redis執行速度非常快,這個密碼要足夠強大#所有codis-proxy叢集相關的redis-server認證密碼必須全部一致requirepass "123"#當前redis的最大容量限制,建議設定為可用記憶體的45%內,最高能設定為系統可用記憶體的95%,#可用config set maxmemory 去線上修改,但重啟失效,需要使用config rewrite命令去重新整理配置檔案#注意,使用codis叢集,必須配置容量大小限制,不然無法啟動maxmemory 100000kb#LRU的策略,有四種,看情況選擇maxmemory-policy allkeys-lru#如果做故障切換,不論主從節點都要填寫密碼且要保持一致masterauth "123"#配置主節點資訊slaveof 10.0.2.5 6379

除了埠號不同帶來的檔名不同.實際上從庫配置只是多了最後一行,指定了主庫地址

1234567#然後就可以啟動了,我一開始就說過codis-server就是redis-server/usr/local/codis/codis-server /data/redis/data/config/redis_6379.conf/usr/local/codis/codis-server /data/redis/data/config/redis_6380.conf#驗證一下ss -ntplu |grep codis-servertcp    LISTEN     0      128       *:6379                  *:*                   users:(("codis-server",pid=2192,fd=4))tcp    LISTEN     0      128       *:6380                  *:*                   users:(("codis-server",pid=2197,fd=4))

啟動方式和redis-server一樣,指定配置檔案就可以啟動.這就配置並啟動成功了.

3) 配置redis-sentinel,3臺一起都是這麼配置

正確來說,redis-sentinel是要配置主從架構才能生效,但是在codis叢集中並不一樣,因為他的配置由zookeeper來維護,所以,這裡codis使用的redis-sentinel只需要配置一些基本配置就可以了.

12345678910111213141516171819202122#我們把配置放到redis資料目錄的配置檔案目錄vim /data/redis/data/config/sentinel.confbind 0.0.0.0protected-mode noport 26379dir "/data/redis/data"pidfile "/data/redis/data/config/sentinel_26379.pid"logfile "/data/redis/data/logs/sentinel_26379.log"daemonize yes#然後就可以啟動了/usr/local/codis/redis-sentinel /data/redis/data/config/sentinel.conf#驗證一下/usr/local/codis/redis-cli -p 26379 -c info Sentinel# Sentinelsentinel_masters:3sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=codis-test1-3,status=ok,address=10.0.2.7:6380,slaves=1,sentinels=3master1:name=codis-test1-1,status=ok,address=10.0.2.5:6379,slaves=1,sentinels=3master2:name=codis-test1-2,status=ok,address=10.0.2.6:6379,slaves=1,sentinels=3

配置並啟動成功.

注意:沒有配置好codis-dashboard會沒最後那幾行,因為還不受zookeeper

相關推薦

codis3.2.1叢集搭建測試

Codis是一套用go語言編寫的,為了應對高並環境下的redis叢集軟體,原理是對一個redis key操作前,先把這個key通過crc32演算法,分配到不同redis的某一個slot上,實現併發讀寫功能.而且能通過zookeeper呼叫redis-sentinel來實現故障

Kafka_2.12-2.5.1叢集搭建引數調優

Kafka是目前業界使用最廣泛的訊息佇列。資料流轉常見這樣的業務場景,客戶端把採集到的日誌推送給Kafka,業務方可以消費Kafka的資料落地HDFS,用於離線分析,也可以使用Spark或Flink消費Kafka中的資料,用於實時計算。Kafka在資料流轉過程中發揮著紐帶作用,可用於日誌採集和資料處理系統間的

hibernate框架學習筆記1搭建測試

for this ble action 1.7 turn yiq targe cts hibernate框架屬於dao層,類似dbutils的作用,是一款ORM(對象關系映射)操作 使用hibernate框架好處是:操作數據庫不需要寫SQL語句,使用面向對象的方式完成

Codis 3.2 集群搭建測試

rgb zookeepe -a 連接 負載 apple hub oca sent 這裏首選分為四個步驟進行一、軟件下載codis 3.2.2 https://github.com/CodisLabs/codis/releasescodis-src https://code

Tensorflow object detection API(1)---環境搭建測試

    參考: https://blog.csdn.net/dy_guox/article/details/79081499 https://blog.csdn.net/u010103202/article/details/79899293 https://blog.csdn.n

阿里雲Kubernetes實戰1叢集搭建服務暴露

前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢集,但後來還

Redis 3.2.1叢集搭建

一、概述     Redis3.0版本之後支援Cluster. 1.1、redis cluster的現狀    目前redis支援的cluster特性:   1):節點自動發現   2):slave->master 選舉,叢集容錯   3):Hot re

Spark修煉之道(進階篇)——Spark入門到精通:第十五節 Kafka 0.8.2.1 叢集搭建

作者:周志湖 微訊號:zhouzhihubeyond 本節為下一節Kafka與Spark Streaming做鋪墊 主要內容 1.kafka 叢集搭建 1. kafka 叢集搭建 kafka 安裝與配置 tar -zxvf kafka_2

Linux下Redis叢集搭建測試

叢集搭建 準備條件 一臺已經配置好Redis服務的虛擬機器,地址為: 192.168.2.100:6379 克隆6臺,使用命令nmtui修改地址分別為: 192.168.2.101 192.168.2.102 192.168.2.103 1

Elasticsearch5.2.1叢集搭建,動態加入節點,並新增監控診斷外掛

寫在前邊的話 ES5.2.1 叢集部署參考:http://blog.csdn.net/gamer_gyt/article/details/59077189 對於叢集的監控和優化是很重要的一部分,如果想持久維護叢集,單單靠增加實體記憶體,cpu,硬碟是不夠的,必須通過一些方法來進行優化。 叢

Centos-7.2搭建 Zookeeper-3.5.3 叢集搭建測試

《 Centos7下Zookeeper叢集的搭建與測試 》 前言: 在這兒通過搭建三個 zookeeper 例項,實現 zookeeper 的叢集環境的搭建工作,在實際開發工作中,將對應的 zookeeper 例項修改為各個 zookeeper 伺服器節點即可實

Yarn叢集搭建測試

一、叢集搭建 一、叢集規劃 主機名 IP地址 NN-1 NN-2 DN ZK ZKFC JNN RS NameNode

redis cluster叢集搭建深入分析(1

對於之前所講的master+slave進行讀寫分離同時通過sentinel叢集保障高可用的架構,對於一般的資料量系統已經足夠。但是對於資料量龐大的T級別的資料,單master可能就無法滿足橫向擴充套件的場景。所以redis cluster支援多master

Hadoop-2.4.1叢集搭建步驟

首先說明,博主以前也沒學過Hadoop,更別提Linux。只不過買了點資料,覺得不看也是浪費,索性找了時間學習了一下,別說,還真是吸引人。 言歸正傳,博主機器:筆記本 Y50-70 美版的 搭建環境:VM11(VMware Workstation 11),使用的是CenOS

Tensorflow object detection API 搭建屬於自己的物體識別模型(1)——環境搭建測試

後續部落格地址(附帶視訊教程)--------------------------------------------------------------------------------------------------最近對深度學習比較感興趣,看了網上很多資料,嘗試了

keepalived-1.4.2實踐:安裝測試

一、下載安裝1、作業系統:CentOS 7.4,先確保安裝了openssl,安裝方法: yum -y install openssl-devel沒有OpenSSL的話,configure會報錯: !!! OpenSSL is not properly installed on

Hadoop-2.6.0+Zookeeper-3.4.6+Spark-1.5.0+Hbase-1.1.2+Hive-1.2.0叢集搭建

前言 本部落格目的在於跟大家分享大資料平臺搭建過程,是筆者半年的結晶。在大資料搭建過程中,希望能給大家提過一些幫助,這也是本部落格的

Hadoop2.7.1+Hbase1.2.1叢集環境搭建(1)hadoop2.7.1原始碼編譯

        官網目前提供的下載包為32位系統的安裝包,在linux 64位系統下安裝後會一直提示錯誤“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-j

spark 2.3.1叢集搭建(Master,Slave,Slave)

基礎配置同上篇部落格 需要注意的配置有兩個 cd /usr/local/spark/ cp ./conf/slaves.template ./conf/slaves #slaves檔案設定Worker節點。編輯slaves內容,把預設內容localho

Storm(1.2.1)叢集環境搭建

1,Storm基礎介紹:Storm作為大資料處理框架之一,其和Spark一樣具有非常廣泛的使用,如下為Storm的架構圖: 在瞭解叢集配置安裝之前需要掌握如下幾個概念(concept):拓撲(Topologies):類似Hadoop的MapReduce 的任務(Job),區別