天天看點

Redis-codis與Zookeeper的叢集部署所需檔案

Redis-codis與Zookeeper的叢集部署

  • 所需檔案
    • 1.安裝zookeeper
    • 2.安裝配置Codis
    • 3.安裝配置redis

所需檔案

1. zookeeper-3.4.6
2. redis-3.0.1
           

1.安裝zookeeper

#解壓檔案到指定目錄/usr/local/下
tar xvzf zookeeper-3.4.6.tar.gz -C /usr/local/
#建立自己的zookeeper目錄
mv /usr/local/zookeeper-3.4.6/ /usr/local/zookeeper
#給指定賬戶授權(可以省略)
chown -R vjifen.vjifen /usr/local/zookeeper

#zookeeper基礎檔案操作
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
cd /usr/local/zookeeper/conf/
mkdir -p /data/zookeeper/data/
mkdir -p /data/zookeeper/logs/
echo "1" > /data/zookeeper/myid (與配置檔案zoo.cfg裡面server.1對應)

#配置環境變量(和jdk環境變量配置類似)
vi /etc/profile
ZOOKEEPER_HOME=/usr/local/zookeeper
PATH=$PATH:$ZOOKEEPER_HOME/bin
export  ZOOKEEPER_HOME PATH 
source /etc/profile

#zookeeper的zoo.cfg配置
vim zoo.cfg 
tickTime=2000  //Zookeeper伺服器之間或用戶端與伺服器之間的心跳時間
initLimit=10   //zookeeper叢集中允許follower連接配接并同步到leader的初始化連接配接時間,tickTime的倍數來表示.當超過設定倍數的tickTime,則連接配接失敗
syncLimit=5   //leader與follower之間發送消息,請求和應答時間長度.如果follower在設定的時間内不能與leader進行通信那麼此follower将被丢棄
dataDir=/data/zookeeper1/data  //儲存資料的目錄,預設情況下,Zookeeper将寫資料的日志檔案也儲存在這個目錄裡
dataLogDir=/data/zookeeper1/logs  //存放日志目錄
clientPort=2181  //監聽用戶端連接配接的端口
maxClientCnxns=60  //最大用戶端并發連接配接數(通過IP來區分)
#autopurge.snapRetainCount=3  //垃圾清理頻率,機關小時,預設0,表示不開啟清理功能
#autopurge.purgeInterval=1   //垃圾清理需要保留的檔案數目,預設是保留3個
#server.1=IP::2888:3888    
#server.2=slave-02:2888:3888    
#server.3=slave-03:2888:3888    

#啟動zookeeper
#修改zookeeper啟動記憶體:(可以不用)
vim /usr/local/zookeeper/bin/zkServer.sh
JVMPARAM="-Xms3072m -Xmx3072m"   //在49行加入
-cp "$CLASSPATH" $JVMPARAM $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &  //110行加入$JVMPARAM

#啟動zookeeper:--/usr/local/zookeeper/bin/zkServer.sh
zkServer.sh start  
zkServer.sh status
           

針對zoo.cfg多個server說明:

//server.A=B:C:D:

//其中 A 是一個數字,表示這個是第幾号伺服器;

//B 是這個伺服器的 ip 位址;

//C 表示的是這個伺服器與叢集中的Leader伺服器交換資訊的端口;

//D 表示的是萬一叢集中的Leader伺服器挂了,需要一個端口來重新進行選舉,選出一個新的Leader,

而這個端口就是用來執行選 舉時伺服器互相通信的端口。

//如果是僞叢集的配置方式,由于 B 都是一樣,是以不同的 Zookeeper 執行個體通信端口号不能一樣,

是以要給它們配置設定不同的端口号

//server.X=A:B:C 其中X是一個數字, 表示這是第幾号server. A是該server所在的IP位址. B配置該server和叢集中的leader交

換消息所使用的端口.

//C配置選舉leader時所使用的端口. 由于配置的是僞叢集模式, 是以各個server的B, C參數必須不同.

參照 zookeeper0/conf/zoo.cfg,

//配置zookeeper1/conf/zoo.cfg, 和 zookeeper2/conf/zoo.cfg檔案. 隻需更改dataDir, dataLogDir, clientPort參數即可.

//在之前設定的dataDir中建立myid檔案, 寫入一個數字, 該數字表示這是第幾号server. 該數字必須和zoo.cfg檔案中的server.X中的X一一對應.

//Users/apple/zookeeper0/data/myid檔案中寫入0, /Users/apple/zookeeper1/data/myid檔案中寫入1,

