若是咱們redis的壓力很大,若是咱們的併發高到咱們讀數據和寫數據都有了很大壓力。 那麼咱們可能就須要把redis分開部署,而且配置爲一個『主從』的狀態。 java
在服務器上構築Redis的集羣配置:c++
1.切換root用戶redis
su - centos
輸入密碼 ******
sudo su
輸入密碼 ******spring
2.安裝前提包數據庫
yum install gcc-c++
yum install -y ruby
yum install -y rubygemscentos
3.下載redis4.0.7緩存
wget http://download.redis.io/releases/redis-4.0.7.tar.gzruby
4.移動redis至/usr/local/服務器
mv redis-4.0.7.tar.gz /usr/local/併發
cd /usr/local/
5.解壓redis安裝包
tar zxf redis-4.0.7.tar.gz
6.映射redis快捷文件夾
ln -s /usr/local/redis-4.0.7 /usr/local/redis
cd /usr/local/redis
7.編譯
make
8.映射redis bin快捷文件夾
ln -s /usr/local/redis/src /usr/local/redis/bin
9.備份配置文件
mkdir /usr/local/redis/conf_bak
cp -rp /usr/local/redis/*.conf /usr/local/redis/conf_bak/
10.修改配置文件redis.conf
vi /usr/local/redis/redis.conf
修改配置以下:
protected-mode yes
##綁定的主機地址
##bind <本機ip>
bind 10.76.64.16
##Redis默認不是以守護進程的方式運行,能夠經過該配置項修改,使用yes啓用守護進程
daemonize yes
##設置當本機爲slav服務時,設置master服務的IP地址及端口,在Redis啓動時,它會自動從master進行數據同步
#slaveof <masterip> <masterport>
slaveof 10.76.64.16 6379 (爲主服務器的 ip端口號)
##當master服務設置了密碼保護時,slav服務鏈接master的密碼
#masterauth <master-password>
masterauth redis2ac
##設置Redis鏈接密碼,若是配置了鏈接密碼,客戶端在鏈接Redis時須要經過AUTH <password>命令提供密碼,默認關閉
#requirepass <master-password>
requirepass redis2ac
11.修改哨兵配置
vi /usr/local/redis/sentinel.conf
修改配置以下:
##bind <本機ip>
bind 10.76.64.16
##Redis默認不是以守護進程的方式運行,能夠經過該配置項修改,使用yes啓用守護進程
daemonize yes
##sentinel monitor mymaster <主機master ip> <主機master port> 1
sentinel monitor mymaster 10.76.64.16 6379 1(爲主服務器的 ip端口號)
##sentinel auth-pass mymaster <主機master redis密碼>
sentinel auth-pass mymaster redis2ac
12.redis服務啓動
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
13.reids哨兵進程啓動
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf
注意:配完以後,項目在Linux環境,啓動出現問題。
錯誤信息:
Error redis clients jedis HostAndPort cant resolve localhost address
07-Aug-2017 15:44:52.529 SEVERE [localhost-startStop-1] redis.clients.jedis.HostAndPort.getLocalHostQuietly cant resolve localhost address java.net.UnknownHostException: template: template: Name or service not known at java.net.InetAddress.getLocalHost(InetAddress.java:1473) at redis.clients.jedis.HostAndPort.getLocalHostQuietly(HostAndPort.java:105) at redis.clients.jedis.HostAndPort.<clinit>(HostAndPort.java:12) at redis.clients.jedis.JedisFactory.<init>(JedisFactory.java:37) at redis.clients.jedis.JedisPool.<init>(JedisPool.java:185) at redis.clients.jedis.JedisPool.<init>(JedisPool.java:162) at redis.clients.jedis.JedisPool.<init>(JedisPool.java:92) at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createRedisPool(JedisConnectionFactory.java:227)
解決辦法:
[root@template conf]# hostname
DSWX
[root@template conf]#
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 DSWX
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
再次啓動便可。
當配置好slave後,slave與master創建鏈接,而後發送sync命令。不管是第一次鏈接仍是從新鏈接,master都會啓動一個後臺進程,將 數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。後臺進程完成寫文件後,master就發送文件給slave,slave將 文件保存到硬盤上,再加載到內存中,接着master就會把緩存的命令轉發給slave,後續master將收到的寫命令發送給slave。
若是master同時收到多個slave發來的同步鏈接命令,master只會啓動一個進程來寫數據庫鏡像,而後發送給全部的slave。master同步數據時是非阻塞式的,能夠接收用戶的讀寫請求。然而在slave端是阻塞模式的,slave在同步master數據時,並不可以響應客戶端的查詢。
能夠在master禁用數據持久化,只須要註釋掉master 配置文件中的全部save配置,而後只在slave上配置數據持久化
擁有主從服務器的好處(從服務器是隻讀的,能夠一主多從)
1. 主服務器進行讀寫時,會轉移到從讀,減輕服務器壓力
2. 熱備份 主從均可以設置密碼,也能夠密碼不一致