2015-05-12 10:32:35 z2012c 阅读数 139
  • Redis高级运用视频教程

    本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。

    145 人正在学习 去看看 常银鹏

 redis 主从复制配置和使用都非常简单。通过主从复制可以允许多个 slave server 拥有和

master server 相同的数据库副本。 

 

redis主从复制有以下特点:

(1)master :slave = 1:n (即:一个master可以拥有多个slave)

(2)slave除了能连接到master以外,还可以连接到其他slave

(3)主从复制不会阻塞master操作,主从复制在进行时,master仍然可以继续处理它的client请求

 

一、在Linux端的主从复制。

 

首先,在redis的安装目录下(redis.conf所在目录),复制一个redis.conf命名为redis_slave.conf:

 

cp redis.conf redis_slave.conf

 

修改redis_slave.conf文件,修改如下:

# slaveof <masterip> <masterport> 
slaveof 127.0.0.1 6379 

 

 并指定端口:

 

port 6378

 

启动master端:



 

开启一个master客户端并查看信息:

src/redis-cli -p 6379

 

 可以看出,此客户端请求的服务端的信息,角色为master(主),连接的slave为1个。

 

同理,开启slave端



 

启动slave端的客户端:

src/redis-cli -p 6378 
127.0.0.1 : 6378>info

 

 

可以看出,角色为slave,以及它连接到的master的信息。

 

测试:在master端(cli端)指定一个key,在slave端(该cli端)get该key,可以看到刚才set的东西,说明redis的master-slave配置成功!(set get过程略)。

 

二、Jedis(redis Java版)配置(涉及jar包:jedis-2.x)

 

以下ShardedJedisPool为切片池:

 // 池基本配置 
        JedisPoolConfig config = new JedisPoolConfig(); 
        config.setMaxIdle(15); 
        config.setMaxWaitMillis(1000l); 
        config.setTestOnBorrow(false); 
        // slave链接 
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); 
        shards.add(new JedisShardInfo("127.0.0.1", 6379, "master")); 
        shards.add(new JedisShardInfo(String ip1, 6379, "slave"));
        shards.add(new JedisShardInfo(String ip2, 6379, "slave"));

        // 构造池 
//       pool = new JedisPool(config,"127.0.0.1",6379, 10000); //容忍的超时时间
        ShardedJedisPool pool = new ShardedJedisPool(config, shards);

 在本机(127.0.0.1)和另外几个和你“集群”的机子上分别启动redis服务端(需先保证不会出现socket连接错误),这样在任一机子上set一个key之后,另外的机器上可以get到该key对应的value。

2017-09-10 13:45:02 qq_19260029 阅读数 744
  • Redis高级运用视频教程

    本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。

    145 人正在学习 去看看 常银鹏

前言:Redis支持丰富的数据结构以及高速的读写,分布式锁机制等优点,逐渐成为当前开发项目中的标配技术。

解决场景:大多数项目在线上环境都是Linux系统,而开发环境则是Window系统,有时候本地开发环境需要读取线上Redis数据库数据进行调试时,可能是把dump.rdb数据文件Dowload到本地,然后Redis读取数据信息再作数据调试,此做法麻烦且不易于实时调试。接下来,利用Redis提供的主从配置模式实现Window环境Redis数据库同步线上Linux环境Redis数据,走起…

准备

线上Linux模拟环境:虚拟机Centos 6.8+Redis 3.2
开发环境Window环境:Window10 + Redis 3.2

需要开放Linux环境Redis的远程连接,详细配置请参考我另一篇文章
RedisDesktopManager连接远程Linux系统的Redis服务(图文)

走起
为了安全起见,咱们对Linux环境Redis数据库设置访问密码;编辑redis.conf配置文件,修改requirepass配置(行号482左右)

requirepass 密码

重启Redis服务

[root@Karle src]# redis-cli shutdown
[root@Karle src]# redis-server ../redis.conf

此时使用redis-cli无密访问Redis服务,会提示密码校验失败

(error) NOAUTH Authentication required

正确的开发方式(redis-cli -a 密码);好了,Linux环境Redis配置完毕

