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.    热备份 主从均可以设置密码,也能够密码不一致

相关文章
相关标签/搜索