Redis的集羣配置

若是咱們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)

解決辦法:

  • 1.查看Linux系統的主機名
  • [root@template conf]# hostname
    DSWX
    [root@template conf]# 
  • 2.查看/etc/hosts文件中是否有127.0.0.1對應主機名,若是沒有則添加 DSWX
  • 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 DSWX
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    再次啓動便可。

redis主從複製過程:

當配置好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.    熱備份 主從均可以設置密碼,也能夠密碼不一致

相關文章
相關標籤/搜索