Window环境开发环境配置
Redis官网不提供Window版本的Redis,需要到微软的github下载Window版本的Redis数据库。
github地址:https://github.com/MicrosoftArchive/redis/releases

下载之后解压,点击redis-server.exe方可运行Window版本的Redis
Window Redis

使用RedisDesktopManager客户端输入name,host,port即可链接到Window Redis
Linked
当前Linux环境跟Window环境已经准备就绪,但两个Redis都是独立的,并没有进行主从数据同步操作。

编辑Window Redis配置文件(redis.windows.conf),找到slaveof(行号257)配置,此处配置主Redis的IP地址以及端口;为了提高Redis的安全性,咱们Linux环境的Redis设置了访问密码,所以要配置masterauth(主Redis访问密码,行号264)

slaveof 主RedisIP 端口
masterauth 主Redis访问密码

配置好主Redis链接之后,打开Window命令窗口,执行(redis-server.exe redis.windows.conf)命令,读取配置文件重启Redis服务;此时命令窗口提示链接主Redis成功,并同步数据
final

建议把redis-server.exe redis.windows.conf写到一个bat批处理文件,每次启动则读取最新的Redis配置文件
bat

主从配置之后,从数据库会主动依赖主Redis数据库数据

end

推荐文章
Java基于Redis实现“附近的人”
MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件
RedisDesktopManager连接远程Linux系统的Redis服务(图文)

2019-10-08 15:10:55 sslj81 阅读数 17
  • Redis高级运用视频教程

    本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。

    145 人正在学习 去看看 常银鹏

安装redis需要gcc环境,如果没有安装gcc环境的朋友可以参考我之前写的文章:Linux gcc 离线安装

环境描述:
redis版本:Redis 5.0.5

主redis:192.168.115.35 6379

从redis:192.168.115.37 6380

系统信息:Red Hat Enterprise Linux Server release 7.0 (Maipo)
                  Linux version 3.10.0-123.el7.x86_64 (mockbuild@x86-017.build.eng.bos.redhat.com)

1、安装Redis

先从redis官网下载最新版本:https://redis.io/   

第一步解压: tar zxvf redis-5.0.5.tar.gz(我的解压目录:/usr/local/redis-5.0.5)

第二步编译:make(要在解压的那个目录下执行)。编译完成后在/usr/local/redis-5.0.5/src里才会有redis-server文件

至此redis安装完成,主从服务器redis的安装步骤都是一样,下面我们进行简单验证:

主redis:

[root@localhost redis-5.0.5]# src/redis-server redis.conf
[root@localhost redis-5.0.5]# redis-cli -p 6379
192.168.115.35:6379> set nm 1122
OK
192.168.115.35:6379> get nm
"1122"

***经验小结************************************************************************************

⑴默认安装完成后,我们启动redis服务时要规范地加载redis.conf配置文件,虽然不加也可以运行。

⑵加载默认的redis.conf配置文件时,实际上只能本地redis-cli连接,因为在配置文件里是bind 127.0.0.1,如果需要其它主机也能进行redis-cli连接,则需要更改成:bind 0.0.0.0

⑶注意别忘记打开防火墙端口,Linux7和7以下的版本打开防火墙命令是不一样的,文章末有提供参考资料

*************************************************************************************************

2、主从配置

第一步:将主从redis配置文件redis.conf中的aemonize no 改为 yes

第二步:修改从redis.conf配置文件中的port 6379 为6380,添加slaveof 192.168.115.35 6379(也可以使用命令,后面会提到)

第三步:启动主从redis服务(先主后从):[root@localhost redis-5.0.5]# src/redis-server redis.conf

第四步:测试同步

主redis:

[root@localhost redis-5.0.5]# src/redis-cli -p 6379
127:0.0.1:6379> set nm 123
OK
127:0.0.1:6379> get nm
 "123"

从redis:

[root@localhost redis-5.0.5]# src/redis-cli -p 6380
127:0.0.1:6380> get nm
"123"

3、读写分离

我们在从redis服务上进行写操作是不允许的

从redis:

[root@localhost redis-5.0.5]# src/redis-cli -p 6380
127:0.0.1:6380> set nm  aabbcc
(error) READONLY You can't write against a read only replica.


