Redis的5種使用方式兴泥,各自優(yōu)缺點(diǎn)分析:http://www.reibang.com/p/220b8d2c41c3
使用單機(jī)環(huán)境相种,不同端口成洗,搭建三主三從的集群叹谁。本文中使用的ip為同一ip考润,搭建的集群是一個(gè)偽集群。搭建真正集群時(shí)蓬蝶,調(diào)整redis-cli --cluster create中的ip即可。
本文的軟硬件環(huán)境:
ip:172.16.101.35
os:CentOS Linux release 7.7.1908 (Core)
redis:6.0.8
- 下載redis:http://download.redis.io/releases猜惋,本文中使用的為redis-6.0.8.tar.gz
- 編譯安裝
2.1 解壓redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz
2.1 進(jìn)入redis-6.0.8目錄丸氛,執(zhí)行make,進(jìn)行編譯
cd redis-6.0.8
make
若編譯報(bào)錯(cuò)著摔,可能是缺少編譯環(huán)境gcc和tcl
1)安裝gcc缓窜,先清理掉上一步編譯產(chǎn)生的文件,執(zhí)行命令
make distclean
安裝gcc谍咆,執(zhí)行命令
yum install gcc -y
這里遇到一個(gè)問題:在安裝6.0.1版本make時(shí)會(huì)遇到這樣一個(gè)錯(cuò)誤禾锤,server.c:xxxx:xx: error: ‘xxxxxxxx’ has no member named ‘xxxxx
原因:gcc編譯工具版本的問題,centos7默認(rèn)安裝的版本是4.8.5摹察,但是要求對應(yīng)版本要在5.3以上恩掷,查看gcc版本命令
gcc -v
解決方法:升級到5.3以上版本,依次執(zhí)行命令
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile --使永久生效
2)安裝tcl供嚎,執(zhí)行命令
yum install tcl -y
重新編譯make
2.2 安裝
make install PREFIX=/usr/local/redis
這時(shí)就會(huì)在/usr/local目錄下生成一個(gè)redis目錄黄娘,后面操作redis均使用此目錄下文件峭状,解壓編譯的目錄作為源目錄。
集群搭建
首先創(chuàng)建集群文件夾逼争,存放不同配置文件
cd /usr/local/redis
mkdir redis-cluster
cd redis-cluster
mkdir 7291 7292 7293 7294 7295 7296
- 復(fù)制配置文件至 7291 目錄
cp /usr/local/redis/bin/redis.conf /usr/local/redis/redis-cluster/7291
- 修改7291下配置文件內(nèi)容优床,并將 bind 參數(shù)注釋,否則外部客戶端無法連接
port 7291
daemonize yes
protected-mode no
dir /usr/local/redis/redis-cluster/7291/
cluster-enabled yes
cluster-config-file nodes-7291.conf
cluster-node-timeout 5000
appendonly yes
pidfile /var/run/redis_7291.pid
- 把7291下的redis.conf復(fù)制到其他5個(gè)目錄
cd /usr/local/redis/redis-cluster/7291
cp redis.conf ../7292
cp redis.conf ../7293
cp redis.conf ../7294
cp redis.conf ../7295
cp redis.conf ../7296
- 批量替換內(nèi)容
cd /usr/local/redis/redis-cluster
sed -i 's/7291/7292/g' 7292/redis.conf
sed -i 's/7291/7293/g' 7293/redis.conf
sed -i 's/7291/7294/g' 7294/redis.conf
sed -i 's/7291/7295/g' 7295/redis.conf
sed -i 's/7291/7296/g' 7296/redis.conf
- 啟動(dòng)所有節(jié)點(diǎn)
cd /usr/local/redis/bin
./redis-server ../redis-cluster/7291/redis.conf
./redis-server ../redis-cluster/7292/redis.conf
./redis-server ../redis-cluster/7293/redis.conf
./redis-server ../redis-cluster/7294/redis.conf
./redis-server ../redis-cluster/7295/redis.conf
./redis-server ../redis-cluster/7296/redis.conf
- 檢查進(jìn)程
ps -ef|grep redis
root 10776 1 0 06:32 ? 00:00:21 ./redis-server *:7291 [cluster]
root 10877 1 0 06:34 ? 00:00:23 ./redis-server *:7292 [cluster]
root 10923 1 0 06:35 ? 00:00:22 ./redis-server *:7293 [cluster]
root 10965 1 0 06:35 ? 00:00:22 ./redis-server *:7294 [cluster]
root 11013 1 0 06:36 ? 00:00:23 ./redis-server *:7295 [cluster]
root 11071 1 0 06:37 ? 00:00:22 ./redis-server *:7296 [cluster]
- 創(chuàng)建集群誓焦,注意胆敞! 使用絕對ip,不要使用127.0.0.1
./redis-cli --cluster create 172.16.101.35:7291 172.16.101.35:7292 172.16.101.35:7293 172.16.101.35:7294 172.16.101.35:7295 172.16.101.35:7296 --cluster-replicas 1
參數(shù)說明: --cluster-replicas 1:表示一個(gè)主節(jié)點(diǎn)有一個(gè)從節(jié)點(diǎn)杂伟,集群需要6個(gè)節(jié)點(diǎn)移层,結(jié)果為三主三從;如果為2稿壁,則表示一主兩從幽钢,同時(shí)需要9個(gè)節(jié)點(diǎn)
- 測試
./usr/local/redis/bin/redis-cli -p 7291 連接redis后,可使用如下命令管理集群
1傅是、集群命令
cluster info :打印集群的信息
cluster nodes :列出集群當(dāng)前已知的所有節(jié)點(diǎn)(node)匪燕,以及這些節(jié)點(diǎn)的相關(guān)信息。
cluster meet :將 ip 和 port 所指定的節(jié)點(diǎn)添加到集群當(dāng)中喧笔,讓它成為集群的一份子帽驯。
cluster forget <node_id> :從集群中移除 node_id 指定的節(jié)點(diǎn)(保證空槽道)。
cluster replicate <node_id> :將當(dāng)前節(jié)點(diǎn)設(shè)置為 node_id 指定的節(jié)點(diǎn)的從節(jié)點(diǎn)书闸。
cluster saveconfig :將節(jié)點(diǎn)的配置文件保存到硬盤里面尼变。
2、槽slot命令
cluster addslots [slot …] :將一個(gè)或多個(gè)槽(slot)指派(assign)給當(dāng)前節(jié)點(diǎn)浆劲。
cluster delslots [slot …] :移除一個(gè)或多個(gè)槽對當(dāng)前節(jié)點(diǎn)的指派嫌术。
cluster flushslots :移除指派給當(dāng)前節(jié)點(diǎn)的所有槽,讓當(dāng)前節(jié)點(diǎn)變成一個(gè)沒有指派任何槽的節(jié)點(diǎn)牌借。
cluster setslot node <node_id> :將槽 slot 指派給 node_id 指定的節(jié)點(diǎn)度气,如果槽已經(jīng)指派給另一個(gè)節(jié)點(diǎn),那么先讓另一個(gè)節(jié)點(diǎn)刪除該槽>膨报,然后再進(jìn)行指派磷籍。
cluster setslot migrating <node_id> :將本節(jié)點(diǎn)的槽 slot 遷移到 node_id 指定的節(jié)點(diǎn)中。
cluster setslot importing <node_id> :從 node_id 指定的節(jié)點(diǎn)中導(dǎo)入槽 slot 到本節(jié)點(diǎn)现柠。
cluster setslot stable :取消對槽 slot 的導(dǎo)入(import)或者遷移(migrate)院领。
3、鍵命令
cluster keyslot :計(jì)算鍵 key 應(yīng)該被放置在哪個(gè)槽上够吩。
cluster countkeysinslot :返回槽 slot 目前包含的鍵值對數(shù)量比然。
cluster getkeysinslot :返回 count 個(gè) slot 槽中的鍵