codis3.1集羣搭建

codis 3.1 安裝搭建

一.基本信息

1. 服務器基本信息

ip地址 安裝服務
172.16.200.71 zk一、codis-dashboard、codis-fe、codis-ha、 codis-proxy一、group1_M(6379)、group2_S(6380)
172.16.200.72 zk二、codis-proxy二、group2_M(6379)、group3_S(6380)
172.16.200.73 zk三、codis-proxy三、group3_M(6379)、group1_S(6380)

參考文檔: https://github.com/CodisLabs/codis/blob/release3.1/doc/tutorial_zh.md前端

2. 環境信息

2.1 codis版本:3.1 版本

git clone https://github.com/CodisLabs/codis.git -b release3.1

2.2 Go使用版本:go1.5.2.Linux-amd64.tar.gz

https://golang.org/doc/install?download=go1.5.2.linux-amd64.tar.gz

2.3 jdk版本:jdk1.8.0_11

http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz

2.4 zookeeper版本:zookeeper-3.4.8.tar.gz

http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

二.部署codis

1. 相關組件安裝配置

1.1 安裝所需依賴包

三臺主機上執行java

yum install -y gcc make gcc-c++ automake lrzsz openssl-devel zlib-* bzip2-* readline* zlib-* bzip2-* git nmap unzip wget lsof xz net-tools mercurial vim

1.2 修改內核

三臺主機上執行node

vi /etc/sysctl.conf
vm.overcommit_memory = 1
sysctl vm.overcommit_memory=1

手工執行:linux

echo never > /sys/kernel/mm/transparent_hugepage/enabled

並加到 /etc/rc.local中c++

2.安裝go(三臺主機上執行)

2.1 下載go

cd /usr/local/src
wget https://golang.org/doc/install?download=go1.5.2.linux-amd64.tar.gz

2.2 解包

cd /usr/local/src
tar -C /usr/local -xzf go1.5.2.linux-amd64.tar.gz

2.3 新建gopath

mkdir /usr/local/gopkg

2.4 配置go環境變量

vim /etc/profile

添加以下信息git

export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopkg
export PATH=$GOROOT/bin:$PATH

刷新配置文件:github

source /etc/profile

查看go版本:golang

[root@codis01 ~]#go version
go version go1.5.2 linux/amd64

2.5 godep安裝

安裝godep坑比較多,可以使用一下兩種方式安裝redis

  • 離線安裝 godep 方法:
    運行 git clone https://github.com/tools/godep.git 下載 godep 源碼;
    將 godep 目錄移動到 /usr/loca/gopkg/src/github.com/tools/godep,並進入該目錄;
    運行命令 go install ./,該命令會將 godep 生成到/usr/loca/gopkg/bin 下。apache

  • 將編譯好的godep上傳到/usr/bin下

通過對比,我選擇第二種方式,直接將編譯好的godep上傳到/usr/bin/

查看godep命令路徑

[root@codis01 ~]# which godep
/usr/bin/godep

查看godep版本

[root@codis01 ~]# godep version
godep v1 (linux/amd64/go1.4.2)

3.安裝jdk(三臺主機上執行)

cd /usr/loca/src/
tar -C /usr/local/ -xzf /usr/local/src/jdk-8u111-linux-x64.tar.gz

配置java環境變量

vim /etc/profile

添加以下信息

export JAVA_HOME=/usr/local/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

刷新配置文件:

source /etc/profile

查看go版本:

[root@codis01 ~]#java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

4.安裝zookeeper(三臺主機上執行)

4.1 安裝zookeeper

cd /usr/local/src/
tar -C /usr/local/ -xzf zookeeper-3.4.8.tar.gz
cd /usr/local/zookeeper-3.4.8
ln -s zookeeper-3.4.8 zookeeper

4.2 生成配置文件

cd /usr/local/zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg

4.3 修改zookeeper配置文件

vim /usr/local/zookeeper/conf/zoo.cfg

修改如下內容

maxClientCnxns=60
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/data/logs/zookeeper
clientPort=2181
server.1=172.15.200.71:2888:3888
server.2=172.15.200.72:2888:3888
server.3=172.15.200.73:2888:3888
2888表示zookeeper程序監聽端口,3888表示zookeeper選舉通訊端口。

4.4 建立所需文件夾

mkdir -p /usr/local/zookeeper/data
mkdir -p /data/logs/zookeeper

