Codis 3.2 部署配置匯總
概念總結
集群配置前需要了解架構,集群分片主要分三種:
客戶端分片:這個需要自己開發,對客戶端要求嚴格,集群很難擴容
代理端分片:如codis,對客戶端幾乎無要求,集群容易擴容
服務端分片:如redis集群,需要智能客戶端支持集群協議的,集群容易擴容
codis3.2集群架構
服務端:codis-fe------codis-dashboard------codis-proxy------codis-group------codis-server
客戶端:client------nginx-tcp------codis-proxy
cdis-fe可以管理多個codis-dashboard
每個codis-dashboard代表一個產品線,每個codis-dashboard可以管理多個codis-proxy
每個codis-proxy可以管理多個codis-server group
每個codis-server group至少由兩個codis-server組成,最少1主1備
由上可知一個大的codis集群可以分多個產品線,客戶端連接各個產品線的codis-proxy,業務線之間可以做到物理隔離,比如group1,group2,group3分給codis-product1業務線,group4,
group5,group6分給codis-product2業務線,codis-dashboard配置保存在zookeeper里。
特別注意
同一個codis-server加入多個codis-dashboard的codis-group里,但是在不同的codis-dashboard里面主備的角色要一致,這代表邏輯隔離。
同一個codis-server只加入唯一的codis-dashboard的codis-group里,這代表物理隔離。
宗旨方法
宗旨:多讀書 多實踐? ? 追隨內心? 著實去做
方法:志存高遠? 勤學苦練? 知錯就改? 自渡渡他
本文目錄
一,codis簡介
二,Codis 3.x
三,Codis 3.x 由以下組件組成
四,安裝部署
五,集群配置
六,Codis-fe面板操作
七,代理HA
八,客戶端通過VIP訪問
九,壓力測試
一,Codis簡介
Codis 是一個分布式 Redis 解決方案, 對于上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有顯著區別 (不支持的命令列表), 上層應用可以像使用單機的 Redis 一
樣使用, Codis 底層會處理請求的轉發, 不停機的數據遷移等工作, 所有后邊的一切事情, 對于前面的客戶端來說是透明的, 可以簡單的認為后邊連接的是一個內存無限大的 Redis 服務。
不支持命令列表
https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md
redis的修改
https://github.com/CodisLabs/codis/blob/release3.2/doc/redis_change_zh.md
go安裝
https://golang.org/doc/install
二,Codis 3.x
最新 release 版本為 codis-3.2,codis-server 基于 redis-3.2.8
支持 slot 同步遷移、異步遷移和并發遷移,對 key 大小無任何限制,遷移性能大幅度提升
相比 2.0:重構了整個集群組件通信方式,codis-proxy 與 zookeeper 實現了解耦,廢棄了codis-config 等
元數據存儲支持 etcd/zookeeper/filesystem 等,可自行擴展支持新的存儲,集群正常運行期間,即便元存儲故障也不再影響 codis 集群,大大提升 codis-proxy 穩定性
對 codis-proxy 進行了大量性能優化,通過控制GC頻率、減少對象創建、內存預分配、引入 cgo、jemalloc 等,使其吞吐還是延遲,都已達到 codis 項目中最佳
proxy 實現 select 命令,支持多 DB
proxy 支持讀寫分離、優先讀同 IP/同 DC 下副本功能
基于 redis-sentinel 實現主備自動切換
實現動態 pipeline 緩存區(減少內存分配以及所引起的 GC 問題)
proxy 支持通過 HTTP 請求實時獲取 runtime metrics,便于監控、運維
支持通過 influxdb 和 statsd 采集 proxy metrics
slot auto rebalance 算法從 2.0 的基于 max memory policy 變更成基于 group 下 slot 數量
提供了更加友好的 dashboard 和 fe 界面,新增了很多按鈕、跳轉鏈接、錯誤狀態等,有利于快速發現、處理集群故障
新增 SLOTSSCAN 指令,便于獲取集群各個 slot 下的所有 key
codis-proxy 與 codis-dashbaord 支持 docker 部署
三,Codis 3.x 由以下組件組成:
Codis Server:基于 redis-3.2.8 分支開發。增加了額外的數據結構,以支持 slot 有關的操作以及數據遷移指令。具體的修改可以參考文檔 redis 的修改。
Codis Proxy:客戶端連接的 Redis 代理服務, 實現了 Redis 協議。 除部分命令不支持以外(不支持的命令列表),表現的和原生的 Redis 沒有區別(就像 Twemproxy)。
對于同一個業務集群而言,可以同時部署多個 codis-proxy 實例;
不同 codis-proxy 之間由 codis-dashboard 保證狀態同步。
Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、刪除,以及據遷移等操作。在集群狀態發生改變時,codis-dashboard 維護集群下所有 codis-proxy 的狀態的
一致性。
對于同一個業務集群而言,同一個時刻 codis-dashboard 只能有 0個或者1個;
所有對集群的修改都必須通過 codis-dashboard 完成。
Codis Admin:集群管理的命令行工具。
可用于控制 codis-proxy、codis-dashboard 狀態以及訪問外部存儲。
Codis FE:集群管理界面。
多個集群實例共享可以共享同一個前端展示頁面;
通過配置文件管理后端 codis-dashboard 列表,配置文件可自動更新。
Storage:為集群狀態提供外部存儲。
提供 Namespace 概念,不同集群的會按照不同 product name 進行組織;
目前僅提供了 Zookeeper、Etcd、Fs 三種實現,但是提供了抽象的 interface 可自行擴展。
四,安裝部署
二進制部署(官網的支持CentOS7,Glibc2.14以上版本)
tar zxvf /root/codis3.2.0-go1.7.5-linux.tar.gz -C /usr/local/
ln -s /usr/local/codis3.2.0-go1.7.5-linux/ /usr/local/codis
/usr/local/codis/redis-cli -v
/usr/local/codis/redis-cli: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/codis/redis-cli)
排錯
strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
需要安裝GLIBC_2.14版本
直接使用CentOS7即可解決此問題。
源碼部署(CentOS6/7都可)
1,java環境
yum -y? install java-1.8.0
java -version
2,go環境
tar zxvf /root/go1.8.3.linux-amd64.tar.gz -C /usr/local/
/usr/local/go/bin/go version
mkdir -p /data/go
echo 'export PATH=$PATH:/usr/local/go/bin:/usr/local/codis/bin'? >>/etc/profile
echo 'export GOPATH=/data/go'? >>/etc/profile
source /etc/profile
go env GOPATH
3,codis安裝
mkdir -p /data/go/src/github.com/CodisLabs/
tar -zxvf /root/codis-3.2.0.tar.gz -C /data/go/src/github.com/CodisLabs/
cd /data/go/src/github.com/CodisLabs/
mv codis-3.2.0/ codis
cd codis/
make
./bin/redis-cli -v
ln -s /data/go/src/github.com/CodisLabs/codis/ /usr/local/codis
cat bin/version
version = unknown version
compile = 2017-09-11 16:58:26 +0800 by go version go1.8.3 linux/amd64
4,zookeepr安裝
tar -zxvf /root/zookeeper-3.4.10.tar.gz -C /usr/local
ln -s /usr/local/zookeeper-3.4.10 /usr/local/zookeeper
echo '/usr/local/zookeeper/bin/zkServer.sh start'? >>/etc/rc.local
cat << EOF >>? /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data/zookeeper/data
clientPort=2181
server.1=192.168.188.120:2888:3888
server.2=192.168.188.121:2888:3888
server.3=192.168.188.122:2888:3888
EOF
###myid
#注意:2888是主從的通信端口,3888是選舉端口,server后面的1,2,3是在data目錄下myid文件里的數值
mkdir -p /data/zookeeper/data
echo '1' > /data/zookeeper/data/myid
/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper/bin/zkServer.sh status
5,其他節點直接打包/data/go/src/github.com/CodisLabs/codis.tar.gz復制過去即可
集群配置前需要了解架構,集群分片主要分三種:
客戶端分片:這個需要自己開發,對客戶端要求嚴格,集群很難擴容
代理端分片:如codis,對客戶端幾乎無要求,集群容易擴容
服務端分片:如redis集群,需要智能客戶端支持集群協議的,集群容易擴容
codis3.2集群架構
服務端:codis-fe------codis-dashboard------codis-proxy------codis-group------codis-server
客戶端:client------nginx-tcp------codis-proxy
cdis-fe可以管理多個codis-dashboard
每個codis-dashboard代表一個產品線,每個codis-dashboard可以管理多個codis-proxy
每個codis-proxy可以管理多個codis-server group
每個codis-server group至少由兩個codis-server組成,最少1主1備
由上可知一個大的codis集群可以分多個產品線,客戶端連接各個產品線的codis-proxy,業務線之間可以做到物理隔離,比如group1,group2,group3分給codis-product1業務線,group4,
group5,group6分給codis-product2業務線,codis-dashboard配置保存在zookeeper里。
特別注意
同一個codis-server加入多個codis-dashboard的codis-group里,但是在不同的codis-dashboard里面主備的角色要一致,這代表邏輯隔離。
同一個codis-server只加入唯一的codis-dashboard的codis-group里,這代表物理隔離。
五,集群配置
1,角色劃分
192.168.188.120 codis120 codis-server? zookeeper
192.168.188.121 codis121 codis-server? zookeeper
192.168.188.122 codis122 codis-server? zookeeper
192.168.188.123 codis123 codis-server? codis-proxy? nginx-tcp? lvs
192.168.188.124 codis124 codis-server? codis-proxy? nginx-tcp? lvs
192.168.188.125 codis125? codis-server? codis-dashboard codis-fe
以下操作的基本目錄
[root@codis125 codis]# pwd -L
/usr/local/codis
[root@codis125 codis]# pwd -P
/data/go/src/github.com/CodisLabs/codis
2,啟動codis-dashobard(codis125上操作)
1),修改dashboard.toml配置文件
[root@codis125 codis]# cat config/dashboard.toml
主要修改這幾行
# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
coordinator_name = "zookeeper"
coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
# Set Codis Product Name/Auth.
product_name = "codis-product1"
product_auth = ""
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"
2),啟動腳本
啟動前需要修改腳本zookeeper地址池與product名稱
[root@codis125 codis]#cat? ./admin/codis-dashboard-admin.sh
$CODIS_ADMIN_TOOL_BIN -v --remove-lock --product=codis-product1 --zookeeper=192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
[root@codis125 codis]#? ./admin/codis-dashboard-admin.sh start
3),檢查日志與端口
[root@codis125 codis]# cat log/codis-dashboard.log.2017-09-11
2017/09/11 17:42:08 main.go:78: [WARN] set ncpu = 8
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.121:2181
2017/09/11 17:42:08 topom.go:119: [WARN] create new topom:
{
"token": "a10e7a35209d1db8f21c8e89a78a6c9a",
"start_time": "2017-09-11 17:42:08.1058555 +0800 CST",
"admin_addr": "codis125:18080",
"product_name": "codis-product2",
"pid": 18029,
"pwd": "/usr/local/codis",
"sys": "Linux codis125 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux"
}
2017/09/11 17:42:08 main.go:103: [WARN] create topom with config
coordinator_name = "zookeeper"
coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
admin_addr = "0.0.0.0:18080"
product_name = "codis-product1"
product_auth = ""
migration_method = "semi-async"
migration_parallel_slots = 100
migration_async_maxbulks = 200
migration_async_maxbytes = "32mb"
migration_async_numkeys = 500
migration_timeout = "30s"
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""
2017/09/11 17:42:08 topom.go:424: [WARN] admin start service on [::]:18080
2017/09/11 17:42:08 main.go:116: [WARN] option --pidfile = /usr/local/codis/bin/codis-dashboard.pid
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Authenticated: id=170697207944249344, timeout=40000
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
2017/09/11 17:42:08 main.go:140: [WARN] [0xc42033e120] dashboard is working ...
[root@codis125 codis]# netstat -tulpn |grep codis-dashboa
tcp6? ? ? 0? ? ? 0 :::18080? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 32006/codis-dashboa
4),檢查服務
http://192.168.188.125:18080/topom
3,啟動codis-proxy(codis123與codis124上操作)
1),修改codis-proxy啟動腳本
[root@codis124 codis]# cat admin/codis-proxy-admin.sh|grep DASH
CODIS_DASHBOARD_ADDR="192.168.188.125:18080"
2),修改proxy.toml配置
[root@codis124 codis]# cat config/proxy.toml|grep -Ev "^#|^$"
product_name = "codis-product1"
product_auth = ""
session_auth = ""
admin_addr = "0.0.0.0:11080"
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
3),啟動codis-proxy腳本
[root@codis124 codis]# ./admin/codis-proxy-admin.sh start
4),檢查日志與端口
[root@codis124 codis]# cat log/codis-proxy.log.2017-09-11
[root@codis124 codis]# netstat -tulpn|grep codis-proxy
tcp? ? ? ? 0? ? ? 0 0.0.0.0:19000? ? ? ? ? 0.0.0.0:*? ? ? ? ? ? ? LISTEN? ? ? 31971/codis-proxy
tcp6? ? ? 0? ? ? 0 :::11080? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 31971/codis-proxy
4,啟動codis-server(需要在所有上操作)
1),修改啟動腳本
vim /usr/local/codis/admin/codis-server-admin-6379.sh start
vim /usr/local/codis/admin/codis-server-admin-6380.sh start
主要注意以下幾點
[root@codis125 codis]# cat /usr/local/codis/admin/codis-server-admin-6379.sh |grep -Ev "^#|^$"|grep 6379
CODIS_SERVER_PID_FILE=/data/codis/6379/redis_6379.pid
CODIS_SERVER_LOG_FILE=/data/codis/6379/redis_6379.log
CODIS_SERVER_CONF_FILE=$CODIS_CONF_DIR/redis-6379.conf
2),修改服務配置
[root@codis120 codis]# mkdir -p /data/redis/6379
[root@codis120 codis]# mkdir -p /data/redis/6380
[root@codis120 codis]# vim /usr/local/codis/config/redis-6379.conf
[root@codis120 codis]# vim /usr/local/codis/config/redis-6380.conf
主要是注意以下幾點
[root@codis120 codis]# cat /usr/local/codis/config/redis-6379.conf |grep -Ev "^#|^$"|grep 6379
port 6379
pidfile /data/redis/6379/redis_6379.pid
logfile "/data/redis/6379/redis_6379.log"
dir /data/redis/6379
3),啟動codis-server服務
[root@codis120 codis]# ./admin/codis-server-admin-6379.sh start
/usr/local/codis/admin/../config/redis-6379.conf
starting codis-server ...
[root@codis120 codis]# ./admin/codis-server-admin-6380.sh start
/usr/local/codis/admin/../config/redis-6380.conf
starting codis-server ...
4),檢測日志與端口
[root@codis120 codis]# netstat -tulpn |grep codis-server
tcp? ? ? ? 0? ? ? 0 192.168.188.120:6379? ? ? 0.0.0.0:*? ? ? ? ? ? ? LISTEN? ? ? 22231/codis-server
tcp? ? ? ? 0? ? ? 0 192.168.188.120:6380? ? ? 0.0.0.0:*? ? ? ? ? ? ? LISTEN? ? ? 22308/codis-server
5,啟動codis-fe(codis125上操作)
1),修改codis-fe啟動腳本
[root@codis125 codis]# cat admin/codis-fe-admin.sh
主要修改這幾行
#!/usr/bin/env bash
#COORDINATOR_NAME="filesystem"
#COORDINATOR_ADDR="/tmp/codis"
COORDINATOR_NAME="zookeeper"
COORDINATOR_ADDR="192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
2),啟動codis-fe腳本
[root@codis125 codis]#? ./admin/codis-fe-admin.sh start
3),檢查日志與端口
[root@codis125 codis]# cat log/codis-fe.log.2017-09-11
2017/09/11 19:24:32 main.go:101: [WARN] set ncpu = 8
2017/09/11 19:24:32 main.go:104: [WARN] set listen = 0.0.0.0:9090
2017/09/11 19:24:32 main.go:120: [WARN] set assets = /usr/local/codis/bin/assets
2017/09/11 19:24:32 main.go:155: [WARN] set --zookeeper = 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 19:24:32 main.go:209: [WARN] option --pidfile = /usr/local/codis/bin/codis-fe.pid
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.120:2181
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Authenticated: id=98639613905403907, timeout=40000
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
[root@codis125 codis]# netstat -tupnl |grep codis-fe
tcp6? ? ? 0? ? ? 0 :::9090? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 32141/codis-fe
4),訪問面板
http://192.168.188.125:9090/#codis-product1
六,Codis-fe面板操作
1,通過codis-fe添加group
通過web瀏覽器訪問集群管理頁面(fe地址:http://192.168.188.125:9090/#codis-product1) 選擇我們剛搭建的集群 codis-product1,在 Proxy 欄可看到我們已經啟動的 Proxy, 但是
Group 欄為空,因為我們啟動的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行輸入 1,再點擊 NEW GROUP 即可 添加 Codis Server,Add Server 行輸入我們剛剛啟動的
codis-server 地址,添加到我們剛新建的 Group,然后再點擊 Add Server 按鈕即可。
如上依次添加6個group,12個codis-server,默認每組里面第一個添加的為主,第二個添加的設置為從,同一個節點2個實例不能設置為同一group。
2,通過codis-fe初始化solt
新增的集群 slot 狀態是 offline,因此我們需要對它進行初始化(將 1024 個 slot 分配到各個 group),而初始化最快的方法可通過 fe 提供的 rebalance all slots 按鈕來做,如下圖
所示,點擊此按鈕,我們即快速完成了一個集群的搭建。
自動分配1024個solt到6個group,reblance all solts會自動分配完所以solt到6個group。
七,代理HA
1,在codis123與codis124上安裝lvs與nginx-tcp
2,配置好VIP+19000端口為第一個codis-dashboard業務線使用,其他類推
192.168.188.131:19000
[root@codis124 keepalived]# vim keepalived.conf
注意大網段一般不使用多播,使用單播。
有的時候也用單播:比如路由交換層禁用了ARP的廣播限制,造成KEEPALIVE主備協議無法通過廣播的方式進行通信,造成主備兩臺服務器都強占HAVIP地址,出現同時兩臺服務器都有VIP地址
的情況出現,必須通過配置來指定IP的兩臺服務器間進行通訊。
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 131
unicast_src_ip 192.168.188.124
unicast_peer {
192.168.188.123
}
priority 50
advert_int 3
authentication {
auth_type PASS
auth_pass bitauto
}
virtual_ipaddress {
192.168.188.131
}
}
[root@codis124 keepalived]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@codis124 keepalived]# systemctl start keepalived
[root@codis124 keepalived]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-09-12 11:01:31 CST; 5s ago
Process: 32865 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 32866 (keepalived)
CGroup: /system.slice/keepalived.service
├─32866 /usr/sbin/keepalived -D
├─32867 /usr/sbin/keepalived -D
└─32870 /usr/sbin/keepalived -D
[root@codis124 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port? ? ? ? ? Forward Weight ActiveConn InActConn
TCP? 192.168.188.131:19000 wrr
-> 192.168.188.123:19000? ? ? ? ? Route? 0? ? ? 0? ? ? ? ? 0
-> 192.168.188.124:19000? ? ? ? ? Route? 1? ? ? 0? ? ? ? ? 0
主從切換驗證分別在主上停止啟動keepalived
[root@codis124 keepalived]# tail -f /var/log/messages
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Configuration is using : 14608 Bytes
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Using LinkWatch kernel netlink reflector...
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Activating healthchecker for service [192.168.188.123]:19000
Sep 12 11:01:31 codis124 kernel: IPVS: [wrr] scheduler registered.
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Activating healthchecker for service [192.168.188.124]:19000
Sep 12 11:26:16 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.131
Sep 12 11:26:19 codis124 Keepalived_healthcheckers[32867]: Netlink reflector reports IP 192.168.188.131 added
Sep 12 11:26:24 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.131
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Received higher prio advert
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) removing protocol VIPs.
Sep 12 11:26:43 codis124 Keepalived_healthcheckers[32867]: Netlink reflector reports IP 192.168.188.131 removed
八,客戶端通過代理VIP訪問
最后驗證效果
[root@codis120 config]# telnet 192.168.188.131 19000
Trying 192.168.188.131...
Connected to 192.168.188.131.
Escape character is '^]'.
info
$2284
# Server
redis_version:3.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d0ce2cfe7ff224ff
redis_mode:standalone
os:Linux 3.10.0-514.26.2.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:31915
run_id:e5e12d6e422b0670a3a761350f6ad5ac5ec14d6f
tcp_port:6379
uptime_in_seconds:58481
uptime_in_days:0
hz:10
lru_clock:12015071
executable:/usr/local/codis/admin/../bin/codis-server
config_file:/usr/local/codis/admin/../config/redis-6379.conf
# Clients
connected_clients:33
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:4554376
used_memory_human:4.34M
used_memory_rss:16281600
used_memory_rss_human:15.53M
used_memory_peak:5537432
used_memory_peak_human:5.28M
total_system_memory:16650620928
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.57
mem_allocator:jemalloc-4.0.3
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1505139604
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:99
total_commands_processed:448295
instantaneous_ops_per_sec:13
total_net_input_bytes:8662811
total_net_output_bytes:113597360
instantaneous_input_kbps:0.22
instantaneous_output_kbps:2.89
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:794
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.188.122,port=6380,state=online,offset=66655,lag=1
master_repl_offset:66669
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:66668
# CPU
used_cpu_sys:23.81
used_cpu_user:19.91
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
九,壓力測試
多個客戶端壓力測試效果如下:
redis-benchmark -h 192.168.188.131 -p 19000? -q -n 1000000? -c 20? -d 100k