codis

搭建:

安装jdk 1.8:
yum install -y java-1.8.0-openjdk.x86_64

安装Zookeeper(3台均要安装)
下载:
官网:https://www.apache.org/dyn/closer.cgi/zookeeper/

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

#解压Zookeeper 到目录/usr/local/下
tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz -C /usr/local/
cd /usr/local/apache-zookeeper-3.5.8
mkdir data
cd conf/
cp zoo_sample.cfg zoo.cfg
#配置zk:
vim zoo.cfg
修改以下信息:
dataDir=/usr/local/apache-zookeeper-3.5.8-bin/data
添加以下信息:
server.0=192.168.0.220:2888:3888
server.1=192.168.0.221:2888:3888
server.2=192.168.0.222:2888:3888


保存退出
cd /usr/local/apache-zookeeper-3.5.8-bin/data
echo “1”> myid
其中0,1,2为server.后边的值,写在其后边对应IP的机器上,如果192.168.0.222为2

#export ZK_HOME=/usr/local/apache-zookeeper-3.5.8-bin
#export PATH=$ZK_HOME/bin:$PATH

启动:
/usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh start
/usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh status
有Mode: follower 或 Mode: leader 表示成功

安装go:(3台均要安装)
下载:
wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz

tar -zxvf go1.14.3.linux-amd64.tar.gz -C /usr/local
vim /etc/profile
添加以下信息:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/codis
export GOROOT=/usr/local/go

立即生效:
source /etc/profile
#测试检查是否安装完成
go version

codis:(3台均要安装)
下载:
mkdir -p $GOPATH/src/github.com/CodisLabs
cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
cd $GOPATH/src/github.com/CodisLabs/codis
make

修改redis配置文件:
cd /usr/local/codis/src/github.com/CodisLabs/codis/config
vim redis.conf
修改以下信息:
bind 0.0.0.0
protected-mode yes
dir “/usr/local/codis/src/github.com/CodisLabs/codis”

启动codis-dashboard(启动1台)
./admin/codis-dashboard-admin.sh start
tail -100 ./log/codis-dashboard.log.2017-04-08

启动codis-proxy(启动1台)
./admin/codis-proxy-admin.sh start
tail -100 ./log/codis-proxy.log.2017-04-08

启动codis-server(启动3台)
./admin/codis-server-admin.sh start
tail -100 /tmp/redis_6379.log

bin/codis-server config/redis-6379.conf
bin/codis-server config/redis-6380.conf

启动codis-fe(启动1台)
./admin/codis-fe-admin.sh start
tail -100 ./log/codis-fe.log.2017-04-08

修改配置:
protected-mode no
daemonize yes
logfile “/usr/local/codis/src/github.com/CodisLabs/codis/log/redis-sentinel.log”

启动redis-sentinel哨兵监控:(启动3台)
bin/redis-sentinel config/sentinel.conf

通过web浏览器访问集群管理页面(fe地址:127.0.0.1:9090)

http://192.168.0.210:9090

使用:


添加组:
在group块里添加对应分组

添加节点:
直接在group块区域进行操作,添加指定的添加到指定的组里即可

删除节点:
正常下架只需要点击节点后边的删除按钮即可,但因为里面还有数据,是不允许直接下架的,此时需要先将数据进行迁移。
进入codis-fe管理页面,并在页面Slots块中操作,
第一步,确认一个需要迁移的组的数据块的编号,例如这里499-512的块是数据组4的,我现在要迁移组4,就选定这个
第二步,把刚才获取到的信息填进去,就是把500这个编号的数据块从组4迁移到组5,点击按钮执行
然后你就会看到,
显然组4的信息消失了,codis把组4的数据块都迁移到了组5去了,
这个时候,这个redis-server节点就可以删除了

使用
连接Proxy对应的地址和IP
192.168.0.220:19000
$server = “192.168.0.220:19000”;
$client = new Predis\Client($server);

$client->set(“test1”, “tank12”);
$result = $client->get(“test1”);
var_dump($result);

问题:

2020/05/20 13:56:00 topom.go:189: [ERROR] store: acquire lock of codis-demo failed
[error]: file already exists

如果dashboard使用filesystem,
删除/tmp/codis/data.lck和/tmp/codis/data/codis3/codis-demo/topom,dashboard可以重新启动。
但是codis-server信息都没了。这个以后再遇到再具体研究。
如果提示node already exists 则执行以下操作
bin/codis-admin –remove-lock –product=codis-test –zookeeper=192.168.0.210:2181

使用知识点:

1.redis-sentinels起到监听集群中主的状态,一但有主宕掉会将从变更为主,但是在变更期间可能会有数据丢失的问题,由于主宕机后且从没有切换回主之前是无法写入的,所以会造成数据异常,只有从升级为主之后才可正常。