Redis 4.0叢集環境部署
實驗環境:
Redis版本:4.0.9
OS:redhat 6.4三臺
IP:10.10.1.129 Hostname:wjq1 Port:[7001/7002/7003]
IP:10.10.1.130 Hostname:wjq2 Port:[7004/7005/7006]
IP:10.10.1.131 Hostname:wjq3 Port:[7007/7008/7009]
一、安裝redis
詳細關於redis 4.0的安裝可參考:CentOS 7.4安裝redis 4.0詳細步驟【http://blog.itpub.net/31015730/viewspace-2155307/】
下載、解壓、編譯、安裝redis4.0.9
詳細的安裝過程可參考:
[root@wjq1 wjq-software]# tar -zxvf redis-4.0.9.tar.gz
[root@wjq1 redis-4.0.9]# make
cd src && make all
make[1]: Entering directory `/usr/local/redis/redis-4.0.9/src'
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/redis/redis-4.0.9/src'
make: *** [all] Error 2
在README.md中有這有一段話:
解釋一下:
Redis在安裝的時候關於記憶體分配器allocator, 如果有MALLOC 這個 環境變數, 會有用這個環境變數的 去建立Redis。如果沒有,那麼就是用預設的分配器;redis2.4版本之後,預設使用jemalloc來做記憶體管理,因為jemalloc被證明解決fragmentation problem(記憶體碎片化問題)比libc更好,而且libc 並不是預設的 分配器, 但是如果你又沒有jemalloc 而只有 libc 當然 make 出錯。 所以加這麼一個引數。
解決方法:
[root@wjq1 src]# make MALLOC=libc
如果想用jemalloc的話,安裝jemalloc即可;如果使用yum安裝的話需要配置EPEL源
[root@wjq1 src]# make MALLOC=libc
[root@wjq1 redis-4.0.9]# make PREFIX=/usr/local/redis install
[root@wjq1 redis]# ll
total 8
drwxr-xr-x 2 root root 4096 Jun 5 11:32 bin
drwxr-xr-x 6 root root 4096 Jun 5 11:24 redis-4.0.9
[root@wjq1 redis-4.0.9]# cp redis.conf /etc/redis/
二、建立redis節點
1、首先在10.10.1.129主機上建立目錄/etc/redis/redis_cluster
[root@wjq1 ~]# mkdir /etc/redis/redis_cluster
2、在redis_cluster目錄下,建立名為7000、7001、7002的目錄,並將 redis.conf複製到這三個目錄中
[root@wjq1 ~]# mkdir /etc/redis/redis_cluster/{7001,7002,7003}
[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7001
[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7002
[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7003
3、分別修改這三個配置檔案,修改的內容如下所示:
[root@wjq1 ~]# cat /etc/redis/redis_cluster/7001/redis.conf |grep -v ^# |grep -v ^$
//預設ip為127.0.0.1,需要改為其他節點機器可訪問的ip,否則建立叢集時無法訪問對應的埠,無法建立叢集
bind 10.10.1.129
//埠7000,7002,7003
port 7001
//redis後臺執行
daemonize yes
//pidfile檔案對應7000,7001,7002
pidfile /var/run/redis/redis_7001.pid
//logfile檔案對應7000,7001,7002
logfile /var/log/redis/redis_7001.log
//rdb檔案對應7000,7001,7002
dbfilename dump7001.rdb
//開啟叢集,把註釋#去掉
cluster-enabled yes
//叢集的配置,配置檔案首次啟動自動生成 7000,7001,7002
cluster-config-file nodes-7001.conf
//請求超時,預設15秒,可自行設定
cluster-node-timeout 15000
關於redis配置檔案中引數的說明可參考:redis配置檔案中各引數詳解【http://blog.itpub.net/31015730/viewspace-2154818/】
接著在另外兩臺機器上(10.10.1.130、10.10.1.131)重複以上三步,只是把目錄改為7003、7004、7005、7006、7007、7008對應的配置檔案也按照這個規則修改即可
三、啟動各個節點的redis
節點一:
[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7001/redis.conf
[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7002/redis.conf
[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7003/redis.conf
[root@wjq1 ~]#
[root@wjq1 ~]# ps -ef | grep redis
root 40414 1 0 12:36 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7001 [cluster]
root 40419 1 0 12:36 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7002 [cluster]
root 40424 1 0 12:36 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7003 [cluster]
root 40429 38753 0 12:36 pts/0 00:00:00 grep redis
[root@wjq1 ~]#
[root@wjq1 ~]# netstat -tuplan | grep redis
tcp 0 0 10.10.1.129:17003 0.0.0.0:* LISTEN 40424/redis-server
tcp 0 0 10.10.1.129:7001 0.0.0.0:* LISTEN 40414/redis-server
tcp 0 0 10.10.1.129:7002 0.0.0.0:* LISTEN 40419/redis-server
tcp 0 0 10.10.1.129:7003 0.0.0.0:* LISTEN 40424/redis-server
tcp 0 0 10.10.1.129:17001 0.0.0.0:* LISTEN 40414/redis-server
tcp 0 0 10.10.1.129:17002 0.0.0.0:* LISTEN 40419/redis-server
節點二:
[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7004/redis.conf
[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7005/redis.conf
[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7006/redis.conf
[root@wjq2 ~]#
[root@wjq2 ~]# ps -ef | grep redis
root 39261 1 0 12:38 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7004 [cluster]
root 39266 1 0 12:38 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7005 [cluster]
root 39271 1 0 12:38 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7006 [cluster]
root 39276 38355 0 12:38 pts/0 00:00:00 grep redis
[root@wjq2 ~]#
[root@wjq2 ~]# netstat -tuplan | grep redis
tcp 0 0 10.10.1.130:17004 0.0.0.0:* LISTEN 39261/redis-server
tcp 0 0 10.10.1.130:17005 0.0.0.0:* LISTEN 39266/redis-server
tcp 0 0 10.10.1.130:17006 0.0.0.0:* LISTEN 39271/redis-server
tcp 0 0 10.10.1.130:7004 0.0.0.0:* LISTEN 39261/redis-server
tcp 0 0 10.10.1.130:7005 0.0.0.0:* LISTEN 39266/redis-server
tcp 0 0 10.10.1.130:7006 0.0.0.0:* LISTEN 39271/redis-server
節點三:
[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7007/redis.conf
[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7008/redis.conf
[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7009/redis.conf
[root@wjq3 ~]#
[root@wjq3 ~]# ps -ef | grep redis
root 24742 1 0 13:00 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7007 [cluster]
root 24758 1 0 13:01 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7008 [cluster]
root 24763 1 1 13:01 ? 00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7009 [cluster]
root 24768 23890 1 13:01 pts/0 00:00:00 grep redis
[root@wjq3 ~]#
[root@wjq3 ~]# netstat -tuplan | grep redis
tcp 0 0 10.10.1.131:17007 0.0.0.0:* LISTEN 24742/redis-server
tcp 0 0 10.10.1.131:17008 0.0.0.0:* LISTEN 24758/redis-server
tcp 0 0 10.10.1.131:17009 0.0.0.0:* LISTEN 24763/redis-server
tcp 0 0 10.10.1.131:7007 0.0.0.0:* LISTEN 24742/redis-server
tcp 0 0 10.10.1.131:7008 0.0.0.0:* LISTEN 24758/redis-server
tcp 0 0 10.10.1.131:7009 0.0.0.0:* LISTEN 24763/redis-server
注:確保每個節點配置正確,並且能夠成功啟動起來
隨便找個節點測試一下:
[root@wjq1 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.129 -p 7002
10.10.1.129:7002>
10.10.1.129:7002> keys *
(empty list or set)
10.10.1.129:7002>
10.10.1.129:7002> set name wjq
(error) CLUSTERDOWN Hash slot not served
連線成功了,但好像報錯了???
(error) CLUSTERDOWN Hash slot not served(不提供叢集的雜湊槽),這是什麼鬼?
這是因為雖然我們配置並啟動了 Redis 叢集服務,但是他們暫時還並不在一個叢集中,互相直接發現不了,而且還沒有可儲存的位置,就是所謂的slot(槽)
四、redis-trib建立叢集
Redis的例項全部執行之後,還需要redis-trib.rb工具來完成叢集的建立,redis-trib.rb二進位制檔案在Redis包主目錄下的src目錄中,執行該工具依賴Ruby環境和gem,因此需要提前安裝。
1、安裝ruby【任意一個節點安裝即可】
[root@wjq1 ~]# yum install ruby
[root@wjq1 ~]# ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
[root@wjq1 ~]#
[root@wjq1 ~]# gem -v
-bash: gem: command not found
使用yum安裝ruby後,但是沒有gem命令並且ruby的版本是1.8.7並不滿足後續的要求;最新redis要求ruby版本在2.2以上,系統自帶ruby大部分都低於2.2,輸入以下命令,刪除舊版本:
[root@wjq1 ~]# yum remove ruby
下面是完成的安裝ruby2.4的步驟:
(1)首先下載ruby2.4或高版本
下載地址:
(2)安裝ruby之前,首選安裝openssl,否則後續再安裝ruby的過程中遇到非常多的問題,詳細的錯誤在文章後邊有相應的解決方法
OpenSSL官網:
下載OpenSSL版本1.0.2n原始碼:
[root@wjq1~]# wget
解壓並進入openssl程式碼根目錄:
[root@wjq1 ~]# tar zxvf openssl-1.0.2n.tar.gz
[root@wjq1 ~]# cd openssl-1.0.2n
配置、編譯、安裝:
[root@wjq1 openssl-1.0.2n]# ./config
[root@wjq1 openssl-1.0.2n]# make
[root@wjq1 openssl-1.0.2n]# make install
安裝完成後,預設的安裝位置為/usr/local/ssl
(3)解壓、編譯安裝ruby
[root@wjq2 ~]# mkdir -p /usr/local/ruby2.4
[root@wjq2 ~]# cd /wjq-software/
[root@wjq2 wjq-software]# ll
total 120240
drwxr-xr-x 20 root root 4096 Jun 5 15:57 openssl-1.0.2n
-rw-r--r-- 1 root root 5375802 Jun 5 15:51 openssl-1.0.2n.tar.gz
-rw-r--r-- 1 root root 91648 Jun 5 15:50 redis-4.0.1.gem
-rw-r--r-- 1 root root 14225338 Jun 5 15:53 ruby-2.4.4.tar.gz
[root@wjq2 wjq-software]#
[root@wjq2 wjq-software]# tar -zxvf ruby-2.4.4.tar.gz
[root@wjq2 ruby-2.4.4]# ./configure -prefix=/usr/local/ruby2.4 --with-openssl-include=/usr/local/ssl/include/ --with-openssl-lib=/usr/local/ssl/lib
[root@wjq2 ruby-2.4.4]# make
[root@wjq2 ruby-2.4.4]# make install
[root@wjq2 ruby-2.4.4]# /usr/local/ruby2.4/bin/ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]
[root@wjq2 ruby-2.4.4]#
[root@wjq2 ruby-2.4.4]# /usr/local/ruby2.4/bin/gem -v
2.6.14.1
[root@wjq2 ruby-2.4.4]# vim ~/.bash_profile
RUBY_PATH=/usr/local/ruby2.4/bin
PATH=$PATH:$HOME/bin:/usr/local/mongdb/bin:$RUBY_PATH
2、使用gem安裝redis安裝redis的介面
[root@wjq2 ~]# gem install redis
##由於源的原因,可能下載失敗,就手動下載下來安裝
下載地址:
[root@wjq2 ~]# gem install /wjq-software/redis-4.0.1.gem
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 0 seconds
WARNING: Unable to pull data from '': timed out ()
1 gem installed
3、開始建立叢集,這才是真正的叢集
Redis 官方提供了 redis-trib.rb 這個工具,就在解壓目錄的 src 目錄中
簡單解釋一下這個命令:呼叫 ruby 命令來進行建立叢集:
--replicas 1 表示主從複製比例為 1:1,即一個主節點對應一個從節點;然後,預設給我們分配好了每個主節點和對應從節點服務,以及 solt 的大小,因為在 Redis 叢集中有且僅有 16383 個 solt ,預設情況會給我們平均分配,當然你可以指定,後續的增減節點也可以重新分配。
[root@wjq2 ~]# /usr/local/redis/redis-4.0.9/src/redis-trib.rb create --replicas 1 \
> 10.10.1.129:7001 10.10.1.129:7002 10.10.1.129:7003 \
> 10.10.1.130:7004 10.10.1.130:7005 10.10.1.130:7006 \
> 10.10.1.131:7007 10.10.1.131:7008 10.10.1.131:7009
>>> Creating cluster
>>> Performing hash slots allocation on 9 nodes...
Using 4 masters:
10.10.1.129:7001
10.10.1.130:7004
10.10.1.131:7007
10.10.1.129:7002
Adding replica 10.10.1.131:7008 to 10.10.1.129:7001
Adding replica 10.10.1.129:7003 to 10.10.1.130:7004
Adding replica 10.10.1.130:7006 to 10.10.1.131:7007
Adding replica 10.10.1.131:7009 to 10.10.1.129:7002
Adding replica 10.10.1.130:7005 to 10.10.1.129:7001
M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001
slots:0-4095 (4096 slots) master
M: 924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002
slots:12288-16383 (4096 slots) master
S: b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003
replicates a4a5de0be9bb5704eec17cbe0223076eb38fc4a4
M: a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004
slots:4096-8191 (4096 slots) master
S: bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005
replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957
S: 4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006
replicates 2b0f974e151cd798f474107ac68a47e188cc88a2
M: 2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007
slots:8192-12287 (4096 slots) master
S: b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008
replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957
S: 5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009
replicates 924d61969343b5cc2200bd3a2277e815dc76048c
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 10.10.1.129:7001)
M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001
slots:0-4095 (4096 slots) master
2 additional replica(s)
S: 4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006
slots: (0 slots) slave
replicates 2b0f974e151cd798f474107ac68a47e188cc88a2
M: 924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002
slots:12288-16383 (4096 slots) master
1 additional replica(s)
M: 2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007
slots:8192-12287 (4096 slots) master
1 additional replica(s)
S: 5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009
slots: (0 slots) slave
replicates 924d61969343b5cc2200bd3a2277e815dc76048c
S: b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003
slots: (0 slots) slave
replicates a4a5de0be9bb5704eec17cbe0223076eb38fc4a4
S: b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008
slots: (0 slots) slave
replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957
S: bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005
slots: (0 slots) slave
replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957
M: a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004
slots:4096-8191 (4096 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
出現上述的輸出則代表叢集搭建成功啦!!!
說明:
M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 為主節點id
S: b240d86fdf6abc73df059baf64b930387664da15 為從節點的id
目前來看,7001、7002、7004、7007 為主節點,7003、7005、7008、7009 為從節點,並向你確認是否同意這麼配置。輸入 yes 後,會開始叢集建立。
五、叢集驗證
1、隨意登入一個節點,檢視叢集的資訊和節點的資訊
加引數 -C 可連線到叢集,因為 redis.conf 將 bind 改為了ip地址,所以 -h 引數不可以省略,-p 引數為埠號
[root@wjq2 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.130 -p 7005 -c
10.10.1.130:7005>
10.10.1.130:7005> cluster info
cluster_state:ok #叢集狀態
cluster_slots_assigned:16384 #被分配的槽位數
cluster_slots_ok:16384 #正確分配的槽位
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9 #叢集節點數
cluster_size:4
cluster_current_epoch:9
cluster_my_epoch:1
cluster_stats_messages_ping_sent:215
cluster_stats_messages_pong_sent:225
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:445
cluster_stats_messages_ping_received:222
cluster_stats_messages_pong_received:220
cluster_stats_messages_meet_received:3
cluster_stats_messages_received:445
10.10.1.130:7005>
10.10.1.130:7005> cluster nodes
4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006@17006 slave 2b0f974e151cd798f474107ac68a47e188cc88a2 0 1528186867658 7 connected
924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002@17002 master - 0 1528186865000 2 connected 12288-16383
b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008@17008 slave 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 0 1528186865643 8 connected
7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001@17001 master - 0 1528186862612 1 connected 0-4095
bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005@17005 myself,slave 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 0 1528186863000 5 connected
b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003@17003 slave a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 0 1528186865000 4 connected
a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004@17004 master - 0 1528186866650 4 connected 4096-8191
5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009@17009 slave 924d61969343b5cc2200bd3a2277e815dc76048c 0 1528186866000 9 connected
2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007@17007 master - 0 1528186864631 7 connected 8192-12287
10.10.1.130:7005>
2、在其中的一個節點插入一個key
10.10.1.130:7005> keys *
(empty list or set)
10.10.1.130:7005>
10.10.1.130:7005> set name wjq
-> Redirected to slot [5798] located at 10.10.1.130:7004
OK
10.10.1.130:7004> get name
"wjq"
在其他的節點驗證是否成功
[root@wjq3 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.131 -p 7009 -c
10.10.1.131:7009> get name
-> Redirected to slot [5798] located at 10.10.1.130:7004
"wjq"
10.10.1.130:7004>
六、小結
redis cluster在設計的時候,就考慮到了去中心化、去中介軟體,也就是說,叢集中的每個節點都是平等關係,都是對等的,每個節點都儲存各自的資料和整個叢集的狀態。每個節點都和其他所有節點連線,而且這些連線保持活躍,這樣就保證了我們只需要連線叢集中的任意一個節點,就可以獲取到其他節點的資料。
Redis 叢集沒有並使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊槽 (hash slot)的方式來分配的。redis cluster 預設分配了 16384 個 slot,當我們 set 一個 key 時,會用CRC16演算法來取模得到所屬的 slot,然後將這個 key 分到雜湊槽區間的節點上,具體演算法就是:CRC16(key) % 16384。所以我們在測試的時候看到 set 和 get 的時候,直接跳轉到了7000埠的節點。
Redis 叢集會把資料存在一個 master 節點,然後在這個 master 和其對應的 salve 之間進行資料同步。當讀取資料時,也根據一致性雜湊演算法到對應的 master 節點獲取資料。只有當一個 master 掛掉之後,才會啟動一個對應的 salve 節點,充當 master 。
需要注意的是:必須要3個或以上的主節點,否則在建立叢集時會失敗,並且當存活的主節點數小於總節點數的一半時,整個叢集就無法提供服務了。
但是在搭建的過程中遇到一些問題,下面是問題的處理方法:
搭建過程中遇到的問題總結:
[root@wjq1 ~]# gem install redis
#由於源的原因,可能下載失敗,就手動下載下來安裝
[root@wjq2 ~]# gem install /wjq-software/redis-4.0.1.gem
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
原因:
缺少openssl,需要安裝openssl包,但是之前我已經安裝一個openssl-1.0.2n.tar.gz
解決方法:
[root@wjq1 ruby-2.4.4]# cd ./ext/openssl/
[root@wjq1 openssl]# ruby extconf.rb
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for openssl/ssl.h... no
提示沒有找到ssl.h, 因為出現了錯誤:openssl/ssl.h:沒有那個檔案,接著按照下面的方法執行
[root@wjq1 openssl]# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include/ --with-openssl-lib=/usr/local/ssl/lib
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for openssl/ssl.h... yes
checking for OpenSSL version is 0.9.8 or later... yes
.....
checking for SSL_CTX_set_min_proto_version in openssl/ssl.h... no
checking for SSL_CTX_get_security_level()... no
checking for X509_get0_notBefore()... no
checking for SSL_SESSION_get_protocol_version()... no
creating extconf.h
creating Makefile
接下來並且將ruby 原始碼目錄下的include目錄軟連結到 / 目錄下:
[root@wjq1 openssl]# ln -s /wjq-software/ruby-2.4.4/include/ /
[root@wjq1 openssl]# ll /
lrwxrwxrwx 1 root root 33 Jun 5 15:08 include -> /wjq-software/ruby-2.4.4/include/
接著再執行make,如果在配置openssl時沒有-fPIC引數時就會出現如下錯誤
[root@wjq1 openssl]# make
compiling openssl_missing.c
compiling ossl.c
compiling ossl_asn1.c
.....
compiling ossl_x509revoked.c
compiling ossl_x509store.c
linking shared-object openssl.so
/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [openssl.so] Error 1
提示重新試過編譯openssl時帶上-fPIC引數 。於是重新編譯openssl,當出現該錯誤的時候,就需要重新編譯openssl,在編譯的時候要加上-fPIC引數,然後再次執行即可
[root@wjq1 openssl]# make
compiling openssl_missing.c
compiling ossl.c
compiling ossl_asn1.c
.....
compiling ossl_x509store.c
linking shared-object openssl.so
[root@wjq1 openssl]# make install
/usr/bin/install -c -m 0755 openssl.so /usr/local/lib/ruby/site_ruby/2.4.0/x86_64-linux
installing default openssl libraries
安裝成功,回過頭來,這時候我們已經把配置叢集遇到的各種問題已經解決好了,再次使用gem install 安裝 ruby redis 介面:
[root@wjq1 ~]# gem install /wjq-software/redis-4.0.1.gem
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 0 seconds
WARNING: Unable to pull data from '': timed out ()
1 gem installed
錯誤解決可參考:
https://www.cnblogs.com/a-du/p/7767810.html
這一篇 Redis 4.0叢集部署搭建的文章真的是一步一步的走下來的,只要你安裝我的步驟來,就保證你能成功搭建一個 Redis 叢集玩玩,也可以這麼說,除了步驟繁瑣外,幾乎不存在技術含量,估計能看完的人都感覺累。接下來可能就是動態擴容、增加節點和減少節點,重新分配槽大小等,當然,還有最重要的就是怎麼和我們程式結合起來,以及如何更好的把 Redis 快取叢集發揮出應有的效果,這些才是最重要的,在接下的部落格將會針對以上的問題做一些相關的測試,感興趣的可以關注作者部落格!!
更多關於redis的相關內容可參考作者的部落格:http://blog.itpub.net/31015730/cid-185228-list-1/
作者:SEian.G(苦練七十二變,笑對八十一難)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31015730/viewspace-2155989/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redis叢集之分片叢集的原理和常用代理環境部署Redis
- Centos7部署Redis叢集CentOSRedis
- mongodb副本叢集和分片叢集佈署MongoDB
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- redis 叢集Redis
- redis叢集Redis
- Hadoop的叢集環境部署說明Hadoop
- Redis cluster 叢集Redis
- redis叢集搭建Redis
- redis系列:叢集Redis
- 搭建 Redis 叢集Redis
- Redis Cluster(叢集)Redis
- Redis 叢集方法Redis
- Redis叢集方案Redis
- Redis 叢集方案Redis
- Redis-叢集Redis
- redis叢集原理Redis
- redis偽叢集配置Cluster叢集模式Redis模式
- Redis叢集 - cluster叢集、資料分片Redis
- ProxySQL Cluster 高可用叢集環境部署記錄SQL
- Hadoop HA叢集 與 開發環境部署Hadoop開發環境
- Hadoop叢集完全分散式模式環境部署Hadoop分散式模式
- Mongodb副本集+分片叢集環境部署記錄MongoDB
- 認識Redis叢集——Redis ClusterRedis
- Redis(5.0) 叢集搭建Redis
- redis叢集的搭建Redis
- 搭建Redis原生叢集Redis
- docker-redis叢集DockerRedis
- Redis--叢集搭建Redis
- Docker搭建Redis叢集DockerRedis
- redis 叢集構建Redis
- redis叢集指導Redis
- 安裝 REDIS 叢集Redis
- redis叢集報錯Redis
- 搭建redis cluster叢集Redis
- Centos7下ELK+Redis日誌分析平臺的叢集環境部署記錄CentOSRedis
- Jedis操作單節點redis,叢集及redisTemplate操作redis叢集(一)Redis
- 基於Dokcer搭建Redis叢集(主從叢集)Redis