主從復制
- 主數據庫可以進行讀寫操作,當讀寫操作導致數據變化時會自動將數據同步給從數據庫
- 從數據庫一般都是只讀的,並且接收主數據庫同步過來的數據
- 一個master可以擁有多個slave,但是一個slave只能對應一個master
哨兵模式
- 監控主從數據庫是否正常運行
- master出現故障時,自動將slave轉化為master
- 多哨兵配置的時候,哨兵之間也會自動監控
- 多個哨兵可以監控同一個redis
集群模式
兩台虛擬機CentOS搭建3 master、3 salve 環境。
(1)下載並解壓
cd /root/software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
(2)編譯安裝
cd redis-3.2.4
make && make install
(3)將 redis-trib.rb 復制到 /usr/local/bin 目錄下
cd src
cp redis-trib.rb /usr/local/bin/
(3)創建 Redis 節點
mkdir redis_cluster
在 redis_cluster 目錄下,創建名為7000、7001、7002的目錄,並將 redis.conf 拷貝到這三個目錄中
mkdir 7000 7001 7002
cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002
分別修改這三個配置文件,修改如下內容
port 7000 //端口7000,7002,7003
bind 本機ip //默認ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的端口,無法創建集群
daemonize yes //redis后台運行
pidfile /var/run/redis_7000.pid //pidfile文件對應7000,7001,7002
cluster-enabled yes //開啟集群 把注釋#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次啟動自動生成 7000,7001,7002
cluster-node-timeout 15000 //請求超時 默認15秒,可自行設置
appendonly yes //aof日志開啟 有需要就開啟,它會每次寫操作都記錄一條日志
接着在另外一台機器上重復以上三步,只是把目錄改為7003、7004、7005,對應的配置文件也按照這個規則修改即可.
(4)啟動各個節點
第一台機器上執行
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
另外一台機器上執行
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf
(5)檢查 redis 啟動情況
ps -aux| grep redis
(6)需要安裝 ruby
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
(7)創建集群
Redis 官方提供了 redis-trib.rb 這個工具,就在解壓目錄的 src 目錄中,第三步中已將它復制到 /usr/local/bin 目錄中,可以直接在命令行中使用了。使用下面這個命令即可完成安裝。
redis-trib.rb create --replicas 1 192.168.31.245:7000 192.168.31.245:7001 192.168.31.245:7002 192.168.31.210:7003 192.168.31.210:7004 192.168.31.210:7005
(8)集群驗證
在第一台機器上連接集群的7002端口的節點,在另外一台連接7005節點,連接方式為 redis-cli -h 192.168.31.245 -c -p 7002 ,加參數 -C 可連接到集群,因為上面 redis.conf 將 bind 改為了ip地址,所以 -c 參數不可以省略。在7005節點執行命令 set hello world ,然后在另外一台7002端口,查看 key 為 hello 的內容, get hello 。