3、主从切换

第一步:修改从redis配置:[root@localhost redis-5.0.5]# src/redis-cli -p 6380 slaveof no one

第二步:修改主redis配置:[root@localhost redis-5.0.5]# src/redis-cli -p 6379 slaveof 192.168.115.37 6380

配置修改完成后,主从服务会自动切换完成

测试对主redis写入操作:

[root@localhost redis-5.0.5]# src/redis-cli -p 6379
127:0.0.1:6380> set nm  12345
(error) READONLY You can't write against a read only replica.

切换主从服务的时候,建议停止对外redis的服务,这样能保证主从数据一致,也能保证切换后不会丢失数据

 

最后

⑴redis的主从模式是读写分离的,读数据找从redis,写数据找主redis,这样在高并发情况下我们也能高效地读写操作。

⑵redis的备份模式,有两种:

一种是RDB模式(Redis DataBase),某一时刻将数据持久化到磁盘中,对大规模的数据恢复十分高效,如果对数据安全性要求不高可使用RDB模式。

一种是AOF模式(Append Only File),是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍。默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中)。我们通过配置redis.conf中的appendonly yes就可以打开AOF功能,默认是RDB模式。如果对数据安全性要求很高可以使用AOF模式。


参考资料:

https://blog.csdn.net/zfl092005/article/details/17523945

https://www.cnblogs.com/eaglezb/p/6073739.html

2019-06-11 19:37:55 zmhmrjd 阅读数 472
  • Redis高级运用视频教程

    本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。

    145 人正在学习 去看看 常银鹏

1、拉取redis镜像

docker pull redis

2、启动3个redis容器服务,分别使用到6379、6380、6381端口

docker run --name redis-master -p 6379:6379 -d redis
docker run --name redis-slave1 -p 6380:6379 -d redis
docker run --name redis-slave2 -p 6381:6379 -d redis

3、查看已启动的容器

