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前端
git clone https://github.com/CodisLabs/codis.git -b release3.1
https://golang.org/doc/install?download=go1.5.2.linux-amd64.tar.gz
http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz
http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
三臺主機上執行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
三臺主機上執行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++
cd /usr/local/src wget https://golang.org/doc/install?download=go1.5.2.linux-amd64.tar.gz
cd /usr/local/src tar -C /usr/local -xzf go1.5.2.linux-amd64.tar.gz
mkdir /usr/local/gopkg
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
安裝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)
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)
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
cd /usr/local/zookeeper cp conf/zoo_sample.cfg conf/zoo.cfg
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選舉通訊端口。
mkdir -p /usr/local/zookeeper/data mkdir -p /data/logs/zookeeper
主機(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
cd /usr/local/zookeeper/bin ./zkServer.sh start#
cd /usr/local/zookeeper/bin ./zkServer.sh stot
cd /usr/local/zookeeper/bin ./zkServer.sh status
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
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
cd /usr/local/gopkg/src/github.com/CodisLabs/codis make
[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 放置在同一文件夾下
mkdir -p /usr/local/codis mkdir -p /data/logs/codis mkdir -p /data/codis/redis_conf mkdir -p /data/components/redis
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
配置和啓動 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
/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 &
Coddis3.0的dashboard與codis 2.0有所不一樣,做爲集羣管理工具,它支持codis-proxy,codis-server的添加、刪除以及數據遷移等操做。在集羣狀態發生改變時,codis-dashboard 維護集羣下全部 codis-proxy 的狀態一致性。有如下兩點注意事項:
全部對集羣的修改都必須經過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 端口
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
對於同一個業務集羣而言,能夠同時部署多個codis-proxy 實例;
不一樣 codis-proxy 之間由 codis-dashboard 保證狀態同步。
默認配置文件 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表示禁止
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
多個集羣實例能夠共享同一個前端展現頁面;
經過配置文件管理後端codis-dashboard列表,配置文件可自動更新。
配置文件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" } ]
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。