搭建高可用的redis集群,避免standalone模式帶給你的苦難

  現在項目上用redis的話,很少說不用集群的情況,畢竟如果生產上只有一臺redis會有極大的風險,比如機器掛掉,或者內存爆掉,就比如我們生產環境

曾今也遭遇到這種情況,導致redis內存不夠掛掉的情況,當然這些都是我們及其不能容忍的,第一個必須要做到高可靠,其次才是高性能,好了,下面我來

逐一搭建一下。

?

一:Redis集群搭建

1. 下載

? ?首先去官網下載較新的3.2.0版本,下載方式還是非常簡單的,比如官網介紹的這樣。

$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz
$ tar xzf redis-3.2.0.tar.gz
$ cd redis-3.2.0
$ make

?

2. redis配置

 由于我們要做集群,而且還要redis自帶的redis-trib.rb 能正常運行,我們需要在集群中開啟三臺master,三臺slave,所以這里我需要建立6個文件

夾,而且文件夾的名稱就使用端口地址的名字,比如:6389. 6380....6384。

3. config配置。

? ?現在directory的分布情況大致如上圖,接下來要做的事情就是配置redis.conf了,在這里需要配置四個選項。。。

?

<1> port ?端口地址,比如6380文件夾下面的port就是6380,

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

?

<2> cluster-enabled 和 cluster-config-file

? ? ? ?這個顧名思義,首先需要開啟redis的cluster模式,然后配置一個cluster-config-file文件,這個文件用于存放redis的實時信息,redis會動態追加和修

改這個conf下面的內容信息,不過要記住,這個nodes-6379.conf 可以根據 端口文件夾依次配置,比如6380文件夾可以改成nodes-6380.conf這樣。。。

# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a
# cluster node enable the cluster support uncommenting the following:
#
cluster-enabled yes# Every cluster node has a cluster configuration file. This file is not
# intended to be edited by hand. It is created and updated by Redis nodes.
# Every Redis Cluster node requires a different cluster configuration file.
# Make sure that instances running in the same system do not have
# overlapping cluster configuration file names.
#
cluster-config-file nodes-6379.conf

?

<3> directory

? ? ? 為了方便管理,我這里配置的root目錄取決于在哪個文件夾,比如6380下面我的dir就是: dir ./6380/

# Note that you must specify a directory here, not a file name.
dir ./6379/

?

<4> protected-mode

? ? ? 這個是redis 3.2 才追加的一個功能,從功能注釋中,我們就可以發現,這個默認就是不讓外界可以訪問redis,所以這里我們就改為no,可以遠程訪問。

# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode no

?

ok,到現在為止,我們的config就修改完畢了,其他端口的文件夾也可以依次配置之~

?

二:開啟redis

? ? 到現在為止,各個端口文件夾都配置成功了,接下來準備開啟了,真的好么么噠~~~,窗口太多,有點萌萌的。

?

?

接下來我們可以看一下,在6379下面是不是有生成node-6379.conf文件,比如下面:

?

三:配置redis-trib.rb

? ?因為redis-trib.rb是ruby寫的,而我們的電腦肯定是沒有ruby和一些配置依賴項,不過沒關系,有強大的yum安裝,一切都不是問題。

?

1. 執行replicas命令

[jack@localhost ~]$ cluster/redis-trib.rb  create --replicas 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
/usr/bin/env: ruby: No such file or directory
[jack@localhost ~]$ 

? ?可以看到ruby是沒有安裝的,所以下一步我們要安裝ruby了。。。

?

2. 安裝ruby 【一定要是管理員權限哦】