4.5 生成myid

主機(172.16.200.71)

echo "1" >/usr/local/zookeeper/data/myid  ##生成ID,這裏須要注意, myid對應的zoo.cfg的server.ID,好比第二臺zookeeper主機對應的myid應該是2

主機(172.16.200.72)

echo "2" >/usr/local/zookeeper/data/myid

主機(172.16.200.73)

echo "3" >/usr/local/zookeeper/data/myid

4.6 啓動zookeeper

cd /usr/local/zookeeper/bin
./zkServer.sh start#

4.7 關閉zookeeper

cd /usr/local/zookeeper/bin
./zkServer.sh stot

4.8 查看zk狀態

cd /usr/local/zookeeper/bin
./zkServer.sh status

4.9 查看相關信息:

/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

5.安裝codis(三臺主機上執行)

5.1 下載codis

mkdir -p /usr/local/gopkg/src/github.com/CodisLabs/
cd /usr/local/gopkg/src/github.com/CodisLabs/
git clone https://github.com/CodisLabs/codis.git -b release3.1

5.2 編譯codis

cd /usr/local/gopkg/src/github.com/CodisLabs/codis
make

5.3 查看bin

[root@codis01 codis]# ll bin/
總用量 82728
drwxr-xr-x 4 root root      111 12月 18 21:54 assets
-rwxr-xr-x 1 root root 18261200 12月 18 21:54 codis-admin
-rwxr-xr-x 1 root root 19101304 12月 18 21:54 codis-dashboard
-rwxr-xr-x 1 root root 17655424 12月 18 21:54 codis-fe
-rwxr-xr-x 1 root root 10032096 12月 18 21:54 codis-ha
-rwxr-xr-x 1 root root 11202080 12月 18 21:54 codis-proxy
-rwxr-xr-x 1 root root  4167892 12月 18 21:54 codis-server
-rwxr-xr-x 1 root root  2073794 12月 18 21:54 redis-benchmark
-rwxr-xr-x 1 root root  2197701 12月 18 21:54 redis-cli
-rw-r--r-- 1 root root      148 12月 18 21:54 version
[root@zt-redis01 codis]#

執行所有指令後,會在 bin 文件夾內生成 codis-admin、codis-dashboard、codis-fe、codis-ha、codis-proxy、codis-server 六個可執行文件。
另外, bin/assets 文件夾是 codis-dashboard http 服務須要的前端資源, 須要和codis-dashboard 放置在同一文件夾下

5.4 建立codis所需目錄

mkdir -p /usr/local/codis
mkdir -p /data/logs/codis
mkdir -p /data/codis/redis_conf
mkdir -p /data/components/redis

5.5 拷貝codis的bin目錄

cp -r /usr/local/gopkg/src/github.com/CodisLabs/codis/bin  /usr/local/codis/

因爲codis 自己只有codis-server ,沒有Redis-cli,須要把redis 2.8.21 安裝包裏面的redis-cli copy到/usr/local/codis/bin 下面:

cd /usr/local/gopkg/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src
cp redis-cli /usr/local/codis/bin

5.6 配置和啓動各組件

配置和啓動 Codis的Redis
配置文件 : /usr/local/codis/redis_conf/redis6379.conf
設置密碼: xxxxx
考慮性能,主庫關閉aof和rdp,從庫只開啓aof:

cd /usr/local/gopkg/src/github.com/CodisLabs/codis/extern/redis-2.8.21/
cp redis.conf /usr/local/codis/conf/redis6379.conf
cp redis.conf /usr/local/codis/conf/redis6380.conf

將redis6379.conf更改如下參數(主庫):

daemonize yes
pidfile /usr/locai/codis/run/redis6379.pid
port 6379
timeout 86400
tcp-keepalive 60
loglevel notice
logfile /data/logs/codis/redis6379.log
databases 16
save ""
 #save 900 1    ----關閉aof
 #save 300 10
 #save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump6379.rdb
dir /data/codis/redis_data_6379
masterauth "xxxxx"
slave-serve-stale-data yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "xxxxx"
maxmemory 10gb
maxmemory-policy allkeys-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 0 0 0
hz 10
aof-rewrite-incremental-fsync yes
repl-backlog-size 33554432

將redis6380.conf更改如下參數(從庫):

