Centos6.5+Codis3.1集羣搭建

codis 3.1 安裝搭建

一.基本信息

1.服務器基本信息

本次測試只使用了一臺服務器10.20.23.249

2. 環境信息

2.1 codis版本:3.1 版本

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

2.2 Go使用版本:



2.3 jdk版本:jdk1.7.0_55

http://download.oracle.com/otn-pub/java/jdk/8u55-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 安裝所需依賴包

三臺主機上執行

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 修改內核

三臺主機上執行

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

手工執行:

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

並加到 /etc/rc.local中

2.安裝go

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install golang git -y

mkdir /opt/gopath

vim /etc/profile

export GOPATH=/opt/gopath


查看go版本:

go env GOPATH 


3.安裝jdk

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
cd /usr/java/
chmod +x jdk-7u55-linux-x64.rpm
rpm -ivh jdk-7u55-linux-x64.rpm


3.1配置java環境變量

vim /etc/profile

添加如下信息

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

刷新配置文件:

source /etc/profile

4.安裝zookeeper

4.1 安裝zookeeper

cd /usr/local/src/
wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz
tar zxf zookeeper-3.4.9.tar.gz
mv zookeeper-3.4.9 /usr/local/zookeeper

4.2 生成配置文件

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

4.3 修改zookeeper配置文件

vim /opt/zoo.cfg

修改以下內容

2888表示zookeeper程序監聽端口,3888表示zookeeper選舉通信端口。

4.4 創建所需文件夾

mkdir zk1 zk2 zk3

4.5 生成myid

echo "1" > zk1/myid

echo "2" > zk2/myid

echo "3" > zk3/myid


cp zoo.cfg zk1/zk1.cfg

cp zoo.cfg zk2/zk2.cfg

cp zoo.cfg zk3/zk3.cfg

vim zk2/zk2.cfg

dataDir=/opt/zk2

vim zk3/zk3.cfg

dataDir=/opt/zk3


[root@linux-node1 opt]# grep '^[a-z]' zk1/zk1.cfg

tickTime=2000                    #zookeeper服務器之間和客戶端維持心跳的時間間隔,每段時間他們就會發送一個心跳,微秒

initLimit=10                        #zookeeper進行選舉,初始化連接時,最長能忍受的心跳間隔數,10次

syncLimit=5                          

dataDir=/opt/zk1                #數據存儲的目錄

clientPort=2181                  #客戶端連接上來的端口

server.1=10.20.23.249:2887:3887    #集羣,1以及下面的2,3每一個羣集都有一個唯一的id,就是myid的內容,,後面是集羣的ip(不同服務器就會有不同的ip),第一個端口表示zookeeper會選出一個leader出來,三個集羣之間交換信息的端口,第二個端口表示若是leader掛了,就要重新選舉,就用這個端口就行選舉,zookeeper也是無中心的

server.2=10.20.23.249:2888:3888

server.3=10.20.23.249:2889:3889

4.6 啓動zookeeper

/usr/local/zookeeper/bin/zkServer.sh start /opt/zk1/zk1.cfg
/usr/local/zookeeper/bin/zkServer.sh start /opt/zk2/zk2.cfg
/usr/local/zookeeper/bin/zkServer.sh start /opt/zk3/zk3.cfg

4.7 關閉zookeeper

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

4.8 查看zk狀態