[jack@localhost ~]$ sudo
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u username|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U username] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-ggroupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid][VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-ggroupname|#gid] [-p prompt] [-u user name|#uid] file ...
[jack@localhost ~]$ su
Password: 
jacsu: incorrect password
[jack@localhost ~]$ yum install ruby
Loaded plugins: fastestmirror, refresh-packagekit, security
You need to be root to perform this command.
[jack@localhost ~]$ jack
bash: jack: command not found
[jack@localhost ~]$ su
Password: 
[root@localhost jack]# yum install ruby
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile* base: mirror.bit.edu.cn* extras: mirror.bit.edu.cn* updates: mirror.bit.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ruby.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: ruby-libs = 1.8.7.374-4.el6_6 for package: ruby-1.8.7.374-4.el6_6.x86_64
--> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package ruby-libs.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: libreadline.so.5()(64bit) for package: ruby-libs-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package compat-readline5.x86_64 0:5.2-17.1.el6 will be installed
--> Finished Dependency ResolutionDependencies Resolved================================================================================Package                Arch         Version                   Repository  Size
================================================================================
Installing:ruby                   x86_64       1.8.7.374-4.el6_6         base       538 k
Installing for dependencies:compat-readline5       x86_64       5.2-17.1.el6              base       130 kruby-libs              x86_64       1.8.7.374-4.el6_6         base       1.7 MTransaction Summary
================================================================================
Install       3 Package(s)Total download size: 2.3 M
Installed size: 7.8 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): compat-readline5-5.2-17.1.el6.x86_64.rpm          | 130 kB     00:00     
(2/3): ruby-1.8.7.374-4.el6_6.x86_64.rpm                 | 538 kB     00:00     
(3/3): ruby-libs-1.8.7.374-4.el6_6.x86_64.rpm            | 1.7 MB     00:02     
--------------------------------------------------------------------------------
Total                                           747 kB/s | 2.3 MB     00:03     
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running TransactionInstalling : compat-readline5-5.2-17.1.el6.x86_64                         1/3 Installing : ruby-libs-1.8.7.374-4.el6_6.x86_64                           2/3 Installing : ruby-1.8.7.374-4.el6_6.x86_64                                3/3 Verifying  : compat-readline5-5.2-17.1.el6.x86_64                         1/3 Verifying  : ruby-libs-1.8.7.374-4.el6_6.x86_64                           2/3 Verifying  : ruby-1.8.7.374-4.el6_6.x86_64                                3/3 Installed:ruby.x86_64 0:1.8.7.374-4.el6_6                                               Dependency Installed:compat-readline5.x86_64 0:5.2-17.1.el6  ruby-libs.x86_64 0:1.8.7.374-4.el6_6 Complete!
[root@localhost jack]# 

?

3. 安裝rubygems

? ? ?接著我們再次運行 replicas命令,看看會怎么樣。。。?

[root@localhost jack]# cluster/redis-trib.rb  create --replicas 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
cluster/redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)from cluster/redis-trib.rb:24
[root@localhost jack]# 

? ? ?結果苦逼了,還是報錯,看提示貌似是少了一個rubygems,這次我們還是通過yum安裝。

[root@localhost jack]# yum install -y rubygems
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile* base: mirror.bit.edu.cn* extras: mirror.bit.edu.cn* updates: mirror.bit.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rubygems.noarch 0:1.3.7-5.el6 will be installed
--> Processing Dependency: ruby-rdoc for package: rubygems-1.3.7-5.el6.noarch
--> Running transaction check
---> Package ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: ruby-irb = 1.8.7.374-4.el6_6 for package: ruby-rdoc-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package ruby-irb.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Finished Dependency ResolutionDependencies Resolved================================================================================Package           Arch           Version                    Repository    Size
================================================================================
Installing:rubygems          noarch         1.3.7-5.el6                base         207 k
Installing for dependencies:ruby-irb          x86_64         1.8.7.374-4.el6_6          base         317 kruby-rdoc         x86_64         1.8.7.374-4.el6_6          base         381 kTransaction Summary
================================================================================
Install       3 Package(s)Total download size: 905 k
Installed size: 3.0 M
Downloading Packages:
(1/3): ruby-irb-1.8.7.374-4.el6_6.x86_64.rpm             | 317 kB     00:00     
(2/3): ruby-rdoc-1.8.7.374-4.el6_6.x86_64.rpm            | 381 kB     00:00     
(3/3): rubygems-1.3.7-5.el6.noarch.rpm                   | 207 kB     00:00     
--------------------------------------------------------------------------------
Total                                           625 kB/s | 905 kB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running TransactionInstalling : ruby-irb-1.8.7.374-4.el6_6.x86_64                            1/3 Installing : ruby-rdoc-1.8.7.374-4.el6_6.x86_64                           2/3 Installing : rubygems-1.3.7-5.el6.noarch                                  3/3 Verifying  : ruby-rdoc-1.8.7.374-4.el6_6.x86_64                           1/3 Verifying  : ruby-irb-1.8.7.374-4.el6_6.x86_64                            2/3 Verifying  : rubygems-1.3.7-5.el6.noarch                                  3/3 Installed:rubygems.noarch 0:1.3.7-5.el6                                                 Dependency Installed:ruby-irb.x86_64 0:1.8.7.374-4.el6_6    ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6   Complete!
[root@localhost jack]# 