Users/apple/zookeeper2/data/myid檔案中寫入2.

//分别進入/Users/apple/zookeeper0/bin, /Users/apple/zookeeper1/bin, /Users/apple/zookeeper2/bin三個目錄, 啟動server.

任意選擇一個server目錄, 啟動用戶端:

注意:
	dataDir,dataLogDir中的wwb是目前登入使用者名,data,logs目錄開始是不存在,需要使用mkdir指令建立相應的目錄。
 	并且在該目錄下建立檔案myid;serve1,server2,server3指定的myid内容分别為1,2,3.
 	針對伺服器server2,server3可以将server1複制到相應的目錄,
 	不過需要注意dataDir,dataLogDir目錄,并且檔案myid内容分别為2,3
	zookeeper叢集時,zookeeper要求半數以上的機器可用,zookeeper才能提供服務
           

2.安裝配置Codis

Codis 并不太适合 key 少,但是 value 特别大的應用, 而且你的 key 越少, value 越大,最後就會退化成單個 redis 的

模型 (性能還不如 raw redis),是以 Codis 更适合海量 Key, value比較小 (<= 1 MB) 的應用。

codis-proxy 提供連接配接叢集redis服務的入口

codis-redis-group 實作redis讀寫的水準擴充,高性能

codis-redis 實作redis執行個體服務,通過codis-ha實作服務的高可用

#安裝go
su
tar -xvzf go1.4.1.linux-amd64.tar.gz -C /usr/local/
chown -R vjifen.vjifen /usr/local/go
mkdir /usr/local/codis

#配置環境變量
su vjifen
vi /etc/profile
GOROOT=/usr/local/go
GOPATH=/usr/local/codis
export PATH=$PATH:$GOROOT/bin GOROOT GOPATH
source /etc/profile 
           
#安裝codis
su
yum install -y git make gcc gcc-c++
go get github.com/wandoulabs/codis
chown -R vjifen.vjifen /usr/local/codis/

cd /usr/local/codis/src/github.com/wandoulabs/codis
make MALLOC=libc //如果執行下一步報錯,需要執行這一步
sh bootstrap.sh
mkdir -p /usr/local/codis/{log,start}

