CODIS叢集搭建
- 1.6個主從的搭建
- 2. 安裝go語言環境
- 3. 設定codis
-
- 3.1 安裝codis
- 3.2 編譯源碼
- 4. 啟動腳本
-
- 4.1 codis-proxy 配置
- 5. 啟動
-
- 5.1 啟動順序
- 5.2 啟動流程
- 6.配置叢集
- 7. 通過web添加叢集并進行控制
- 8. redis-sentinel的設定
1.6個主從的搭建
可以直接使用redis的做好的叢集,3個叢集,一主一從。
2. 安裝go語言環境
== 下載下傳go語言安裝包==
wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
wget -c https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
[[email protected] ~]# ls
codis-release3.2.zip jdk-8u121-linux-x64.rpm
go1.8.3.linux-amd64.tar.gz zookeeper-3.4.9.tar.gz
[[email protected] ~]# tar zxf go1.8.3.linux-amd64.tar.gz -C /usr/local/ ##解壓到指定目錄
[[email protected] ~]# cd /usr/local/go/bin/
[[email protected] bin]# pwd
/usr/local/go/bin
[[email protected] bin]# vim ~/.bash_profile ##添加環境變量
[[email protected] bin]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/go/bin
export PATH
[[email protected] bin]# source ~/.bash_profile
添加環境變量