?

4. 安裝redis驅動

?

? ?還是繼續不死心,我們繼續運行replicas命令命令。

[root@localhost jack]# cluster/redis-trib.rb  create --replicas 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from cluster/redis-trib.rb:25
[root@localhost jack]# 

?

臥槽,還是有問題,這次貌似是一個gem_original_require沒有安裝,當然這個一般是說ruby版本太老了,所以現在親要么升級ruby版本,要么直接安裝

ruby的redis驅動。

[root@localhost jack]# gem install redis
Successfully installed redis-3.3.0
1 gem installed
Installing ri documentation for redis-3.3.0...
Installing RDoc documentation for redis-3.3.0...

?

6. 運行replicas命令

? ?終于貌似所有的依賴我們都解決了,接下來就可以真的執行了,真是一把辛酸淚啊。。。操。。。

[root@localhost jack]# cluster/redis-trib.rb  create --replicas 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.161.133:6379
192.168.161.133:6380
192.168.161.133:6381
Adding replica 192.168.161.133:6382 to 192.168.161.133:6379
Adding replica 192.168.161.133:6383 to 192.168.161.133:6380
Adding replica 192.168.161.133:6384 to 192.168.161.133:6381
M: fdae457e803e2e04a7c549c69b44a2beefdae3bc 192.168.161.133:6379slots:0-5460 (5461 slots) master
M: 74285cee0fa65e64b443ecc630e447a8a65ee9f8 192.168.161.133:6380slots:5461-10922 (5462 slots) master
M: 14ed067a1b85044325d5800fa8479a6b4e41a10c 192.168.161.133:6381slots:10923-16383 (5461 slots) master
S: c50b1ff1fe3a00b16703f3b5705d2dafe046240b 192.168.161.133:6382replicates fdae457e803e2e04a7c549c69b44a2beefdae3bc
S: 8f7bd92f7ffb48e327820693a5820b5be7ea5556 192.168.161.133:6383replicates 74285cee0fa65e64b443ecc630e447a8a65ee9f8
S: 4a85ed078b4c99afad7f3a9a8df09082c681a649 192.168.161.133:6384replicates 14ed067a1b85044325d5800fa8479a6b4e41a10c
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 192.168.161.133:6379)
M: fdae457e803e2e04a7c549c69b44a2beefdae3bc 192.168.161.133:6379slots:0-5460 (5461 slots) master
M: 74285cee0fa65e64b443ecc630e447a8a65ee9f8 192.168.161.133:6380slots:5461-10922 (5462 slots) master
M: 14ed067a1b85044325d5800fa8479a6b4e41a10c 192.168.161.133:6381slots:10923-16383 (5461 slots) master
M: c50b1ff1fe3a00b16703f3b5705d2dafe046240b 192.168.161.133:6382slots: (0 slots) masterreplicates fdae457e803e2e04a7c549c69b44a2beefdae3bc
M: 8f7bd92f7ffb48e327820693a5820b5be7ea5556 192.168.161.133:6383slots: (0 slots) masterreplicates 74285cee0fa65e64b443ecc630e447a8a65ee9f8
M: 4a85ed078b4c99afad7f3a9a8df09082c681a649 192.168.161.133:6384slots: (0 slots) masterreplicates 14ed067a1b85044325d5800fa8479a6b4e41a10c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost jack]# 