[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
fb349796fee6        redis               "docker-entrypoint..."   2 hours ago         Up 21 minutes       0.0.0.0:6381->6379/tcp   redis-slave2
6091eaf2475c        redis               "docker-entrypoint..."   2 hours ago         Up 22 minutes       0.0.0.0:6380->6379/tcp   redis-slave1
bc84f8185f77        redis               "docker-entrypoint..."   2 hours ago         Up 24 minutes       0.0.0.0:6379->6379/tcp   redis-master

4、测试容器,成功

docker exec -it ab54741166e1(容器id) redis-cli:进入容器内部

127.0.0.1:6379> set a test
OK
127.0.0.1:6379> get a
"test"
127.0.0.1:6379> quit
root@6091eaf2475c:/data#

5、开始redis集群配置

5.1、看容器内网的ip地址

[root@localhost ~]# docker inspect redis-slave1

在这里插入图片描述

这里我们得到3个redis的内网ip地址为:
redis-master:172.17.0.2:6379
redis-slave1:172.17.0.3:6379
redis-slave2:172.17.0.4:6379

5.2、这里我们进入docker容器内部,查看当前redis角色(主还是从)目前三个都是master状态

[root@localhost ~]# docker exec -it 6091eaf2475c /bin/bash
root@6091eaf2475c:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.4
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:532406
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:16f555d7ac3b32ae0584d6b5f320efec3e35b9e6
master_replid2:d8af8d9da6752ca2f0c7a733f5462a0c163c8f7c
master_repl_offset:532406
second_repl_offset:73526
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:532378

5.3、使用redis-cli命令修改redis-slave1、redis-slave2的主机为172.17.0.2:6379

[root@localhost /]# docker exec -it redis-slave1 /bin/bash 
root@6091eaf2475c:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:6379> quit
root@6091eaf2475c:/data# exit
exit
[root@localhost /]# docker exec -it redis-slave2 /bin/bash
root@6091eaf2475c:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:6379> quit
root@6091eaf2475c:/data# exit
exit

5.4、查看redis-master是否已经拥有2个从机,connected_slaves:2,没错

[root@localhost /]# docker exec -it redis-master /bin/bash
root@bc84f8185f77:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=70,lag=1
slave1:ip=172.17.0.3,port=6379,state=online,offset=70,lag=1
master_replid:d8af8d9da6752ca2f0c7a733f5462a0c163c8f7c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70

5.5、配置Sentinel哨兵

进入3台redis容器内部进行配置,在容器根目录里面创建sentinel.conf文件

文件内容为:sentinel monitor redis-master 172.17.0.2 6379 1

[root@localhost /]# docker exec -it bc84f8185f77 /bin/bash
root@6091eaf2475c:/data# cd / && touch sentinel.conf
root@6091eaf2475c:/# vim /sentinel.conf
这里如果出现 shell bash: vi: command not found
解决:1、apt-get update 2、apt-get install vim
最后依次启动Redis哨兵:
root@bc84f8185f77:/# redis-sentinel /sentinel.conf
42:X 11 Jun 2019 09:17:41.415 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
42:X 11 Jun 2019 09:17:41.415 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=42, just started
42:X 11 Jun 2019 09:17:41.415 # Configuration loaded
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 42
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

42:X 11 Jun 2019 09:17:41.417 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
42:X 11 Jun 2019 09:17:41.418 # Sentinel ID is 4d8e0038c5a041074bc86b4dcad46f6798cb0fab
42:X 11 Jun 2019 09:17:41.418 # +monitor master redis-master 172.17.0.2 6379 quorum 1
42:X 11 Jun 2019 09:17:41.422 * +slave slave 172.17.0.4:6379 172.17.0.4 6379 @ redis-master 172.17.0.2 6379
42:X 11 Jun 2019 09:17:41.423 * +slave slave 172.17.0.3:6379 172.17.0.3 6379 @ redis-master 172.17.0.2 6379
便于观察,这里开多个窗口。

在这里插入图片描述

5.6、测试

关闭redis-master

[root@localhost ~]# docker stop bc84f8185f77
bc84f8185f77
这时,剩余的2个从机,会自动选举产生新的主机,这里选举172.17.0.2为主机。

在这里插入图片描述

查看redis-slave2,变成了主机。
[root@localhost ~]# docker exec -it fb349796fee6 /bin/bash
root@fb349796fee6:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=81124,lag=0
master_replid:16f555d7ac3b32ae0584d6b5f320efec3e35b9e6
master_replid2:d8af8d9da6752ca2f0c7a733f5462a0c163c8f7c
master_repl_offset:81124
second_repl_offset:73526
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:81124
具体理论请参考

https://www.cnblogs.com/leeSmall/p/8398401.html

2019-04-16 22:57:25 qq_38323690 阅读数 9
  • Redis高级运用视频教程

    本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。

    145 人正在学习 去看看 常银鹏

1.主从配置

  • 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
  • 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
  • 说明:ip可以换为自己机器与同桌机器的地址
  • 设置主服务器的配置
bind 192.168.1.10
  • 设置从服务器的配置
  • 注意:在slaveof后面写主机ip,再写端口,而且端口必须写
bind 192.168.1.11
slaveof 192.168.1.10 6379
  • 在master和slave分别执行info命令,查看输出信息
  • 在master上写数据
set hello world
  • 在slave上读数据
get hello

2.redis 主从配置

Redis Master/Slave 主从配置

这里我们配置 1台Master +1台Slave 为例子,其中:

   Master IP:192.168.32.166    Port:6379

    Slave IP:192.168.32.188     Port:6379

注意,两台机器的IP地址要在同一网段内,否则无法实现集群。两台机器上均按照以上步骤安装并配置好redis服务。在Slave机器上修改配置文件,使其成为Master的从机。命令及配置如下:

    #vi /usr/local/webserver/redis/conf/redis.conf

    slaveof  192.168.32.166  6379

启动redis服务

先开启主机上的服务,后开机从机上的服务。

验证M/S服务是否生效

主机上:

   /usr/local/webserver/redis/redis-cli

    >set key1 val1

    >quit

从机上:

  /usr/local/webserver/redis/redis-cli

    >get key1

    "val1" (表示数据成功同步了)

linux安装配置redis

阅读数 24

没有更多推荐了,返回首页