3. 設定codis
3.1 安裝codis
[[email protected] ~]# ll codis-release3.2.zip
-rwxr-xr-x 1 root root 12453663 Jan 16 08:48 codis-release3.2.zip
[[email protected] ~]# ll codis-release3.2 -d
drwxr-xr-x 14 root root 322 Jun 22 2017 codis-release3.2
[[email protected] ~]# mkdir -p /usr/local/go/src/github.com/CodisLabs/
[[email protected] ~]# mv codis-release3.2 /usr/local/go/src/github.com/CodisLabs/codis
[[email protected] ~]# cd /usr/local/go/src/github.com/CodisLabs/codis/
[[email protected] codis]# ls
admin deploy extern pkg version
ansible doc Godeps README.md wandoujia_license.txt
cmd Dockerfile Makefile scripts
config example MIT-LICENSE.txt vendor
3.2 編譯源碼
安裝前輩已經測試好的需要安裝的依賴包
[[email protected] codis]# yum install gcc git autoconf -y
[[email protected] codis]# make
添加環境變量
4. 啟動腳本
[[email protected] admin]# pwd
/usr/local/go/src/github.com/CodisLabs/codis/admin
[[email protected] admin]# ls
codis-dashboard-admin.sh codis-proxy-admin.sh
codis-fe-admin.sh codis-server-admin.sh
4.1 codis-proxy 配置
安裝JDK
[[email protected] ~]# yum install -y jdk-8u121-linux-x64.rpm
[[email protected] ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[[email protected] ~]# javac -version
javac 1.8.0_121
安裝zookeeper并修改配置檔案
可以下載下傳3.5.9的,這個網址隻有3.5.9和3.6.2的,我下面實驗使用的是3.4.9的。
[[email protected] ~]# wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9.tar.gz
[[email protected] ~] tar -zxf apache-zookeeper-3.5.9.tar.gz -C /usr/local/
[[email protected] ~]# cp /usr/local/zookeeper-3.4.9/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.9/conf/zoo.cfg
[[email protected] ~]# vim /usr/local/zookeeper-3.4.9/conf/zoo.cfg ^C
[[email protected] ~]# grep -v ^# /usr/local/zookeeper-3.4.9/conf/zoo.cfg | uniq
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
clientPort=2181
[[email protected] ~]# vim ~/.bash_profile
[[email protected] ~]# source ~/.bash_profile
[[email protected] ~]# mkdir -p /data/zookeeper/data
[[email protected] ~]# echo "1" > /data/zookeeper/data/myid
-
設定myid:
設定myid在我們配置的dataDir指定的目錄下面,建立一個myid檔案,裡面内容為一個數字,用來辨別目前主機,conf/zoo.cfg檔案配置的srver.X中的X為什麼數字,則myid檔案就輸入這個數字,我隻有一台zk,是以配置檔案裡可以不配置server.X,但還是要配置myid的,echo一個數字1進去即可。如果有多台zk,則分别在zk伺服器上echo對應的數字進對應的myid檔案
啟動zookeeper
在哪個目錄下啟動,就在哪個目錄下産生一個啟動的日志zookeeper.out,檢視這個日志可以檢視是否正常啟動了。由于單個zookeeper,是以這裡訓示Mode: standalone,如果有多個zk節點,就隻有一個Mode: leader的狀态,别的都是Mode: follower狀态。
[[email protected] ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: standalone
配置codis和zookeepker關聯
zk=localhost:2181 //zookeeper的位址, 如果是zookeeper叢集,可以這麼寫: zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181,如果是etcd,則寫成http://hostname1:port,http://hostname2:port,http://hostname3:port
product=test //産品名稱, 這個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 //如果用etcd,則将zookeeper替換為etcd
[[email protected] codis]# vim config.ini
[[email protected] codis]# cat config.ini
zk=localhost:2181
product=test
proxy_id=proxy_1
net_timeout=5
dashboard_addr=localhost:18087
coordinator=zookeeper
[[email protected] codis]# pwd
/usr/local/go/src/github.com/CodisLabs/codis
5. 啟動
5.1 啟動順序
- 1. start zookeeper //啟動zookeeper服務
2. change config items in config.ini //修改codis配置檔案
3. ./start_dashboard.sh //啟動 dashboard
4. ./start_redis.sh //啟動redis執行個體
5. ./add_group.sh //添加redis組,一個redis組隻能有一個master
6. ./initslot.sh //初始化槽
7. ./start_proxy.sh //啟動proxy
8. ./set_proxy_online.sh //上線proxy項目
9. open browser to http://localhost:18087/admin //通路web
5.2 啟動流程
啟動zookeeper
啟動Codis Dashboard
[[email protected] admin]# pwd
/usr/local/go/src/github.com/CodisLabs/codis/admin
[[email protected] admin]# ls
codis-dashboard-admin.sh codis-proxy-admin.sh
codis-fe-admin.sh codis-server-admin.sh
[[email protected] admin]# ./codis-dashboard-admin.sh start
/usr/local/go/src/github.com/CodisLabs/codis/admin/../config/dashboard.toml
starting codis-dashboard ...
[[email protected] admin]# cat ../log/codis-dashboard.log.2021-01-16
啟 動CodisDashboard組 件 , 查 看 日 志 文 件codis-dashboard.log.2017-10-18 是否啟動成功。
啟動Codis Proxy
[[email protected] admin]# ./codis-proxy-admin.sh start
/usr/local/go/src/github.com/CodisLabs/codis/admin/../config/proxy.toml
starting codis-proxy ...
[[email protected] admin]# tail -n 5 ../log/codis-proxy.log.2021-01-16
2021/01/16 20:39:02 proxy_api.go:44: [WARN] [0xc420092fd0] API call /api/proxy/start/f1d4258d376bad28087a3b07c705cc15 from 172.25.13.5:35692 []
2021/01/16 20:39:02 proxy_api.go:44: [WARN] [0xc420092fd0] API call /api/proxy/sentinels/f1d4258d376bad28087a3b07c705cc15 from 172.25.13.5:35692 []
2021/01/16 20:39:02 proxy.go:293: [WARN] [0xc420092fd0] set sentinels = []
2021/01/16 20:39:02 main.go:323: [WARN] rpc online proxy seems OK
2021/01/16 20:39:03 main.go:213: [WARN] [0xc420092fd0] proxy is working ...
[[email protected] admin]#
啟動CodisProxy元件,檢視日志codis-proxy.log.2017-10-18 是否啟動成功。
== 啟動Codis Server和 Codis Fe元件==
[[email protected] admin]# ./codis-server-admin.sh start
/usr/local/go/src/github.com/CodisLabs/codis/admin/../config/redis.conf
starting codis-server ...
[[email protected] admin]# tail -n 5 /tmp/redis_6379.log
啟動 Codis Server 元件,檢視日志/tmp/redis_6379.log 檔案是否啟動成功。
啟動 Codis Fe 元件,檢視日志 codis-fe.log.xxxx.xx.xx檔案是否啟動成功。
[[email protected] admin]# ./codis-fe-admin.sh start
starting codis-fe ...
[[email protected] admin]# tail ../log/codis-fe.log.2021-01-16
6.配置叢集
[[email protected] codis]# cd config/
[[email protected] config]# ls
dashboard.toml proxy.toml redis.conf sentinel.conf
[[email protected] config]# vim redis.conf
[[email protected] config]# cp redis.conf redis1.conf
[[email protected] config]# cp redis.conf redis2.conf
[[email protected] config]# cp redis.conf redis3.conf
[[email protected] config]# vim redis1.conf ##redis1.2.3配置檔案參照redis寫,端口修改,保護模式關閉,對于有端口的檔案也修改掉端口即可
[[email protected] config]# grep -v ^# redis.conf | uniq
bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /tmp/redis_6379.pid
loglevel notice
logfile "/tmp/redis_6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
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
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
圈着的地方需要修改端口和保護模式。使用端口7000、7001、7002
7. 通過web添加叢集并進行控制
檢視資訊,有倆個slave,分别是端口7001和7003
[[email protected] config]# ps ax | grep :7000
2878 ? Ssl 0:00 codis-server 127.0.0.1:7000
3533 pts/0 S+ 0:00 grep --color=auto :7000
[[email protected] config]# kill -9 2878
[[email protected] config]# redis-cli -p 7001 ##master挂掉,slave還可以通路資料
127.0.0.1:7001> get name
"westos"
127.0.0.1:7001>
但是沒有進行主備切換!!!
手動進行主備切換
8. redis-sentinel的設定
redis-sentinel是要配置主從架構才能生效,但是在codis叢集中并不一樣,因為他的配置由zookeeper來維護,是以,這裡codis使用 的redis-sentinel隻需要配置一些基本配置就可以了。
sentinel的一些基本配置