爲了節省資源,本實驗在一臺機器進行。即,在一臺機器上啓動兩個端口,模擬兩臺機器。node
機器準備: [root@adailinux ~]# cp /etc/redis.conf /etc/redis2.conf [root@adailinux ~]# vim /etc/redis2.conf port 6380 pidfile /var/run/redis_6380.pid logfile "/tmp/logs/redis2.log" dir /data/redis2 # slaveof <masterip> <masterport> slaveof 127.0.0.1 6379 ###指定主服務器IP和端口 # masterauth <master-password> ###若是主服務器設定了密碼,須要在從服務器上添加該參數 [root@adailinux ~]# mkdir /data/redis2 啓動Redis: [root@adailinux ~]# redis-server /etc/redis.conf [root@adailinux ~]# redis-server /etc/redis2.conf [root@adailinux ~]# ps aux |grep redis root 2454 0.2 0.4 145244 2356 ? Ssl 17:18 0:00 redis-server 127.0.0.1:6379 root 2459 0.3 0.4 145244 2332 ? Ssl 17:19 0:00 redis-server 127.0.0.1:6380 [root@adailinux ~]# netstat -lntp |grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2454/redis-server 1 tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 2459/redis-server 1 啓動成功!!!
至此,Redis主從搭建完畢!!!mysql
[root@adailinux ~]# redis-cli -p 6380 127.0.0.1:6380> keys * 1) "list1" 2) "hseta" 3) "set1" 4) "set3" 5) "key2" 6) "k1" 7) "set4" 8) "seta" 9) "k2" 10) "k3" 11) "zseta" 12) "setb" 13) "hash1" 14) "set5" 15) "list2" 16) "mykey"
在master上建立數據:
[root@adailinux ~]# redis-cli -p 6379 127.0.0.1:6379> del key (integer) 1 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> set test 00001 OK 在slave上查看: [root@adailinux ~]# redis-cli -p 6380 127.0.0.1:6380> select 1 127.0.0.1:6380[1]> keys * 1) "test" 127.0.0.1:6380[1]> get test "00001"
注意: Redis主從和mysql主從不同,Redis主從不用事先同步數據,它會自動同步。由於master上設置有參數「slave-read-only yes」,即該slave爲只讀數據庫!linux
Redis cluster是分佈式集羣,支持橫向擴展,Redis從V3.0版本後才支持集羣功能。Redis集羣的工做原理相似於磁盤的raid5。git
[root@adailinux ~]# vim /etc/redis_7000.conf port 7000 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7000.pid dir /data/redis_data/7000 cluster-enabled yes ##開啓cluster功能 cluster-config-file nodes_7000.conf ##該配置文件能夠在dir目錄下自動生成 cluster-node-timeout 10100 appendonly yes [root@adailinux ~]# vim /etc/redis_7002.conf port 7002 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7002.pid dir /data/redis_data/7002 cluster-enabled yes cluster-config-file nodes_7002.conf cluster-node-timeout 10100 appendonly yes [root@adailinux ~]# vim /etc/redis_7004.conf port 7004 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7004.pid dir /data/redis_data/7004 cluster-enabled yes cluster-config-file nodes_7004.conf cluster-node-timeout 10100 appendonly yes 建立各配置文件對應的數據庫目錄: [root@adailinux ~]# mkdir /data/redis_data [root@adailinux ~]# mkdir /data/redis_data/{7000,7002,7004} 依次啓動Redis服務7000,7002,7004: [root@adailinux ~]# redis-server /etc/redis_7000.conf 啓動完成後,結果以下: [root@adailinux ~]# ps aux |grep redis root 14423 0.6 0.5 145248 2640 ? Ssl 19:35 0:00 redis-server 192.168.8.131:7000 [cluster] root 14438 3.5 0.5 145248 2636 ? Ssl 19:37 0:00 redis-server 192.168.8.131:7002 [cluster] root 14443 13.8 0.5 145248 2636 ? Ssl 19:37 0:01 redis-server 192.168.8.131:7004 [cluster]
注: 此處bind應該對應本身服務器的IP。github
首先要先安裝好Redis,而後執行以下操做:redis
[root@adailinux ~]# vim /etc/redis_7001.conf port 7001 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7001.pid dir /data/redis_data/7001 cluster-enabled yes cluster-config-file nodes_7001.conf cluster-node-timeout 10100 appendonly yes [root@adailinux ~]# vim /etc/redis_7003.conf port 7003 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7003.pid dir /data/redis_data/7003 cluster-enabled yes cluster-config-file nodes_7003.conf cluster-node-timeout 10100 appendonly yes [root@adailinux ~]# vim /etc/redis_7005.conf port 7005 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7005.pid dir /data/redis_data/7005 cluster-enabled yes cluster-config-file nodes_7005.conf cluster-node-timeout 10100 appendonly yes 建立各配置文件對應的數據庫目錄: [root@adailinux ~]# mkdir /data/redis_data [root@adailinux ~]# mkdir /data/redis_data/{7001,7003,7005} 依次啓動Redis服務7001,7003,7005: [root@adailinux ~]# redis-server /etc/redis_7001.conf 啓動完成後結果以下: [root@adailinux ~]# ps aux |grep redis root 5971 0.2 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7001 [cluster] root 5976 0.1 0.5 145248 2636 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7003 [cluster] root 5981 0.1 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7005 [cluster]
Redis集羣須要ruby的支持,須要先安裝ruby(Ruby只需在一臺機器上運行)。Redis4.0須要使用Ruby2.2,安裝方法以下(由於本機自帶的是2.0版本的ruby,因此須要使用以下方法把源碼包包製做成yum安裝包,而後藉助yum工具安裝ruby2.2——升級ruby版本):sql
安裝yum開發工具組: [root@adailinux ~]# yum -y groupinstall "Development Tools" 升級庫文件: [root@adailinux ~]# yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-devel [root@adailinux ~]# cd /root/ 建立製做rpm包的目錄: [root@adailinux ~]# mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} 下載Ruby的源碼包: [root@adailinux ~]# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES 下載specs文件,用於製做rpm包: [root@adailinux ~]# wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS 製做rpm包: [root@adailinux ~]# rpmbuild -bb rpmbuild/SPECS/ruby22x.spec ##此處須要耐心等待… 安裝Ruby2.2: [root@adailinux ~]# yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm [root@adailinux ~]# ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
至此,ruby 2.2安裝完畢!
注: 除此方法以外,還能夠編譯安裝ruby。數據庫
安裝Redis配置集羣的工具: [root@adailinux ~]# gem install redis 將命令redis-trib.rb加入環境變量目錄下: [root@adailinux ~]# cp /usr/local/src/redis-4.0.2/src/redis-trib.rb /usr/bin/ [root@adailinux ~]# redis-trib.rb create --replicas 1 192.168.8.131:7000 192.168.8.131:7002 192.168.8.131:7004 192.168.8.132:7001 192.168.8.132:7003 192.168.8.132:7005 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. ##注意:redis-trib.rb create --replicas 1 此處的參數「1」
至此,Redis集羣配置完成!vim
由於Redis集羣是分佈式結構,因此能夠鏈接任何一個端口。centos
鏈接: [root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000 ##-c:=cluster,表示以集羣方式鏈接 建立數據: 192.168.8.131:7000> set cluster1 adaitest -> Redirected to slot [8483] located at 192.168.8.132:7001 OK ##該操做會被重定向到192.168.8.132:7001 192.168.8.132:7001> set cluster2 adai222 -> Redirected to slot [4416] located at 192.168.8.131:7000 OK 192.168.8.131:7000> set cluster3 adaitest333 OK 192.168.8.131:7000> set cluster4 adai2323 -> Redirected to slot [12678] located at 192.168.8.131:7002 OK 查看數據: 192.168.8.131:7002> get cluster1 -> Redirected to slot [8483] located at 192.168.8.132:7001 "adaitest" 192.168.8.132:7001> get cluster2 -> Redirected to slot [4416] located at 192.168.8.131:7000 "adai222" 192.168.8.131:7000> get cluster3 "adaitest333" 192.168.8.131:7000> get cluster4 -> Redirected to slot [12678] located at 192.168.8.131:7002 "adai2323"
查看集羣的狀態: [root@adailinux ~]# redis-trib.rb check 192.168.8.131:7000 列出節點: [root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000 192.168.8.131:7000> cluster nodes 查看集羣信息: 192.168.8.131:7000> cluster info 添加節點(執行該操做前先在slave建立redis_7007.conf並啓動): 192.168.8.131:7000> cluster meet 192.168.8.132 7007 OK 192.168.8.131:7000> cluster nodes 52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507035952000 0 connected ##此時7007以master身份存在 再添加一個節點: 192.168.8.131:7000> cluster meet 192.168.8.131 7006 OK 192.168.8.131:7000> cluster nodes 677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 master - 0 1507036137147 0 connected ##一樣是以master身份存在 ##即,使用以上方式添加的新節點都是以master身份存在!
將當前節點設置爲指定節點的從:
先更換到要設置的節點: [root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7006 設定爲7007的從: 192.168.8.131:7006> cluster replicate 52e4b3484838be21fcf53b84198e362efd54bd39 OK 查看: 192.168.8.131:7006> cluster nodes 52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507036429244 7 connected 677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 myself,slave 52e4b3484838be21fcf53b84198e362efd54bd39 0 1507036429000 0 connected #對比node號,即7006爲7007的從。。 移除某節點: 192.168.8.131:7006> cluster forget 52e4b3484838be21fcf53b84198e362efd54bd39 (error) ERR Can't forget my master! 192.168.8.131:7006> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93 (error) ERR I tried hard but I can't forget myself... ## 即,不能移除master節點和當前所在節點 [root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000 192.168.8.131:7000> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93 OK 查看: 192.168.8.131:7000> cluster nodes #此時7006已經不存在了。 保存當前配置: 192.168.8.131:7000> CLUSTER SAVECONFIG OK