daemonize yes
pidfile /usr/local/codis/run/redis6380.pid
port 6380
timeout 86400
tcp-keepalive 60
loglevel notice
logfile /data/logs/codis/redis6380.log
databases 16
save ""
 #save 900 1    ----關閉aof
 #save 300 10
 #save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump6379.rdb
dir /data/codis/redis_data_6380
masterauth "xxxxx"
slave-serve-stale-data yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "xxxxx"
maxmemory 10gb
maxmemory-policy allkeys-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 0 0 0
hz 10
aof-rewrite-incremental-fsync yes
repl-backlog-size 33554432

5.7 啓動redis

/usr/local/codis/bin/codis-server  /usr/local/codis/redis_conf/redis6379.conf &
/usr/local/codis/bin/codis-server  /usr/local/codis/redis_conf/redis6380.conf &

三. 配置codis

1. Codis Dashboard

Coddis3.0的dashboard與codis 2.0有所不一樣,做爲集羣管理工具,它支持codis-proxy,codis-server的添加、刪除以及數據遷移等操做。在集羣狀態發生改變時,codis-dashboard 維護集羣下全部 codis-proxy 的狀態一致性。有如下兩點注意事項:

  • 對於同一個業務集羣而言,同一個時刻codis-dashboard只能有0個或者1個;
  • 全部對集羣的修改都必須經過codis-dashboard完成。

    1.1 配置Codis Dashboard

    默認配置文件dashboard.toml可由codis-dashboard生成。

#/usr/local/codis/bin/codis-dashboard  --default-config | tee  dashboard.toml(就是dashboard.conf)

生成dashboard.toml文件,可自行配置。

# Set Coordinator, only accept"zookeeper"&"etcd"
coordinator_name = "zookeeper"
coordinator_addr = "172.16.200.71:2181,172.16.200.72:2181,172.16.200.73:2181"        #zookeeper是集羣的話就寫多個ip和端口用逗號隔開
# Set Codis Product {Name/Auth}
product_name = "codis-demo"
product_auth = ""
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"

參數說明:

coordinator_name              外部存儲類型,接受 zookeeper/etcd
coordinator_addr                外部存儲地址
product_name                    集羣名稱,知足正則 \w[\w\.\-]*
product_auth                      集羣密碼,默認爲空
admin_addr                        RESTful API 端口

1.2 啓動Codis Dashboard

nohup   /usr/local/codis/bin/codis-dashboard   --ncpu=4    --config=dashboard.toml(這裏指定dashboard.conf也能夠)   --log=dashboard.log      --log-level=WARN  &
#bin/codis-dashboard   -h
Usage:
codis-dashboard [--ncpu=N][--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR]
codis-dashboard  --default-config
codis-dashboard  --version

參數說明:

--ncpu=N                               最大使用 CPU 個數
 -c  CONF, --config=CONF      指定啓動配置文件
 -l   FILE, --log=FILE                 設置 log 輸出文件
--log-level=LEVEL             設置log輸出等級:INFO,WARN,DEBUG,ERROR;默認INFO,推薦WARN
正常關閉dashboard命令:     bin/codis-admin   --dashboard=172.16.200.71:18080   --shutdown

2. Codis Proxy

對於同一個業務集羣而言,能夠同時部署多個codis-proxy 實例;
不一樣 codis-proxy 之間由 codis-dashboard 保證狀態同步。

2.1 配置proxy

默認配置文件 proxy.toml 可由 codis-proxy 生成。

/usr/local/codis/bin/codis-proxy --default-config | tee proxy.toml(proxy.conf)

生成proxy.toml可自行配置。

# Set Codis Product {Name/Auth}.
product_name = "codis-demo"
product_auth = ""
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080"
# Set bind address for proxy, proto_type can be "tcp","tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
 # Set jodis address & session timeout.
jodis_addr = ""
jodis_timeout = 10
# Proxy will ping-pong backend redis periodly to keep-alive
backend_ping_period = 5
# If there is no request from client for a long time, the connectionwill be droped. Set 0 to disable.
session_max_timeout = 1800
# Buffer size for each client connection.
session_max_bufsize = 131072
# Number of buffered requests for each client connection.
# Make sure this is higher than the max number of requests for eachpipeline request, or your client may be blocked.
session_max_pipeline = 1024
# Set period between keep alives. Set 0 to disable.
session_keepalive_period = 60

參數說明:

product_name 集羣名稱,參考dashboard參數說明
product_auth 集羣密碼,默認爲空
admin_addr RESTfulAPI 端口
proto_type Redis 端口類型,接受tcp/tcp4/tcp6/unix/unixpacket
proxy_addr Redis 端口地址或者路徑
jodis_addr Jodis註冊zookeeper地址
jodis_timeout Jodis註冊sessiontimeout時間,單位second
jodis_compatible Jodis註冊 zookeeper 的路徑
backend_ping_period 與codis-server 探活週期,單位second,0表示禁止
session_max_timeout 與client 鏈接最大讀超時,單位second,0表示禁止
session_max_bufsize 與client 鏈接讀寫緩衝區大小,單位byte
session_max_pipeline 與client 鏈接最大的pipeline大小
session_keepalive_period 與client 的 tcp keepalive週期,僅tcp有效,0表示禁止

2.2 啓動proxy

nohup /usr/local/codis/bin/codis-proxy --ncpu=4 --config=proxy.toml \
--log=proxy.log --log-level=WARN &

codis-proxy啓動後,處於 waiting 狀態,監聽proxy_addr 地址,可是不會accept鏈接。添加到集羣並完成集羣狀態的同步,才能改變狀態爲online。添加的方法有如下兩種:

經過codis-fe添加:經過Add Proxy按鈕,將admin_addr加入到集羣中;
經過codis-admin命令行工具添加,方法以下:

最好採用經過codis-fe添加

/usr/local/codis/bin/codis-admin --dashboard=172.16.200.71:18080 --create-proxy -x 172.16.200.71:11080

其中172.16.200.71:18080 以及172.16.200.71:11080 分別爲dashboard和proxy的admin_addr 地址。
添加過程當中,dashboard會完成以下一系列動做:
① 獲取 proxy 信息,對集羣name以及auth進行驗證,並將其信息寫入到外部存儲中;
② 同步slots狀態;
③ 標記proxy狀態爲online,此後proxy開始accept鏈接並開始提供服務。

正常關閉proxy操做

/usr/local/codis/bin/codis-admin --proxy=172.16.200.71:11080 --auth="xxxxx"(有就加,沒有就不加) --shutdown
/usr/local/codis/bin/codis-proxy -h
Usage:
codis-proxy [--ncpu=N][--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR]
[--host-proxy=ADDR] [--ulimit=NLIMIT]
codis-proxy --default-config
codis-proxy --version
 Options:
    --ncpu=N 最大使用 CPU 個數
    -c CONF, --config=CONF 指定啓動配置文件
    -l FILE, --log=FILE 設置 log 輸出文件
    --log-level=LEVEL 設置 log 輸出等級:INFO,WARN,DEBUG,ERROR;默認INFO,推薦WARN
    --ulimit=NLIMIT 檢查ulimit -n的結果,確保運行時最大文件描述很多於NLIMIT

3. Codis FE

3.1 集羣管理界面

多個集羣實例能夠共享同一個前端展現頁面;
經過配置文件管理後端codis-dashboard列表,配置文件可自動更新。

3.2 配置codis-fe

配置文件codis.json(fe.conf)能夠手動編輯,也能夠經過codis-admin從外部存儲中拉取。

/usr/local/codis/bin/codis-admin --dashboard-list --zookeeper=172.16.200.71:2181 | tee codis.json
[
    {
"name": "codis-demo",
"dashboard": "127.0.0.1:18080"
    }
]

3.3 啓動codis-fe

nohup /usr/local/codis/bin/codis-fe --ncpu=4 --log=fe.log --log-level=WARN \
--dashboard-list=codis.json --listen=0.0.0.0:18090 &#(這裏指定端口號爲18090是爲了防止和codis-dashboard的端口號18080衝突)
/usr/local/codis/bin/codis-fe -h
Usage:
    codis-fe [--ncpu=N][--log=FILE] [--log-level=LEVEL] --dashboard-list=LIST --listen=ADDR
    codis-fe --version
Options:
--ncpu=N 最大使用 CPU 個數
-d LIST,--dashboard-list=LIST 配置文件,可以自動刷新
-l FILE, --log=FILE 設置 log 輸出文件
--log-level=LEVEL 設置 log 輸出等級:INFO,WARN,DEBUG,ERROR;默認INFO,推薦WARN
--listen=ADDR HTTP 服務端口

打開瀏覽器,在地址欄裏輸入http://172.16.200.71:18090,經過管理界面操做Codis。

相關文章
相關標籤/搜索