redis
redis下載安裝
cd tmp
mkdir frank
cd frank
mkdir redis
cd redis
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar xzf redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
redis查看容达,關(guān)閉,卸載
- 查看
ps aux|grep redis
- 關(guān)閉
redis-cli shutdown
or redis-cli -h 127.0.0.1 -p 6379 shutdown
or kill -9 10654
- 卸載
rm -rf /usr/local/bin/redis*
rm -rf /tmp/frank/redis/redis-4.0.1
啟動redis服務(wù)
redis-server
啟動redis客戶端
redis-cli or redis-cli -h 127.0.0.1 -p 6379
ruby
安裝需要的Package
# yum -y install gcc
# yum -y install gcc-c++
# yum -y install zlib zlib-devel
# yum -y install readline readline-devel
# yum -y install openssl openssl-devel
最好是 #yum install gcc gcc-c++ openssl* readline* ncurses* zlib* libxml* libjpeg* libpng* libxslt* libtool*
ruby下載安裝
cd tmp
mkdir frank
cd frank
mkdir ruby
cd ruby
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
tar xzf ruby-2.4.2.tar.gz
cd ruby-2.4.2
./configure
make && make install
安裝redis接口,gem未ruby下的一個工具包
gem install redis
1.問題1
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
解決 :
# 進(jìn)入ruby源碼文件夾
# 安裝ruby自身提供的zlib包
cd ext/zlib
ruby ./extconf.rb
make
make install
搭建redis集群
- 環(huán)境
redis 采用 redis-3.2.1 版本扒袖。
服務(wù)器CentOS7.0 兩臺 (IP:116.196.65.198)麻养,(IP:47.52.41.245)
- 在兩臺服務(wù)器上美尸,下載安裝redis在tmp/frank/redis目錄下
cd /tmp
mkdir frank
cd frank
mkdir redis
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf redis-3.2.1.tar.gz
cd redis-3.2.1
make && make install
- 將 redis安裝目錄下面的src目錄下面的redis-trib.rb 復(fù)制到 /usr/local/bin 目錄下
cd src
cp redis-trib.rb /usr/local/bin/
- 創(chuàng)建 Redis 節(jié)點
分別在兩臺服務(wù)器上redis安裝目錄下創(chuàng)建 redis_cluster 目錄;
mkdir redis_cluster
在116.196.65.198服務(wù)器上面的redis_cluster目錄下面創(chuàng)建名為7000侦高、7001、7002的目錄厌杜,并將 redis.conf 拷貝到這三個目錄中
cd redis_cluster
mkdir 7000 7001 7002
cd ..
cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002
分別修改這三個配置文件奉呛,修改如下內(nèi)容
port 7000 //端口7000,7002,7003 protected-mode no //關(guān)掉保護(hù)模式3.2之后 不然會報Sorry, can't connect to node
#bind 本機ip //默認(rèn)ip為127.0.0.1,在3.2之后要注釋掉 daemonize yes //redis后臺運行
pidfile /var/run/redis_7000.pid //pidfile文件對應(yīng)7000,7001,7002
cluster-enabled yes //開啟集群 把注釋#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次啟動自動生成 7000,7001,7002
cluster-node-timeout 15000 //請求超時 默認(rèn)15秒夯尽,可自行設(shè)置
appendonly yes //aof日志開啟 有需要就開啟瞧壮,它會每次寫操作都記錄一條日志
接著在另外一臺機器上(47.52.41.245),的操作重復(fù)以上三步匙握,只是把目錄改為7003咆槽、7004、7005圈纺,對應(yīng)的配置文件也按照這個規(guī)則修改即可
- 啟動各個節(jié)點
#第一臺機器上執(zhí)行即116.196.65.198
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
#另外一臺機器上執(zhí)行即47.52.41.245
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf
- 檢查 redis 啟動情況
ps -ef | grep redis
root 2138 1 0 13:57 ? 00:00:01 redis-server *:7003 [cluster]
root 2142 1 0 13:57 ? 00:00:01 redis-server *:7004 [cluster]
root 2146 1 0 13:57 ? 00:00:01 redis-server *:7005 [cluster]
root 2185 2119 0 14:20 pts/0 00:00:00 grep --color=auto redis
netstat -tnlp | grep redis
tcp 0 0 0.0.0.0:17003 0.0.0.0:* LISTEN 2138/redis-server *
tcp 0 0 0.0.0.0:17004 0.0.0.0:* LISTEN 2142/redis-server *
tcp 0 0 0.0.0.0:17005 0.0.0.0:* LISTEN 2146/redis-server *
tcp 0 0 0.0.0.0:7003 0.0.0.0:* LISTEN 2138/redis-server *
tcp 0 0 0.0.0.0:7004 0.0.0.0:* LISTEN 2142/redis-server *
tcp 0 0 0.0.0.0:7005 0.0.0.0:* LISTEN 2146/redis-server *
tcp6 0 0 :::17003 :::* LISTEN 2138/redis-server *
tcp6 0 0 :::17004 :::* LISTEN 2142/redis-server *
tcp6 0 0 :::17005 :::* LISTEN 2146/redis-server *
tcp6 0 0 :::7003 :::* LISTEN 2138/redis-server *
tcp6 0 0 :::7004 :::* LISTEN 2142/redis-server *
tcp6 0 0 :::7005 :::* LISTEN 2146/redis-server *
- 創(chuàng)建集群
Redis 官方提供了 redis-trib.rb 這個工具秦忿,就在解壓目錄的 src 目錄中,第三步中已將它復(fù)制到 /usr/local/bin 目錄中蛾娶,可以直接在命令行中使用了灯谣。使用下面這個命令即可完成安裝
redis-trib.rb create --replicas 1 116.196.65.198:7000 116.196.65.198:7001 116.196.65.198:7002 47.52.41.245:7003 47.52.41.245:7004 47.52.41.245:7005
其中,前三個 ip:port 為第一臺機器的節(jié)點茫叭,剩下三個為第二臺機器酬屉。
這個工具是用 ruby 實現(xiàn)的,所以需要安裝 ruby揍愁。安裝命令如下:
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
或者按上面的流程安裝ruby
之后再運行 redis-trib.rb 命令呐萨,會出現(xiàn)如下提示:
redis-trib.rb create --replicas 1 116.196.65.198:7000 116.196.65.198:7001 116.196.65.198:7002 47.52.41.245:7003 47.52.41.245:7004 47.52.41.245:7005
###出現(xiàn)下面這些代表成功
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
116.196.65.198:7000
47.52.41.245:7003
116.196.65.198:7001
Adding replica 47.52.41.245:7004 to 116.196.65.198:7000
Adding replica 116.196.65.198:7002 to 47.52.41.245:7003
Adding replica 47.52.41.245:7005 to 116.196.65.198:7001
M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000
slots:0-5460 (5461 slots) master
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
slots:10923-16383 (5461 slots) master
S: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002
replicates cc86a24f3896ad7530e2687cf52582912f74b661
M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
slots:5461-10922 (5462 slots) master
S: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004
replicates 33d50636b5235de9970de2da75901b642d2b14d2
S: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005
replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join......
>>> Performing Cluster Check (using node 116.196.65.198:7000)
M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000
slots:0-5460 (5461 slots) master
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
slots:10923-16383 (5461 slots) master
M: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002
slots: (0 slots) master
replicates cc86a24f3896ad7530e2687cf52582912f74b661
M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
slots:5461-10922 (5462 slots) master
M: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004
slots: (0 slots) master
replicates 33d50636b5235de9970de2da75901b642d2b14d2
M: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005
slots: (0 slots) master
replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
- 集群驗證
在第一臺機器上連接集群的7002端口的節(jié)點,在另外一臺連接7005節(jié)點莽囤,連接方式為 redis-cli -h 116.196.65.198 -c -p 7002 ,加參數(shù) -C 可連接到集群谬擦,因為上面 redis.conf 將 bind 改為了ip地址,所以 -h 參數(shù)不可以省略朽缎。
####鏈接116.196.65.198:7002存入 鍵jiqun 值chenggong
[root@iZj6c7eeosj2t5vjw8rf4xZ redis-3.2.1]# redis-cli -h 116.196.65.198 -c -p 7002
116.196.65.198:7002> set jiqun chenggong
-> Redirected to slot [8235] located at 47.52.41.245:7003
OK
47.52.41.245:7003>
####鏈接47.52.41.245:700取出 鍵jiqun 的值
[root@jdu4e00u53f7 redis-3.2.1]# redis-cli -h 47.52.41.245 -c -p 7005
47.52.41.245:7005> get jiqun
-> Redirected to slot [8235] located at 47.52.41.245:7003
"chenggong"
47.52.41.245:7003>
- 可能出現(xiàn)問題
- Sorry, can't connect to node
解決方案:
首先檢查服務(wù)器端口是否開發(fā)惨远,阿里,京東等服務(wù)器需要在安全組里面開發(fā)
端口话肖,直接在服務(wù)器里面用命令開發(fā)端口是無效的北秽。其次在redis.config配置文件里面關(guān)閉保護(hù)模式和注釋掉bin
- [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some
解決方案:
1)、將需要新增的節(jié)點下aof最筒、rdb等本地備份文件刪除贺氓;
2)、同時將新Node的集群配置文件刪除,即:刪除你redis.conf里面cluster-config-file所在的文件床蜘;
3)辙培、再次添加新節(jié)點如果還是報錯蔑水,則登錄新Node,./redis-cli –h x –p對數(shù)據(jù)庫進(jìn)行清除:
116.196.65.198:7000> flushdb #清空當(dāng)前數(shù)據(jù)庫
4),重啟服務(wù)器扬蕊,或者重啟redis
- Waiting for the cluster to join 一直等待
解決方案:
1搀别、服務(wù)器的防火墻是否允許集群總線端口通過
redis集群不僅需要開通redis客戶端連接的端口,而且需要開通集群總線端口尾抑,集群總線端口為redis客戶端連接的端口 + 10000
如上面用到redis端口為6379歇父,7000,7001,7002,7003,7004,7005,則集群總線端口為16379再愈,17000,17001,17002,17003,17004,17005庶骄,故,所有服務(wù)器的點需要開通redis的客戶端連接端口和集群總線端口践磅。如果服務(wù)器有安全組安全組也要開通,沒有只要開通服務(wù)器本身的
##centos7.3服務(wù)器
systemctl status firewalld.service #防火墻狀態(tài)
systemctl start firewalld.service #防火墻開啟
systemctl disable firewalld.service #防火墻不可用
firewall-cmd --zone=public --add-port=80/tcp --permanent #開啟端口
命令含義:
--zone #作用域
--add-port=80/tcp #添加端口灸异,格式為:端口/通訊協(xié)議
--permanent #永久生效府适,沒有此參數(shù)重啟后失效
重啟防火墻
firewall-cmd --reload