從上面可以看到,trib程序告知我們是否用 6379,6380,6381 作為主, 6382,6383,6384作為從。。然后我就恩準了。。就這樣我們的集群

就創建好了,好了,這篇就講到這里,也不是特別復雜吧~~~

?

轉載于:https://www.cnblogs.com/huangxincheng/p/5615037.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457710.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457710.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python計算a的平方加b的平方_NumPy計算范數2的平方

老實說&#xff0c;沒有比np.inner或np.dot更快的了。如果你覺得中間變量很煩人&#xff0c;你可以創建一個lambda函數&#xff1a;sqeuclidean lambda x: np.inner(x, x)np.inner和np.dot利用BLAS例程&#xff0c;幾乎肯定比標準的元素乘法加和快。In [1]: %%timeit -n 1 -r …

php連接MySQL

先說一下我踩了三天的坑 我在這之前用mysql申請了一個數據庫&#xff0c;然后用php連接一直連接不上&#xff0c;試了許多辦法&#xff0c;都不行 下載MySQL時顯示3306端口被占用&#xff0c;所以選了3307 一直報錯&#xff0c;三天后&#xff0c;終于知道了&#xff0c;你用的…

SVG動畫

動畫原理 SVG動畫&#xff0c;就是元素的屬性值關于時間的變化。 如下圖來說&#xff0c;元素的某個屬性值的起始值&#xff08;from&#xff09;到結束值&#xff08;to&#xff09;在一個時間段&#xff08;duration&#xff09;根據時間函數&#xff08;timing-function&…

bootstrap彈出的模態框水平垂直居中的實現

學習javascript從入門到放棄&#xff01;&#xff0c;這是第一篇隨筆&#xff0c;經驗不足&#xff0c;如有不當之處&#xff0c;還望指出。好了廢話不多說直接切入正題吧 1.bootstrap默認的model寫法&#xff1a; //觸發模態框的button <button data-toggle"modal&quo…

python開發實踐教程_Python開發實踐教程

前言第一章 通過求三角形面積步入Python程序世界 案例1-1 求三角形面積 導讀 知識梳理與擴展 小結 練習一第二章 常用運算、使用自定義函數 案例2-1 用函數的方法計算三角形面積 導讀 案例2-2 開發一個求三角形面積的工具包 知識梳理與擴展 小結 練習二第三章 分支、循環和列表…

正則表達式 PHP

正則表達式的常用函數&#xff1a; 先寫一個函數show&#xff0c;用來輸出數組&#xff0c;使代碼看起來方便&#xff0c;且把經常重復用到的量放在前面 function show($varnull) {if(empty($var))//檢測變量是否為空{echo null;}elseif (is_array($var)||is_object($var))//…

iis發布網站怎么支持.json文件

轉載于:https://www.cnblogs.com/daizhipeng/p/5622839.html

PHP Cookie和Session

cookie cookle常用來識別用戶&#xff0c;可以理解為瀏覽器留下的一種文件&#xff0c;cookie可以分為會話cookie和硬盤cookie兩種&#xff0c;會話cookie生命周期短&#xff0c;瀏覽器關閉即銷毀&#xff0c;硬盤cookie生命周期由開發者設定&#xff0c;可長可短 1.創建cook…

瀏覽器渲染機制

1. 明白瀏覽器渲染的目的 可訪問性&#xff08;Accessability&#xff09;、加載性能和重構靈活性一直是前端工程師們關心的主題。 其中加載性能與瀏覽器的渲染機制深深掛鉤&#xff0c;弄明白瀏覽器背后的渲染機制&#xff0c;才能在日常的前端的開發中明白如何進行性能優化。…

java中List Set Map使用

