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:屬於
codis-proxy:客戶端連線的 Redis 代理服務, 實現了 Redis 協議。 除部分命令不支援以外(例如:keys *,flush ),表現的和原生的 Redis 沒有區別(就像 Twemproxy)。
redis-sentinel:可以實現對Redis的監控、通知、自動故障轉移。如果Master不能工作,則會自動啟動故障轉移程序,將其中的一個Slave提升為Master,其他的Slave重新設定新的Master服務。Sentinel的配置由 codis-dashboard
codis-dashboard:叢集管理工具,支援 codis-proxy、codis-server 的新增、刪除,以及據遷移等操作。在叢集狀態發生改變時,codis-dashboard 維護叢集下所有 codis-proxy 的狀態的一致性。
codis-fe:叢集web管理介面。
go1.9.1
描述:codis依賴語言包
jdk1.8
描述:zookeeper依賴語言包
zookeeper-3.4.11
描述:用於存放資料配置路由表。zookeeper簡稱zk。在生產環境中,zk部署越多,其可靠性越高。由於zk叢集是以宕機個數過半才會讓整個叢集宕機,因此,奇數個
2. 邏輯架構如下:
訪問層:訪問方式可以是類似keepalived叢集的vip方式,或者是通過java程式碼呼叫jodis控制元件再連線上zookeeper叢集,然後查詢到可用的proxy端,進而連線呼叫不同的codis-proxy地址來實現高可用的LVS和HA功能.
代理層:中間層由codis-proxy和zookeeper處理資料走向和分配,通過crc32演算法,把key平均分配在不同redis的某一個slot中.實現類似raid0的條帶化,在舊版本的codis中,slot需要手工分配,在codis3.2之後,只要點一個按鈕slot會自動分配,相當方便,但是也可以手動分配,需要另外呼叫codis-admin命令.
資料層:最後codis-proxy把資料存進真實的redis-server主伺服器上,由於codis的作者黃東旭相當注重資料一致性,不允許有資料延時造成的資料不一致,所以架構從一開始就沒考慮主從讀寫分離.從伺服器僅僅是作為故障切換的冗餘架構,由codis-dashboard監控各服務的狀態,然後通過改寫zookeeper資料和呼叫redis-sentinel實現故障切換功能.
3.因為機器有限,部署的架構如下:
zookeeper叢集:
10.0.2.5:2181
10.0.2.6:2181
10.0.2.7:2181
codis-config和codis-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.7或1.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 -version java 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 version go 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-node1 10.0.2.6 zookeeper-node2 10.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=2181 server.1=zookeeper-node1:2888:3888 server.2=zookeeper-node2:2888:3888 server.3=zookeeper-node3:2888:3888 |
生成ID,這裡需要注意, myid對應的zoo.cfg的server.ID.比如zookeeper-node2對應的myid應該是2,不按規定設定,zookeeper叢集將無法啟動.
1 | echo "1" > /data/zookeeper/myid |
==============================================
例如:在zookeeper-node3那臺10.0.2.7的伺服器,就應該是
1 | echo "3" > /data/zookeeper/myid |
====================================================
#zoo.cfg最後三行特別說明
說明:server.A=B:C:D:其中 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 status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/ .. /conf/zoo .cfg Mode: 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路徑,用以區分多個redis pidfile "/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路徑,用以區分多個redis pidfile "/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-server tcp 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 .conf bind 0.0.0.0 protected-mode no port 26379 dir "/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 # Sentinel sentinel_masters:3 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=codis-test1-3,status=ok,address=10.0.2.7:6380,slaves=1,sentinels=3 master1:name=codis-test1-1,status=ok,address=10.0.2.5:6379,slaves=1,sentinels=3 master2:name=codis-test1-2,status=ok,address=10.0.2.6:6379,slaves=1,sentinels=3 |
配置並啟動成功.
注意:沒有配置好codis-dashboard會沒最後那幾行,因為還不受zookeeper
Codis是一套用go語言編寫的,為了應對高並環境下的redis叢集軟體,原理是對一個redis key操作前,先把這個key通過crc32演算法,分配到不同redis的某一個slot上,實現併發讀寫功能.而且能通過zookeeper呼叫redis-sentinel來實現故障 Kafka是目前業界使用最廣泛的訊息佇列。資料流轉常見這樣的業務場景,客戶端把採集到的日誌推送給Kafka,業務方可以消費Kafka的資料落地HDFS,用於離線分析,也可以使用Spark或Flink消費Kafka中的資料,用於實時計算。Kafka在資料流轉過程中發揮著紐帶作用,可用於日誌採集和資料處理系統間的 for this ble action 1.7 turn yiq targe cts hibernate框架屬於dao層,類似dbutils的作用,是一款ORM(對象關系映射)操作
使用hibernate框架好處是:操作數據庫不需要寫SQL語句,使用面向對象的方式完成
rgb zookeepe -a 連接 負載 apple hub oca sent 這裏首選分為四個步驟進行一、軟件下載codis 3.2.2 https://github.com/CodisLabs/codis/releasescodis-src https://code
參考:
https://blog.csdn.net/dy_guox/article/details/79081499
https://blog.csdn.net/u010103202/article/details/79899293
https://blog.csdn.n 前言:
考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。
由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢集,但後來還
一、概述
Redis3.0版本之後支援Cluster.
1.1、redis cluster的現狀
目前redis支援的cluster特性:
1):節點自動發現
2):slave->master 選舉,叢集容錯
3):Hot re
作者:周志湖
微訊號:zhouzhihubeyond
本節為下一節Kafka與Spark Streaming做鋪墊
主要內容
1.kafka 叢集搭建
1. kafka 叢集搭建
kafka 安裝與配置
tar -zxvf kafka_2
叢集搭建
準備條件
一臺已經配置好Redis服務的虛擬機器,地址為:
192.168.2.100:6379
克隆6臺,使用命令nmtui修改地址分別為:
192.168.2.101
192.168.2.102
192.168.2.103
1
寫在前邊的話
ES5.2.1 叢集部署參考:http://blog.csdn.net/gamer_gyt/article/details/59077189
對於叢集的監控和優化是很重要的一部分,如果想持久維護叢集,單單靠增加實體記憶體,cpu,硬碟是不夠的,必須通過一些方法來進行優化。
叢
《 Centos7下Zookeeper叢集的搭建與測試 》
前言:
在這兒通過搭建三個 zookeeper 例項,實現 zookeeper 的叢集環境的搭建工作,在實際開發工作中,將對應的 zookeeper 例項修改為各個 zookeeper 伺服器節點即可實
一、叢集搭建
一、叢集規劃
主機名
IP地址
NN-1
NN-2
DN
ZK
ZKFC
JNN
RS
NameNode
對於之前所講的master+slave進行讀寫分離同時通過sentinel叢集保障高可用的架構,對於一般的資料量系統已經足夠。但是對於資料量龐大的T級別的資料,單master可能就無法滿足橫向擴充套件的場景。所以redis cluster支援多master
首先說明,博主以前也沒學過Hadoop,更別提Linux。只不過買了點資料,覺得不看也是浪費,索性找了時間學習了一下,別說,還真是吸引人。
言歸正傳,博主機器:筆記本 Y50-70 美版的
搭建環境:VM11(VMware Workstation 11),使用的是CenOS
後續部落格地址(附帶視訊教程)--------------------------------------------------------------------------------------------------最近對深度學習比較感興趣,看了網上很多資料,嘗試了
一、下載安裝1、作業系統:CentOS 7.4,先確保安裝了openssl,安裝方法: yum -y install openssl-devel沒有OpenSSL的話,configure會報錯: !!! OpenSSL is not properly installed on
前言
本部落格目的在於跟大家分享大資料平臺搭建過程,是筆者半年的結晶。在大資料搭建過程中,希望能給大家提過一些幫助,這也是本部落格的
官網目前提供的下載包為32位系統的安裝包,在linux 64位系統下安裝後會一直提示錯誤“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-j
基礎配置同上篇部落格
需要注意的配置有兩個
cd /usr/local/spark/
cp ./conf/slaves.template ./conf/slaves
#slaves檔案設定Worker節點。編輯slaves內容,把預設內容localho
1,Storm基礎介紹:Storm作為大資料處理框架之一,其和Spark一樣具有非常廣泛的使用,如下為Storm的架構圖: 在瞭解叢集配置安裝之前需要掌握如下幾個概念(concept):拓撲(Topologies):類似Hadoop的MapReduce 的任務(Job),區別 相關推薦
codis3.2.1叢集搭建與測試
Kafka_2.12-2.5.1叢集搭建與引數調優
hibernate框架學習筆記1:搭建與測試
Codis 3.2 集群搭建與測試
Tensorflow object detection API(1)---環境搭建與測試
阿里雲Kubernetes實戰1–叢集搭建與服務暴露
Redis 3.2.1叢集搭建
Spark修煉之道(進階篇)——Spark入門到精通:第十五節 Kafka 0.8.2.1 叢集搭建
Linux下Redis叢集搭建與測試
Elasticsearch5.2.1叢集搭建,動態加入節點,並新增監控診斷外掛
Centos-7.2 下搭建 Zookeeper-3.5.3 叢集的搭建與測試
Yarn叢集的搭建與測試
redis cluster叢集搭建與深入分析(1)
Hadoop-2.4.1叢集搭建步驟
Tensorflow object detection API 搭建屬於自己的物體識別模型(1)——環境搭建與測試
keepalived-1.4.2實踐:安裝與測試
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原始碼編譯
spark 2.3.1叢集搭建(Master,Slave,Slave)
Storm(1.2.1)叢集環境搭建