一、安裝單機版redis?
1、可以自己去官網下載,當然也可以用課程提供的壓縮包
# yum install gcc # wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz # tar -xzvf tcl8.6.1-src.tar.gz # cd /usr/local/tcl8.6.1/unix/ # ./configure # make && make install
2、使用redis-3.2.8.tar.gz(穩定版)
# tar -zxvf redis-3.2.8.tar.gz # cd /usr/local/redis-3.2.8 # make # make test # make install
3、redis的生產環境啟動方案
(1)redis utils目錄下,有個redis_init_script腳本
(2)將redis_init_script腳本拷貝到linux的/etc/init.d目錄中,將redis_init_script重命名為redis_6379,6379是我們希望這個redis實例監聽的端口號
(3)修改redis_6379腳本的第6行的REDISPORT,設置為相同的端口號(默認就是6379)
(4)創建兩個目錄:/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)
(5)修改redis配置文件(默認在根目錄下,redis.conf),拷貝到/etc/redis目錄中,修改名稱為6379.conf
(6)修改redis.conf中的部分配置為生產環境
daemonize yes #讓redis以daemon進程運行 pidfile /var/run/redis_6379.pid #設置redis的pid文件位置 port 6379 #設置redis的監聽端口號 dir /var/redis/6379 #設置持久化文件的存儲位置
(7)啟動redis,執行cd /etc/init.d, chmod 777 redis_6379,./redis_6379 start
(8)確認redis進程是否啟動,ps -ef | grep redis
(9)讓redis跟隨系統啟動自動啟動
在redis_6379.config腳本中,最上面,加入兩行注釋
# chkconfig:?? 2345 90 10
# description:? Redis is a persistent key-value database
chkconfig redis_6379 on
4、redis cli的使用
redis-cli SHUTDOWN #連接本機的6379端口停止redis進程 redis-cli -h 127.0.0.1 -p 6379 SHUTDOWN #制定要連接的ip和端口號 redis-cli PING #ping redis的端口,看是否正常 redis-cli #進入交互式命令行SET k1 v1 GET k1
二、Redis集群(讀寫分離+高可用+多master)
1、redis cluster的重要配置
?????? cluster-enabled <yes/no>
cluster-config-file <filename>:這是指定一個文件,供cluster模式下的redis實例將集群狀態保存在那里,包括集群中其他機器的信息,比如節點的上線和下限,故障轉移,不是我們去維護的,給它指定一個文件,讓redis自己去維護的
cluster-node-timeout <milliseconds>:節點存活超時時長,超過一定時長,認為節點宕機,master宕機的話就會觸發主備切換,slave宕機就不會提供服務
2、在三臺機器上啟動6個redis實例
(1)在eshop-cache03上部署目錄
/etc/redis(存放redis的配置文件);
/var/redis/6379(存放redis的持久化文件)
(2)編寫配置文件
redis cluster集群,要求至少3個master,去組成一個高可用,健壯的分布式的集群,每個master都建議至少給一個slave,3個master,3個slave,最少的要求
正式環境下,建議都是說在6臺機器上去搭建,至少3臺機器
保證,每個master都跟自己的slave不在同一臺機器上,如果是6臺自然更好,一個master+一個slave就死了
?3臺機器去搭建6個redis實例的redis cluster
# mkdir -p /etc/redis-cluster # mkdir -p /var/log/redis # mkdir -p /var/redis/7001
.conf配置文件:
port 7001 cluster-enabled yes cluster-config-file /etc/redis-cluster/node-7001.conf cluster-node-timeout 15000 daemonize yes pidfile /var/run/redis_7001.pid dir /var/redis/7001 logfile /var/log/redis/7001.log bind 192.168.31.187 appendonly yes
至少要用3個master節點啟動,每個master加一個slave節點,先選擇6個節點,啟動6個實例
將上面的配置文件,在/etc/redis下放6個,分別為: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf
(3)準備生產環境的啟動腳本
在/etc/init.d下,放6個啟動腳本,分別為: redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006
每個啟動腳本內,都修改對應的端口號
(4)分別在3臺機器上,啟動6個redis實例
將每個配置文件中的slaveof給刪除
3、創建集群
# yum install -y ruby # yum install -y rubygems
# gem install redis
3.1、在執行 gem install redis時候,出現
?? ?ERROR:? Error installing redis:
??????? redis requires Ruby version >= 2.2.2.
?這是由于linux本身默認的ruby版本過低
??
# sudo yum install curl# curl -L get.rvm.io | bash -s stable# source /usr/local/rvm/scripts/rvm# rvm list known# rvm install 2.5.1# rvm use 2.5.1# rvm use 2.5.1 --default
? 3.2、執行中出現:[curl: (35) SSL connect error
? 解決方法:升級網絡安全服務即可。
?
# yum update nss
# cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin
# redis-trib.rb create --replicas 1 192.168.51.118:7001 192.168.51.118:7002 192.168.51.119:7003 192.168.51.119:7004 192.168.51.120:7005 192.168.51.120:7006
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.51.119:7003
?出現這個error,是由于防火墻導致,此時,關閉防火墻的方法為:
3.3、永久性生效
開啟:chkconfig iptables on
關閉:chkconfig iptables off
3.4、 即時生效,重啟后失效
開啟:service iptables start
關閉:service iptables stop
--replicas: 每個master有幾個slave
6臺機器,3個master,3個slave,盡量自己讓master和slave不在一臺機器上
>>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.51.118:7001 192.168.51.119:7003 192.168.51.120:7005 Adding replica 192.168.51.119:7004 to 192.168.51.118:7001 Adding replica 192.168.51.118:7002 to 192.168.51.119:7003 Adding replica 192.168.51.120:7006 to 192.168.51.120:7005 M: c929af23011ce7e6888721845d1d300196c3046f 192.168.51.118:7001slots:0-5460 (5461 slots) master S: 60643541639fa838a23708027dfd8f05084fa0bb 192.168.51.118:7002replicates c330af95e5053ead51943d17b7ede77ff26e357c M: c330af95e5053ead51943d17b7ede77ff26e357c 192.168.51.119:7003slots:5461-10922 (5462 slots) master S: bde24d208a5c42771348bbedb2351f0b7ef9c06a 192.168.51.119:7004replicates c929af23011ce7e6888721845d1d300196c3046f M: 422632826b23edf928d213e980ea0680b1a15ac0 192.168.51.120:7005slots:10923-16383 (5461 slots) master S: 1e242b9cd55bd702dd386ed3d74916ad6fb78a10 192.168.51.120:7006replicates 422632826b23edf928d213e980ea0680b1a15ac0 Can I set the above configuration? (type 'yes' to accept): yes
?redis-trib.rb check 192.168.31.187:7001
4、讀寫分離+高可用+多master
讀寫分離:每個master都有一個slave
高可用:master宕機,slave自動被切換過去
多master:橫向擴容支持更大數據量