查看狀態:
[root@linux-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh status /opt/zk1/zk1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zk1/zk1.cfg
Mode: follower
[root@linux-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh status /opt/zk2/zk2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zk2/zk2.cfg
Mode: leader

4.9 查看相關信息:

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

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

5.1 下載codis

mkdir /opt/gopath/src/github.com/CodisLabs -p
cd /opt/gopath/src/github.com/CodisLabs
git clone https://github.com/CodisLabs/codis.git -b release3.1

5.2 編譯codis

cd /opt/gopath/src/github.com/CodisLabs/codis
make

5.3 查看bin

[root@data-1-1 codis]# ll bin/
總用量 111800
drwxr-xr-x 4 root root     4096 3月   7 00:37 assets
-rwxr-xr-x 1 root root 17398102 3月   7 00:37 codis-admin
-rwxr-xr-x 1 root root 18899624 3月   7 00:37 codis-dashboard
-rwxr-xr-x 1 root root 15356742 3月   7 00:37 codis-fe
-rwxr-xr-x 1 root root 15221328 3月   7 00:37 codis-ha
-rwxr-xr-x 1 root root 19154689 3月   7 00:37 codis-proxy
-rwxr-xr-x 1 root root  8873464 3月   7 00:36 codis-server
-rwxr-xr-x 1 root root  6311752 3月   7 00:35 codis-server-2.8.21
-rwxr-xr-x 1 root root  6555466 3月   7 00:36 redis-benchmark
-rwxr-xr-x 1 root root  6683191 3月   7 00:36 redis-cli
-rw-r--r-- 1 root root      167 3月   7 00:36 version

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

5.4 創建codis所需目錄

mkdir /opt/codis -p
mkdir -p /opt/codis/{logs,conf,scripts,db,run}
mkdir -p /opt/codis/db/{redis_data_6379,redis_data_6380}

5.5 拷貝codis的bin目錄

cp -rf /opt/gopath/src/github.com/CodisLabs/codis/bin/ /opt/codis/

由於codis 本身只有codis-server ,沒有Redis-cli,需要把redis 2.8.21 安裝包裏面的redis-cli copy到/usr/local/codis/bin 下面:

cd /opt/gopath/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src
cp redis-cli /opt/codis/bin/

5.6 配置和啓動各組件

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

cd /opt/gopath/src/github.com/CodisLabs/codis/extern/redis-2.8.21/

cp redis.conf /opt/codis/conf/redis6379.conf

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

[root@data-1-1 conf]# grep '^[a-z]' redis6379.conf 

daemonize yes

pidfile /opt/codis/run/redis6379.pid

port 6379

tcp-backlog 511

timeout 86400

tcp-keepalive 60

loglevel notice

logfile "/opt/codis/logs/redis6379.log"

databases 16

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump6379.rdb

dir /opt/codis/db/redis_data_6379

masterauth ""

slave-serve-stale-data yes

repl-disable-tcp-nodelay no

slave-priority 100

requirepass ""

maxmemory 10gb

maxmemory-policy volatile-lru

appendonly no

appendfsync everysec

no-appendfsync-on-rewrite yes

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

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



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

cp /opt/codis/conf/redis6379.conf /opt/codis/conf/redis6380.conf

vim redis6380.conf

:%s/6379/6380/g

保存退出


5.7 啓動redis

執行之前注意將log和data的文件生成目錄建好,不然會啓動失敗

/opt/codis/bin/codis-server /opt/codis/conf/redis6379.conf &

/opt/codis/bin/codis-server /opt/codis/conf/redis6380.conf &


三. 配置codis

1.啓動codis bashboard (僅在需要啓動管理界面的codis的服務器上操作)

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生成。

生成配置文件(僅需執行修改一次):

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

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

wKiom1i_6o3DX2AgAABZbMHNfSY194.png-wh_50


vim /opt/codis/conf/dashboard.conf  

# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
coordinator_name = "zookeeper"
coordinator_addr = "" #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"

# Set configs for redis sentinel.
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""

參數說明:

coordinator_name #外部存儲類型,接受 zookeeper/etcd

coordinator_addr #外部存儲地址

product_name #集羣名稱,滿足正則 \w[\w\.\-]*

product_auth #集羣密碼,默認爲空

admin_addr #RESTful API 端口

1.2 啓動Codis Dashboard

nohup /opt/codis/bin/codis-dashboard --ncpu=4 --config=/opt/codis/conf/dashboard.conf (這裏指定dashboard.toml也可以) --log=/opt/codis/logs/dashboard.log --log-level=WARN &  

說明:

--ncpu=N #最大使用 CPU 個數

-c  CONF, --config=CONF #指定啓動配置文件

-l   FILE, --log=FILE #設置 log 輸出文件

--log-level=LEVEL #設置 log 輸出等級:INFO,WARN,DEBUG,ERROR;默認INFO,推薦WARN

l  對於同一個業務集羣而言,可以同時部署多個codis-proxy 實例;

l  不同 codis-proxy 之間由 codis-dashboard 保證狀態同步。

 

執行完成後出現以下內容說明成功.

more ./logs/dashboard.log日期

more /opt/codis/logs/dashboard.log.2017-01-19


2.啓動codis-proxy (僅在需要啓動proxy的codis的服務器上操作)

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

2.1配置proxy,生成代理配置文件

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

生成的proxy.conf可自行配置:

wKioL1i_6lLTLY5mAABowax63oM080.png-wh_50

vim /opt/codis/conf/proxy.conf 

# 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"



配置文件解析:

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

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啓動codis-proxy

nohup /opt/codis/bin/codis-proxy --ncpu=4 --config=/opt/codis/conf/proxy.conf --log=/opt/codis/logs/proxy.log --log-level=WARN &

codis-proxy啓動後,處於 waiting 狀態,監聽proxy_addr 地址,但是不會 accept 連接,添加到集羣並完成集羣狀態的同步,才能改變狀態爲online。

添加proxy的方法有以下兩種(選其中任意一種即可):

1)通過 codis-fe 添加:通過 Add Proxy 按鈕,將 admin_addr 加入到集羣中;

2)通過 codis-admin 命令行工具添加,方法如下:

/opt/codis/bin/codis-admin --dashboard=10.20.23.249:18080 --create-proxy -x 10.20.23.249:11080

 其中 10.20.23.249:18080 以及 10.20.23.249:11080 分別爲 dashboard 和 proxy 的 admin_addr 地址;

添加過程中,dashboard 會完成如下一系列動作:

① 獲取 proxy 信息,對集羣 name 以及 auth 進行驗證,並將其信息寫入到外部存儲中;

② 同步 slots 狀態;

③ 標記 proxy 狀態爲 online,此後 proxy 開始 accept 連接並開始提供服務;

/opt/codis/bin/codis-admin --proxy=10.20.23.249:11080 --auth="" --shutdown


正常關閉proxy操作

/usr/local/codis/bin/codis-admin --proxy=172.16.200.71:11080 --auth="xxxxx"(有就加,沒有就不加) --shutdown



/opt/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 集羣管理界面 (僅在需要啓動dashboard的codis的服務器上操作)

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

生成配置文件(不是每次都需要,生成一次就可以了)

./bin/codis-admin --dashboard-list --zookeeper=192.168.10.61 | tee ./conf/codis.json


[

    {

        "name": "codis-demo",

        "dashboard": "linux-node1:18080"

    }

]



啓動codis-fe

nohup ./bin/codis-fe --ncpu=4 --log=./logs/fe.log --log-level=WARN --dashboard-list=./conf/codis.json --listen=192.168.10.60:18090 &


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章