1 案例1:搭建redis服务器
1.1 具体要求如下
- 在主机redis64运行redis服务
- 修改服务运行参数
- ip 地址192.168.88.64
- 服务监听的端口6364
- redis服务的连接密码为 tarenaplj
1.2 方案
准备1台新虚拟机,要求如表-1所示。
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:在主机redis64运行redis服务
命令操作如下所示:
[root@redis64 ~]# yum -y install redis 安装软件 [root@redis64 ~]# systemctl start redis 启动服务 [root@redis64 ~]# netstat -utnlp | grep redis-server 查看端口 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1970/redis-server 1 [root@redis64 ~]# redis-cli 连接服务 127.0.0.1:6379> ping 检查能否正在访问 PONG 127.0.0.1:6379> set school tarena 存储变量 OK 127.0.0.1:6379> get school 查看变量 "tarena" 127.0.0.1:6379> exit 断开连接 [root@redis64 ~]#
步骤二:修改服务运行参数
命令操作如下所示:
[root@redis64 ~]# systemctl stop redis [root@redis64 ~]# vim /etc/redis.conf 69 bind 192.168.88.64 92 port 6364 647 requirepass tarenaplj :wq [root@redis64 ~]# setenforce 0 [root@redis64 ~]# systemctl start redis [root@redis64 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.88.64:6364 0.0.0.0:* LISTEN 2009/redis-server 1 [root@redis64 ~]# [root@redis64 ~]# redis-cli -h 192.168.88.64 -p 6364 连接服务 192.168.88.64:6364> ping 不输入密码无法正常访问 (error) NOAUTH Authentication required. 192.168.88.64:6364> auth tarenaplj 输入密码 OK 192.168.88.64:6364> keys * 查看存储的变量 1) "school" 192.168.88.64:6364> exit 断开连接 [root@redis64 ~]#
2 案例2:常用命令限
2.1 问题
1)练习如下命令的使用
- mset mget keys type
- exists ttl expire move select
- del flushdb flushall
2.2 方案
在搭建的redis64练习常用命令的使用。
2.3 步骤
实现此案例需要按照如下步骤进行。
命令操作如下所示:
192.168.88.64:6364> mset name plj age 80 class nsd2108 一起存储多个变量 OK 192.168.88.64:6364> keys * 1) "age" 2) "classs" 3) "name" 4) "school" 192.168.88.64:6364> mget name age 一起查看多个变量 1) "plj" 2) "80" keys 使用统配符查看变量 * 匹配所有变量名 ? 一个字符 192.168.88.64:6364> keys * 1) "age" 2) "classs" 3) "name" 4) "school" 192.168.88.64:6364> keys ??? 变量名是3个字符 1) "age" 192.168.88.64:6364> keys a* 变量名是a 开头的 1) "age" 192.168.88.64:6364> 192.168.88.64:6364> keys gender 查看指定变量是否存在 (empty list or set) 说明变量没有定义 192.168.88.64:6364> keys name 1) "name" 192.168.88.64:6364> select 切换库 默认库编号 0-15 192.168.88.64:6364> select 1 切换到 1号库里 OK 192.168.88.64:6364[1]> keys * 查看数据没有数据 (empty list or set) 192.168.88.64:6364[1]> 192.168.88.64:6364[1]> select 0 OK 192.168.88.64:6364> select 16 (error) ERR DB index is out of range move 命令 移动变量到其他库里 192.168.88.64:6364> keys * 1) "age" 2) "classs" 3) "name" 4) "school" 192.168.88.64:6364> move age 1 把age 变量移动到1 号库里 (integer) 1 192.168.88.64:6364> keys * 1) "classs" 2) "name" 3) "school" 192.168.88.64:6364> select 1 OK 192.168.88.64:6364[1]> keys * 1) "age" exists 检查变量是否存储 返回值1 变量存储 返回值是0 变量不存在 192.168.88.64:6364[1]> select 0 OK 192.168.88.64:6364> EXISTS name 检查name变量是否存在 (integer) 1 192.168.88.64:6364> get name "plj" 192.168.88.64:6364> set name bob OK 192.168.88.64:6364> get name "bob" 192.168.88.64:6364> EXPIRE 命令设置变量的过期时间 不设置变量永不过期 ttl 检查变量可以在内存里存多久 192.168.88.64:6364> set sex girl OK 192.168.88.64:6364> ttl sex (integer) -1 表示永不过期 192.168.88.64:6364> EXPIRE sex 15 设置过期时间15 秒 (integer) 1 192.168.88.64:6364> keys sex 1) "sex" 192.168.88.64:6364> ttl sex (integer) 8 还剩下8秒时间过期 192.168.88.64:6364> ttl sex (integer) -2 表示已经过期被删除 192.168.88.64:6364> keys sex (empty list or set) 192.168.88.64:6364> type 命令检查变量存储数据的类型 使用set mset命令存储的数据都字符类型。 数据的类型不同 管理的命令也不同 明天讲数据类型。 192.168.88.64:6364> set x 99 OK 192.168.88.64:6364> mset y 108 OK 192.168.88.64:6364> type x string 192.168.88.64:6364> type y string 192.168.88.64:6364> lpush tea nb wk zzg plj lx 定义类别类型的变量tea 192.168.88.64:6364> type tea 查看变量类型 list 列表类型的数据 list del 删除内存里的变量 192.168.88.64:6364> keys * 1) "y" 2) "tea" 3) "name" 4) "school" 5) "x" 6) "classs" 192.168.88.64:6364> del tea y school (integer) 3 192.168.88.64:6364> keys * 1) "name" 2) "x" 3) "classs" 192.168.88.64:6364> flushdb 删除当前所在库的所有数据 192.168.88.64:6364> keys * 1) "name" 2) "x" 3) "classs" 192.168.88.64:6364> flushdb OK 192.168.88.64:6364> keys * (empty list or set) 192.168.88.64:6364> SELECT 1 OK 192.168.88.64:6364[1]> keys * 1) "age" 192.168.88.64:6364[1]> flushall 删除内存里的所有内存里所有数据 (慎用
3 案例3:部署LNP+Redis
3.1 问题
- 在主机192.168.88.64部署LNP 环境
- 配置PHP支持redis
- 编写网站脚本,把数据存储到本机的内存里
3.2 方案
在redis64主机同时运行nginx 服务,并配置nginx服务可以把数据存储在本机的redis内存服务里。
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:在主机192.168.88.64部署LNP 环境
1)安装源码nginx及php
]#yum -y install gcc pcre-devel zlib-devel make 安装依赖 ]#]# tar -xf nginx-1.22.1.tar.gz 解压源码 ]#cd nginx-1.22.1 进源码目录 ]#./configure 配置 ]#make 编译 ]#make install 安装 ]# ls /usr/local/nginx/ 查看安装目录 conf html logs sbin ]# yum -y install php php-fpm php-devel 安装php 软件
2)配置动静分离
]# vim +65 /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; } :wq
3)启动nginx服务
[root@redis64 ~]# /usr/local/nginx/sbin/nginx -t 测试配置 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@redis64 ~]# [root@redis64 ~]# /usr/local/nginx/sbin/nginx 启动服务 [root@redis64 ~]# netstat -utnlp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10469/nginx: master [root@redis64 ~]#
启动php-fpm服务
]# vim /etc/php-fpm.d/www.conf 38 ;listen = /run/php-fpm/www.sock 39 listen = 127.0.0.1:9000 非sock方式运行 (不是必须的) :wq [root@redis64 ~]# systemctl start php-fpm 启动服务 [root@redis64 ~]# netstat -utnlp | grep 9000 查看端口 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 10477/php-fpm: mast [root@redis64 ~]#
测试配置
[root@redis64 ~]# vim /usr/local/nginx/html/test.php 编写php脚本 [root@redis64 ~]# curl http://localhost/test.php 访问php脚本 hello world!!! [root@redis64 ~]#
步骤二:配置PHP支持redis
1)安装软件提供模块
--with-php-config=/usr/bin/php-config 获取php版本信息
[root@redis64 pub]# tar -xf redis-cluster-4.3.0.tgz 解压源码 [root@redis64 pub]# cd redis-4.3.0/ 进源码目录 [root@redis64 redis-4.3.0]# phpize 获取php版本信息 Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 [root@redis64 redis-4.3.0]# ./configure --with-php-config=/usr/bin/php-config 配置 [root@redis64 redis-4.3.0]# make && make install 编译并安装 Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/lib64/php/modules/ 提示模块安装的位置 [root@redis64 redis-4.3.0]# ls /usr/lib64/php/modules/redis.so 查看模块 /usr/lib64/php/modules/redis.so [root@redis64 redis-4.3.0]#
2)调用模块
[root@redis64 redis-4.3.0]# vim /etc/php.ini 编辑php进程主配置文件 737 extension_dir = "/usr/lib64/php/modules/" 指定模块所在目录 739 extension = "redis.so" 指定模块名 :wq
3)加载模块
[root@redis64 redis-4.3.0]# systemctl restart php-fpm
4)查看模块
[root@redis64 ~]# php -m | grep redis redis [root@redis64 ~]#
步骤三:编写网站脚本,把数据存储到本机的内存里
1)允许通过lo口连接本机redis服务
[root@redis64 ~]# systemctl stop redis [root@redis64 ~]# vim /etc/redis.conf 69 bind 127.0.0.1 192.168.88.64 :wq [root@redis64 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.88.64:6364 0.0.0.0:* LISTEN 12794/redis-server tcp 0 0 127.0.0.1:6364 0.0.0.0:* LISTEN 12794/redis-server [root@redis64 ~]#
2)编写php脚本
[root@redis64 ~]# vim /usr/local/nginx/html/redis.php connect("127.0.0.1", "6364"); $redis->auth("tarenaplj"); $redis->set("class","nsd"); echo "save ok\n"; ?>
3)访问脚本
[root@redis64 ~]# curl http://localhost/redis.php save ok [root@redis64 ~]#
4)连接redis服务查看变量
[root@redis64 ~]# redis-cli -h 127.0.0.1 -p 6364 127.0.0.1:6364> auth tarenaplj OK 127.0.0.1:6364> keys * 1) "school" 2) "class" 127.0.0.1:6364> get class "nsd" 127.0.0.1:6364>
4 案例4:创建redis集群
4.1 问题
- 准备集群环境
- 创建集群
- 查看集群信息
- 访问集群
4.2 方案
创建6台新虚拟机,具体要求如表-2所示。
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:准备集群环境
说明:准备做集群的主机,不允许存储数据、不允许设置连接密码
配置服务器192.168.88.51
]# yum -y install redis 安装软件 ]# vim /etc/redis.conf 修改主配置文件夹 92 port 6379 //端口号 69 bind 192.168.88.51 //IP地址 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.51:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.51:16379 0.0.0.0:* LISTEN 21201/redis-serve
配置服务器192.168.88.52
]# yum -y install redis ]# vim /etc/redis.conf 92 port 6379 69 bind 192.168.88.52 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.52:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.52:16379 0.0.0.0:* LISTEN 21201/redis-serve
配置服务器192.168.88.53
]# yum -y install redis ]# vim /etc/redis.conf 92 port 6379 69 bind 192.168.88.53 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.53:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.53:16379 0.0.0.0:* LISTEN 21201/redis-serve
配置服务器192.168.88.54
]# yum -y install redis ]# vim /etc/redis.conf 92 port 6379 69 bind 192.168.88.54 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.54:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.54:16379 0.0.0.0:* LISTEN 21201/redis-serve
配置服务器192.168.88.55
]# yum -y install redis ]# vim /etc/redis.conf 92 port 6379 69 bind 192.168.88.55 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.55:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.55:16379 0.0.0.0:* LISTEN 21201/redis-serve
配置服务器192.168.88.56
]# yum -y install redis ]# vim /etc/redis.conf 92 port 6379 69 bind 192.168.88.56 838 cluster-enabled yes //启用集群功能 846 cluster-config-file nodes-6379.conf //存储集群信息文件 852 cluster-node-timeout 5000 //集群中主机通信超时时间 :wq ]# systemctl start redis ]# netstat -utnlp | grep redis-serve tcp 0 0 192.168.88.56:6379 0.0.0.0:* LISTEN 21201/redis-serve tcp 0 0 192.168.88.56:16379 0.0.0.0:* LISTEN 21201/redis-serve
步骤二:创建集群
说明:
1、在任意一台redis服务器上都可以执行创建集群的命令。
2、--cluster-replicas 1 给每个master服务器分配一台slave服务器,每个主至少要分配1台slave服务器,不然无法实现redis服务的高可用。
3、创建集群时,会自动创建主从角色,默认把主机列表中的前3台服务器创建为
Master角色的redis服务器,剩下的均配置为slave角色服务器。
4、创建集群时,会自动给master角色的主机分配hash槽 ,通过hash槽实现数据的分布式存储。
]# redis-cli --cluster create 192.168.88.51:6379 192.168.88.52:6379 192.168.88.53:6379 192.168.88.54:6379 192.168.88.55:6379 192.168.88.56:6379 --cluster-replicas 1 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.88.51:6379 192.168.88.52:6379 192.168.88.53:6379 Adding replica 192.168.88.55:6379 to 192.168.88.51:6379 Adding replica 192.168.88.56:6379 to 192.168.88.52:6379 Adding replica 192.168.88.54:6379 to 192.168.88.53:6379 M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.88.51:6379 slots:0-5460 (5461 slots) master M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.88.52:6379 slots:5461-10922 (5462 slots) master M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.88.53:6379 slots:10923-16383 (5461 slots) master S: bdba77868965371680fa825badff59bf8ef95a81 192.168.88.54:6379 replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581 S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.88.55:6379 replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.88.56:6379 replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 Can I set the above configuration? (type 'yes' to accept): yes 同意 .... .... [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. //创建成功的提示
步骤三:查看集群信息
第一列:主服务器ip地址
第二列:主服务器ID
第三列:存储变量个数
第四列:hash槽个数 (hash槽的作用在集群存储工程过程里讲)
第五列:从服务器数量
]# redis-cli --cluster info 192.168.88.51:6379 192.168.88.53:6379 (f2c1bdb7...) -> 0 keys | 5461 slots | 1 slaves. 192.168.88.51:6379 (0eb3b7aa...) -> 0 keys | 5461 slots | 1 slaves. 192.168.88.52:6379 (a9cb8ccd...) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
步骤四:访问集群
[root@host51 ~]# redis-cli -c -h 192.168.88.51 -p 6379 192.168.88.51:6379> set school tarena -> Redirected to slot [8455] located at 192.168.88.52:6379 OK 192.168.88.52:6379> set teacher plj -> Redirected to slot [12541] located at 192.168.88.53:6379 OK 192.168.88.53:6379> set class NSD -> Redirected to slot [741] located at 192.168.88.51:6379 OK 192.168.88.51:6379>
会发现3个变量被分别存储到集群中的3台master服务器上,实现了数据的分布式存储。当连接集群中的任意一台redis服务器存储数据时,会调用集群CRC16算法 得出此次
存储变量使用的hash 槽,然后连接hash 槽 所在的master服务器存储变量。
在创建集群时会把默认的16384个槽平均的分配给集群中的3个master服务器。可以通过查看集群信息查看每个master服务器占用hash槽的个数。
]# redis-cli --cluster info 192.168.88.51:6379 192.168.88.53:6379 (f2c1bdb7...) -> 0 keys | 5461 slots | 1 slaves. 192.168.88.51:6379 (0eb3b7aa...) -> 0 keys | 5461 slots | 1 slaves. 192.168.88.52:6379 (a9cb8ccd...) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
集群中slave角色的主机会自动同步master角色主机的数据,实现数据的自动备份,
分别连接集群中的3台slave服务器查看变量
[root@host54 ~]# redis-cli -c -h 192.168.88.54 -p 6379 192.168.88.54:6379> keys * 1) "class" [root@host55 ~]# redis-cli -c -h 192.168.88.55 -p 6379 192.168.88.55:6379> keys * 1) "school" [root@host56 ~]# redis-cli -c -h 192.168.88.56 -p 6379 192.168.88.56:6379> keys * 1) "teacher"
当master角色的服务器宕机时,对应的slave服务器会升级为master 并接手对应的hash槽,实现redis服务的高可用,例如停止host53主机的redis服务,对应的从会升级为master 。(当宕机的master恢复后 自动做当前主的从服务器)
停止redis服务 [root@host53 ~]# systemctl stop reddis 查看集群信息 [root@host51 ~]#]# redis-cli --cluster info 192.168.88.51:6379 192.168.88.54:6379 (f2c1bdb7...) -> 1 keys | 5461 slots | 0 slaves. 192.168.88.51:6379 (0eb3b7aa...) -> 1 keys | 5461 slots | 1 slaves. 192.168.88.52:6379 (a9cb8ccd...) -> 1 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. keys per slot on average. 启动redis服务 [root@host53 ~]# systemctl start reddis 查看集群信息 [root@host51 ~]#]# redis-cli --cluster info 192.168.88.51:6379 192.168.88.54:6379 (f2c1bdb7...) -> 1 keys | 5461 slots | 1 slaves. 192.168.88.51:6379 (0eb3b7aa...) -> 1 keys | 5461 slots | 1 slaves. 192.168.88.52:6379 (a9cb8ccd...) -> 1 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. keys per slot on average. 存储数据脚本 [root@redis64 ~]# vim /usr/local/nginx/html/set.php set("i","tarenaA "); $client->set("j","tarenaB "); $client->set("k","tarenaC "); echo "save ok\n"; ?> :wq 查看数据脚本 [root@ redis64 ~]# vim /usr/local/nginx/html/get_data.php get("i"); //获取变量i 的数据 echo $client->get("j"); //获取变量j 的数据 echo $client->get("k"); //获取变量k 的数据 ?> :wq
3)访问脚本
]# curl http://192.168.88.64/set_data.php save ok ]# curl http://192.168.88.64/get_data.php tarenaA tarenaB tarenaC
4)命令行连接redis集群主机查看数据
[root@host51 ~]# redis-cli -c -h 192.168.88.51 -p 6379 192.168.88.51:6379> keys * 1) "j" [root@host52 ~]# redis-cli -c -h 192.168.88.52 -p 6379 192.168.88.52:6379> keys * 1) "k" [root@host53 ~]# redis-cli -c -h 192.168.88.53 -p 6379 192.168.88.53:6379> keys * 1) "i"
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章