在Oracle的路上走了許多年,換換感受,嘗試一下新的知識,也是一個不錯的感受。Redis,一個超輕量化的內存數據庫,只作一小塊數據庫功能實現,卻很是優秀的一個產品。今天,就分享一下安裝Redis集羣的過程。
node
搭建redis集羣,建議至少須要準備3臺服務器,共搭建6個節點,3個master,3個slave,而且要求3個master節點不能所有跑到同一臺服務器上,保證節點安全,3臺服務器的配置相同,使用redistest帳號搭建,對應的端口是7000/7001/7002端口
個人集羣分配以下,每一個節點運行兩個端口。第一列作主庫,第二列作備庫
redis
192.8.8.136:7000 192.8.8.136:7001 192.8.8.137:7001 192.8.8.137:7002 192.8.8.138:7002 192.8.8.138:7000
一、使用已經編譯完成的安裝報安裝(就使用文檔末尾鏈接的安裝包便可),解壓並放到/home/redistest目錄下,修改對應的redis.conf文件,並複製出6份,每一個節點兩個redis目錄
[redistest]$ ll
total 13284
sql
drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7000 drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7001 drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7002 -rwxr-xr-x 1 redistest users 5708657 Aug 22 2016 redis-cli -rwxr-xr-x 1 redistest users 7817132 Aug 22 2016 redis-server -rwxr-xr-x 1 redistest users 60578 Aug 9 06:21 redis-trib.rb
二、此時有3個執行文件,redis-server/redis-cli/redis-trib.rb
三、建立7000文件夾,並將redis.conf拷貝到7000文件目錄下,注意修改對應的幾個關鍵配置項(主要就是改端口號)
數據庫
daemonize yes // redis後臺運行 pidfile /var/run/redis_7000.pid // pid文件,運行多個實例時,須要指定不一樣的pid文件 port 7000 // 監聽端口,運行多個實例時,須要指定不一樣的斷奶口 tcp-backlog 511 tcp-keepalive 0 loglevel notice // 日誌等級 logfile ./redis.log // 日誌文件位置 databases 16 // 可用數據庫數 appendonly yes // redis會把所接收到的每一次寫操做請求都追加到appendonly.aof文件中,當redis從新啓動時,會從該文件恢復出以前的狀態。 appendfilename "appendonly.aof" // AOF文件名稱 appendfsync everysec // 表示對寫操做進行累積,每秒同步一次 no-appendfsync-on-rewrite yes // AOF 自動重寫 auto-aof-rewrite-percentage 80-100 // 重寫百分比 auto-aof-rewrite-min-size 64mb //
注:完整配置,請參考軟件包中的redis.conf文件
四、拷貝7000文件夾,粘貼出新文件夾7001/7002,分別將7001/7002文件夾中的redis.conf文件中的7000替換成爲7001/7002。
五、切換到root用戶,使用yum安裝ruby,yum -y install ruby rubygems,並執行gem install redis,這樣便完成ruby安裝,可使用redis-trib.rb搭建集羣
注:redis-trib.rb是基於ruby開發的,因此必需要安裝ruby環境。安全
yum安裝很方便,可是有的風場是沒法鏈接外網的,也就沒法使用yum。軟件包中已經包含ruby rubygems的軟件包,直接安裝便可。ruby
ruby的下載路徑: https://rubygems.org/gems/redis
而後經過下面命令本地安裝ruby
服務器
yum -y localinstall ruby rubygems gem install redis
六、另外兩臺服務器作一樣的配置操做,開啓該機器的2個redis節點,當完成3臺機器的redis節點搭建後,能夠啓動redis,並使用ps查看redis運行狀況狀況
七、開啓redis服務
進入7000目錄,啓動redis
app
cd 7000 ../redis-server redis.conf cd .. cd 7001 ../redis-server redis.conf
[redistest@ip-172-18-98-136 redis]$ ps -ef|grep redis redistest 3864 1 0 13:02 ? 00:00:00 ../redis-server *:7000 [cluster] redistest 3869 1 0 13:02 ? 00:00:00 ../redis-server *:7001 [cluster] redistest 3888 3778 0 13:05 pts/3 00:00:00 grep redis
注意:因爲redis.conf文件使用的都是相對路徑,而且生成的一些文件,如aof文件是不能覆蓋重複的,所以標準的開啓redis-server的操做是,進入到7000/7001/7002等目錄中執行,../redis-server redis.conf,這樣各個實例生成的文件就在各自的目錄下,互不干擾;固然若是修改redis.conf的配置文件目錄,則能夠實如今不一樣的目錄下執行redis-server,這個能夠靈活掌握和運用
八、redis節點搭建起來後,須要完成redis cluster集羣搭建,搭建集羣過程當中,須要保證6個redis實例都是運行狀態。
Redis是根據IP和Port的順序,肯定master和slave的,因此要排好序,再執行。
輸出以下
負載均衡
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb create --replicas 1 192.8.8.136:7000 192.8.8.137:7001 192.8.8.138:7002 192.8.8.137:7002 192.8.8.136:7001 192.8.8.138:7000 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.8.8.138:7002 192.8.8.137:7001 192.8.8.136:7000 Adding replica 192.8.8.137:7002 to 192.8.8.138:7002 Adding replica 192.8.8.138:7000 to 192.8.8.137:7001 Adding replica 192.8.8.136:7001 to 192.8.8.136:7000 M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 replicates 6f9c383ec47461c2a86265f5db506e10397605d8 S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 replicates 6780f0fadd82825d04e524fd81fa710403e7152e S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 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.8.8.136:7000) M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master M: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 slots: (0 slots) master replicates 6f9c383ec47461c2a86265f5db506e10397605d8 M: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 slots: (0 slots) master replicates 6780f0fadd82825d04e524fd81fa710403e7152e M: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 slots: (0 slots) master replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
其中Master的節點是:192.8.8.136:7000/192.8.8.137:7001/192.8.8.138:7002分佈在不一樣的服務器上,該集羣的搭建的實現了負載均衡,至此redis集羣的搭建過程基本完畢;
九、檢查集羣狀態
tcp
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb check 192.8.8.136:7000 >>> Performing Cluster Check (using node 192.8.8.136:7000) M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 slots: (0 slots) slave replicates 6780f0fadd82825d04e524fd81fa710403e7152e S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 slots: (0 slots) slave replicates 6f9c383ec47461c2a86265f5db506e10397605d8 M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 slots: (0 slots) slave replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb info 192.8.8.136:7000 192.8.8.136:7000 (6780f0fa...) -> 0 keys | 5461 slots | 1 slaves. 192.8.8.138:7002 (6f9c383e...) -> 0 keys | 5461 slots | 1 slaves. 192.8.8.137:7001 (b00521fd...) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
10 、檢查集羣信息
./redis-trib.rb info 192.8.8.136:7000
十一、若是在執行./redis-trib.rb create --replicas 過程當中,長時間沒有完成,或者遇到其餘錯誤。若是須要從新執行配置集羣的話。
須要關閉redis實例,刪除7000/7001/7002目錄下,除了redis.conf文件以外的所有文件,再啓動redis實例,並再次執行./redis-trib.rb create便可。
十二、鏈接數據庫,查詢數據
[root@localhost src]# redis-cli -c -p 7000 127.0.0.1:7000> cluster meet 127.0.0.1 7000 OK
至此,redis集羣已經你們完成,下面咱們須要完成redis隨着操做系統啓動,減小後續維護的成本。
1三、編輯文件/home/redistest/startAll.sh,注意,要寫全路徑
/home/redistest/redis/redis-server /home/redistest/redis/7000/redis.conf /home/redistest/redis/redis-server /home/redistest/redis/7001/redis.conf
命令行,加入/etc/rc.local文件夾下,須要以redistest用戶啓動redis
su - redistest -c /home/redistest/startAll.sh
軟件包過大,沒法在blog中上傳,已經上傳到51cto下載中心,請到下載中心下載。