#注意:在github.com/wandoulabs/codis上下載下傳的codis源碼沒有sample檔案,在codis-2.0.2.tar.gz解壓後發現sample存在,但bin不存在,互相中和使用下。(針對下面cp的指令)
cp -rf bin/ /usr/local/codis/
cp sample/config.ini /usr/local/codis/bin/
cp -rf sample/*.sh /usr/local/codis/start
cp -rf sample/config.ini /usr/local/codis/start
cp -rf sample/usage.md /usr/local/codis/start
cp sample/redis_conf/6381.conf /data/redis/7000/redis.conf
cp sample/redis_conf/6381.conf /data/redis/7001/redis.conf

#配置redis.conf (以7000端口為例)
vim /data/redis/7000/redis.conf
daemonize yes   //開啟守護程序

#注意區分pidfile
pidfile /var/run/redis_7000.pid   //當Redis以守護程序方式運作時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定
port 7000   //redis監聽端口
tcp-backlog 511   //TCP監聽傳輸的最大隊列長度
bind 127.0.0.1   //綁定用戶端連接配接的網絡接口位址
timeout 0   //當用戶端閑置多長時間後關閉連接配接,如果指定為0,表示關閉該功能
tcp-keepalive 60   //TCP通信的探測頻率
loglevel notice   //定義日志級别

#注意區分logfile
logfile /data/redis/logs/redis_7000.log  //日志輸出格式及目錄
databases 16   //設定資料庫的數目.預設資料庫是 DB 0,你可以在每個連接配接上使用 select <dbid> 指令選擇一個不同的資料庫
save 900 1     //指定資料持久化政策,例如:900秒内至少有一個key值變化就寫入.也可關閉持久化
save 300 10
save 60 10000
stop-writes-on-bgsave-error no //預設情況下,如果redis最後一次的背景儲存失敗,redis将停止接受寫操作,這樣以一種強硬的方式讓使用者知道資料不能正确的持久化到磁盤,否則就會沒人注意到災難的發生。如果背景儲存程序重新啟動工作了,redis 也将自動的允許寫操作。然而你要是安裝了靠譜的監控,你可能不希望 redis 這樣做,那你就改成 no 好了.
rdbcompression yes   //是否在dump.rdb資料庫的時候使用LZF壓縮字元串
rdbchecksum yes    //是否校驗rdb檔案

#注意區分dbfilename
dbfilename dump_7000.rdb   //指定資料庫快照存儲檔案名
dir /data/redis/data   //指定dump.rdb存放位置
maxmemory 4096MB   //最大使用記憶體
maxmemory-policy volatile-lru   //使用LRU算法移除包含過期設定的key
appendonly no   //預設不開啟AOF

配置codis-config和codis-proxy:
cd /usr/local/codis
vim config.ini
zk=localhost:2181  //zookeeper位址,如果是zookeeper叢集可以這麼寫:zk=hostname1:2181,hostname2:2181,hostname3:2181.如果是etcd,則寫成http://hostname1:port,http://hostname2:port,http://hostname3:port
product=vjifen  //産品名稱,這個codis叢集的名字,可以認為是命名空間,不同命名空間的codis沒有交集
proxy_id=proxy_1  //proxy會讀取,用于标記proxy的名字,針對多個proxy的情況,可以使用不同的config.ini,隻需要更改proxy_id即可
net_timeout=5  //檢測狀态時間間隔	
dashboard_addr=localhost:18087  //dashboard服務位址,CLI的所有指令都依賴于dashboard的RESTful API,是以必須啟動
coordinator=zookeeper  //說明使用的分布式伺服器是zookeeper,如果用etcd則直接修改成etcd即可
           
#啟動codis-redis服務
/usr/local/codis/bin/codis-server /data/redis/7000/redis.conf
/usr/local/codis/bin/codis-server /data/redis/7001/redis.conf
           
cat usage.md  //檢視啟動流程文檔
0. start zookeeper       //啟動zookeeper服務
1. change config items in config.ini  //修改codis配置檔案
2. ./start_dashboard.sh  //啟動 dashboard
3. ./start_redis.sh      //啟動redis執行個體
4. ./add_group.sh        //添加redis組,一個redis組隻能有一個master
5. ./initslot.sh         //初始化slot,會在zookeeper上建立slot相關資訊
6. ./start_proxy.sh      //啟動proxy
7. ./set_proxy_online.sh  //上線proxy項目
8. open browser to http://IP(123.57.211.100):18087/admin //通路web進入控制台
           

注意:有些順序不是必須的,但啟動dashboard前,必須啟動zookeeper服務,這是必須的,後面有很多操作,都可以在web頁面完成,例如添加/删除組,添加/删除redis執行個體等

除了web頁面可以操作外,也可以使用一下指令添加/删除組,添加/删除redis執行個體

首先進入:/usr/local/codis/bin
#檢視目前叢集中組,redis執行個體的清單
codis-config server list
#把一個執行個體添加到叢集的某個組中,并指明主從,一個組中隻能一個主
codis-config server add <group_id><redis_addr><role> 
#把一個執行個體從叢集的某個組中删除
codis-config server remove <group_id><redis_addr> 
#把某個執行個體在某個組中提升為主
codis-config server promote <group_id><redis_addr> 
#建立組
codis-config server add-group <group_id> 
#删除組
codis-config server remove-group <group_id>  
           
#啟動dashboard.sh
cd /usr/local/codis/start  
mv ../log/ start/     //log檔案夾可以放到非系統盤,做軟連接配接即可
./start_dashboard.sh

#看一下是否啟動成功
ps -ef | grep dashboard   
           

注意:

1.在關閉start_dashboard.sh時需要使用kill pid文法,沒有-9指令,否則再次啟動時會出現無法啟動;

如果誤用了kill -9 的指令,解決方法是:進入zk的用戶端,ls /zk/codis/db_vjifen,

然後删除rmr /zk/codis/db_vjifen/dashboard即可;

如果緩存資料未使用情況下也可以把整個db_vjifen删除掉即可,啟動zookeeper後會自動再次建立。

2. ./initslot.sh //執行這一步時會提示找不到group,是因為還沒有配置redies

注意:如果初始化槽失敗(錯誤:500錯誤,多個代理需要停止清理),此時把配置檔案中的127.0.0.1或者localhost修改成本機的IP

./start_proxy.sh   //啟動codis-proxy.可修改start_proxy.sh檔案,自定義啟動參數
./set_proxy_online.sh  //讓proxy上線,或點選頁面上Proxy Status裡的Mark Online.可修改set_proxy_online.sh檔案,自定義啟動參數
           

注意:由于codis-config啟動的http server沒有驗證規則,是以如果從外網通路會很不安全,現有的方法是在伺服器配置iptales規則做限制

配置codis-ha服務,主從自動切換。( 此環境在安裝codis中的211.100機器上配置 )
[[email protected] ~]# go get github.com/ngaut/codis-ha
[[email protected] ~]# cd /usr/local/codis/src/github.com/ngaut
[[email protected] ~]# cp -r codis-ha /usr/local/
[[email protected] ~]# cd /usr/local/codis-ha
[[email protected] codis-ha ]# go build
 
建立啟動腳本,啟動codis-ha服務(有時候go build後可能沒有start_codis_ha.sh,
如果沒有則需要直接使用指令:./codis-ha --codis-config=123.57.211.100<此IP要寫對>:18087 -log-level="info" --productName=vjifen &> ./logs/codis-ha.log & 啟動即可)
[[email protected] ~]# vim /usr/local/codis-ha/start_codis_ha.sh
#!/bin/sh
./codis-ha --codis-config=123.57.211.100:18087 -log-level="info" --productName=vjifen &> ./logs/codis-ha.log &
 
建立日志目錄
[[email protected] ~]# mkdir /usr/local/codis-ha/logs
[[email protected] ~]# cd /usr/local/codis-ha/
[[email protected] codis-ha ]# sh start_codis_ha.sh
           

3.安裝配置redis

如果不安裝也可以使用codis中的codis-redis代替

其他伺服器上裝的redis,通過codis 的 dashboard 關聯主從來使用

su
pwd
/home/vjifen
tar xvzf redis-3.0.1.tar.gz -C /usr/local/
mv /usr/local/redis-3.0.1/ /usr/local/redis 
chown -R vjifen.vjifen /usr/local/redis/
su vjifen
mkdir -p /data/redis/data ; mkdir /data/redis/logs
cd /usr/local/redis/

make
#make指令執行完成後,會在/usr/local/bin(bin下沒有去看/usr/local/redis/src下)目錄下生成本個可執行檔案,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它們的作用如下:
redis-server:Redis伺服器的daemon啟動程式
redis-cli:Redis指令行操作工具.也可以用telnet根據其純文字協定來操作
redis-benchmark:Redis性能測試工具,測試Redis在目前系統下的讀寫性能
redis-check-aof:資料修複
redis-check-dump:檢查導出工具

cp -a /usr/local/redis/redis.conf /data/redis/7000/redis.conf 
cp -a /usr/local/redis/redis.conf /data/redis/7001/redis.conf


#配置redis.conf (以7000端口為例)
vim /data/redis/7000/redis.conf
daemonize yes   //開啟守護程序
pidfile /var/run/redis_7000.pid   //當Redis以守護程序方式運作時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定
port 7000   //redis監聽端口
tcp-backlog 511   //TCP監聽傳輸的最大隊列長度
bind 127.0.0.1   //綁定用戶端連接配接的網絡接口位址
timeout 0   //當用戶端閑置多長時間後關閉連接配接,如果指定為0,表示關閉該功能
tcp-keepalive 60   //TCP通信的探測頻率
loglevel notice   //定義日志級别
logfile /data/redis/logs/redis.log  //日志輸出格式及目錄
databases 16   //設定資料庫的數目.預設資料庫是 DB 0,你可以在每個連接配接上使用 select <dbid> 指令選擇一個不同的資料庫
save 900 1     //指定資料持久化政策,例如:900秒内至少有一個key值變化就寫入.也可關閉持久化
save 300 10
save 60 10000
stop-writes-on-bgsave-error no //預設情況下,如果redis最後一次的背景儲存失敗,redis将停止接受寫操作,這樣以一種強硬的方式讓使用者知道資料不能正确的持久化到磁盤,否則就會沒人注意到災難的發生。如果背景儲存程序重新啟動工作了,redis 也将自動的允許寫操作。然而你要是安裝了靠譜的監控,你可能不希望 redis 這樣做,那你就改成 no 好了.
rdbcompression yes   //是否在dump.rdb資料庫的時候使用LZF壓縮字元串
rdbchecksum yes    //是否校驗rdb檔案
dbfilename dump.rdb   //指定資料庫快照存儲檔案名
dir /data/redis/data   //指定dump.rdb存放位置
maxmemory 4096MB   //最大使用記憶體
maxmemory-policy volatile-lru   //使用LRU算法移除包含過期設定的key
appendonly no   //預設不開啟AOF

#啟動redis
/usr/local/redis/src/redis-server /data/redis/7000/redis.conf   
/usr/local/redis/src/redis-server /data/redis/7001/redis.conf 
           

以上分享純屬個人觀點,歡迎大家來探讨!

如需轉載,請注明作者出處

作者:hanshimeng

出處:https://blog.csdn.net/hanshimeng

繼續閱讀