Testpublic void run(){ArrayList<String> list new ArrayList<String>();list.add( "美女");list.add( "帥哥");list.add( "芙蓉姐姐" );for (int i 0; i < list.size(); i) {String strlist.get(i);System. out.println(str);…

python免費開源工具推薦_年薪200萬的程序員,推薦這10大Python免費開源工具!

原標題&#xff1a;年薪200萬的程序員&#xff0c;推薦這10大Python免費開源工具&#xff01;毫無疑問&#xff0c;Python是最流行的語言之一&#xff0c;其成功的原因之一是它為科學計算提供了廣泛的報道。 在這里&#xff0c;我們仔細研究用于機器學習和數據科學的十大Python…

通過Yeoman快速搭建AngularJS webapp應用的實踐

這里主要記錄關于使用yeoman快速構建angluarJS的前端應用的實踐&#xff1a; 安裝node、yeoman等過程略去 1、首頁我們可以在公共的腳手架中找到自己想要的腳手架&#xff0c;官方腳手架庫的地址 Yeoman generators: http://yeoman.io/generators/ 這里我們選擇官方團隊出的ang…

[Objective-C]編程藝術 筆記整理

看了《禪與 Objective-C 編程藝術》&#xff0c;發現不少平時不注意的或注意但沒有系統總結的東西&#xff0c;特此記錄一下。 這次沒有整理完&#xff0c;后續更新會結合手里的一些其他資料整理。 新博客wossoneri.com傳送門 完整的介紹看這兩個鏈接Google開源項目風格指南禪與…

python大數據工程師 培訓_大數據工程師學習之路

大數據的作用&#xff1a;發現過去事件的特征預測未來最優化選擇職位劃分&#xff1a;數據產品經理數據分析師->商業敏感性&#xff0c;產品經理的助手數據研發工程師數據挖掘工程師/數據科學家需要準備的技術知識&#xff1a;Linux操作系統與網絡編程&#xff1a;進程/線程…

python序列

python序列 列表 python變量不存放值&#xff0c;之存放值的引用&#xff0c;所以列表中元素可以是不同類型 1.常用方法 1.1 增加元素 append,在末尾插入元素 extend&#xff0c;將一個列表整體插入到尾部 insert&#xff0c;將某個元素插入到特定位 /*&#xff0c;拼合…

前端資源(11)

移動端API 地址99移動端知識集合 https://github.com/jtyjty99999/mobileTech移動端前端開發知識庫 https://github.com/AlloyTeam/Mars移動前端的一些坑和解決方法&#xff08;外觀表現&#xff09; http://caibaojian.com/mobile-web-bug.html【原】移動web資源整理 http://w…

win10使用Composer-Setup安裝Composer以及使用Composer安裝Yii2最新版

1&#xff1a;下載 ca-bundle.crt和cacert.pem(見導航欄——文件) 將這兩個文件放在php目錄下 2:php.ini中添加上述兩個文件的路徑 curl.cainfoC:/xampp/php/ca-bundle.crtopenssl.cafileC:/xampp/php/ca-bundle.crt 寫到最后一行就可以 3&#xff1a;下載Composer-Setup.exe h…

python離群點檢測方法分幾類_數據分析 第五篇:離群點檢測

離群點(outlier)是指和其他觀測點偏離非常大的數據點&#xff0c;離群點是異常的數據點&#xff0c;但是不一定是錯誤的數據點。確定離群點對于數據分析會帶來不利的影響&#xff0c;比如&#xff0c;增大錯誤方差、影響預測和影響正態性。從散點圖上可以直觀地看到離群點&…

計算機網絡TCP/IP

TCP/IP原理 看《圖解TCP/IP》時做的筆記&#xff0c;記錄一些感覺重要的東西…還沒完&#xff0c;正在學&#xff0c;慢慢寫 1.計算機網絡的發展 2.OSI參考模型 3.傳輸方式分類 4.地址及網絡的構成 5.TCP/IP協議的出現 6.TCP/IP分層模型及通信示例 7.數據鏈路層1 8.數…

hive求差集和交集

2019獨角獸企業重金招聘Python工程師標準>>> 用的要求總數和統計數&#xff1a; 總數的概念是利用安卓ID&#xff0c;就以為這把兩個月前的安卓ID統統的統計一遍&#xff0c;如果沒有出現&#xff0c;恰好在今天出現了&#xff0c;那么當前的這個用戶就是新增的…