欢迎光临散文网 会员登陆 & 注册

redis安装 集群 教程

2023-02-21 16:11 作者:bili_39183997178  | 我要投稿

数据库服务软件分为2类:

                 关系型数据库服务软件 简称 RDBMS

                     存储数据的特点?

                     服务软件?MySQL

                 非关系型数据库服务软件 简称 NoSQL

                     存储数据的特点?

                     服务软件  

redis 软件介绍

Remote Dictionary  Server(远程字典服务器)

是一款高性能的(Key/Values

支持数据持久化(定期把内存里数据存储到硬盘)

支持多种数据类型:字符、列表、散列、集合

支持 master-salve 模式数据备份

中文网站www.redis.cn

安装软件

[root@host51 ~]# which  gcc || yum -y install gcc   安装编译工具gcc

[root@host51 ~]#tar -xf redis-4.0.8.tar.gz 解压源码

[root@host51 ~]#cd redis-4.0.8/ 进入源码目录

[root@host51 ~]#make  编译

[root@host51 ~]#make install 安装

#初始配置

[root@host51 ~]#./utils/install_server.sh 初始化配置

Welcome to the redis service installer

This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]  端口号

Selecting default: 6379

Please select the redis config file name [/etc/redis/6379.conf]  主配置文件

Selected default - /etc/redis/6379.conf

Please select the redis log file name [/var/log/redis_6379.log] 服务日志文件

Selected default - /var/log/redis_6379.log

Please select the data directory for this instance [/var/lib/redis/6379] 数据库目录

Selected default - /var/lib/redis/6379

Please select the redis executable path [/usr/local/bin/redis-server] 服务启动命令

Selected config:

Port           : 6379

Config file    : /etc/redis/6379.conf

Log file       : /var/log/redis_6379.log

Data dir       : /var/lib/redis/6379

Executable     : /usr/local/bin/redis-server

Cli Executable : /usr/local/bin/redis-cli  连接服务命令

Is this ok? Then press ENTER to go on or Ctrl-C to abort.

Copied /tmp/6379.conf => /etc/init.d/redis_6379

Installing service...

Successfully added to chkconfig!

Successfully added to runlevels 345!

Starting Redis server...   初始化配置后 会自动启动redis服务 并设置开机运行

Installation successful!

[root@host51 redis-4.0.8]#

 #查看服务的端口号

[root@host51 redis-4.0.8]# netstat  -utnalp  | grep  6379

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      4108/redis-server 1

查看进程

[root@host51 redis-4.0.8]# ps -C redis-server

  PID TTY          TIME CMD

 4108 ?        00:00:00 redis-server


停止redis服务

[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 stop

Stopping ...

 #启动redis服务

[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 start

Stopping ...

[root@host51 ~]# redis-cli   连接服务 存取数据


[root@host51 ~]# redis-cli shutdown

[root@host51 ~]# /etc/init.d/redis_6379 start

#修改密码等

[root@host51 ~]# vim /etc/redis/6379.conf

70 bind 192.168.4.51   地址

93 port 6351  端口

501 requirepass 123456  密码     

:wq

[root@host51 ~]# /etc/init.d/redis_6379  stop

Stopping ...

Redis stopped

[root@host51 ~]# /etc/init.d/redis_6379  start

[root@host51 ~]# netstat -utnalp  | grep redis-server

tcp        0  0 192.168.4.51:6351  0.0.0.0:*      LISTEN      4405/redis-server 1

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6351 -a 123456


使用命令停止服务

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6351 -a 123456 shutdown

[root@host51 ~]# /etc/init.d/redis_6379  start  启动服务


修改脚本使其也可以使用脚本停止服务(启动脚本是使用shell语法编写)

[root@host51 ~]# vim   +43   /etc/init.d/redis_6379

$CLIEXEC -h 192.168.4.51 -p 6351 -a 123456 shutdown         

            :wq          

#执行脚本停止服务

[root@host51 ~]# /etc/init.d/redis_6379  stop

  


LNP+Redis 案例

   具体配置步骤如下: 

                     1) 安装源码的nginx软件

                     2) 安装php软件    php php-fpm php-devel

                        3) 修改nginx服务的配置文件实现动静分离

                         4) 启动服务

                            启动nginx服务 和 php-fpm服务

                            查看服务对应的端口80 和 9000

                     5) 测试Nginx服务能否解释PHP代码

                    

2.2 配置php支持redis

意思就是在网站服务器编写php 脚本 可以连接redis服务存储数据和查询数据

默认PHP不支持redis (也就是不能连接redis服务)

   1) 安装软件提供连接redis服务的功能模块

              2) 让PHP进程在运行时 调用redis模块

              3) 查看是否支持redis服务

              4) 测试配置

                     4.1 在网站服务器编写PHP脚本 存储数据 和查询数据

                            #编写存储数据的脚本

                            #编写查询数据的脚本

                     4.2 在客户端访问网站服务器php脚本

                      4.3 在Redis服务器本机查看内存里的数据

                         能够看到PHP存储的数据为成功


[root@host50~]#tar -xf redis-cluster-4.3.0.tgz

[root@host50~]#cd redis-4.3.0/

 创建配置命令configure 和生产PHP配置信息文件/usr/bin/php-config

[root@host50 redis-4.3.0]# phpize 

Configuring for:

PHP Api Version:         20100412

Zend Module Api No:      20100525

Zend Extension Api No:   220100525

 #配置

[root@host50redis-4.3.0]# ./configure  --with-php-config=/usr/bin/php-config 

[root@host50 redis-4.3.0]# make  编译

[root@host50 redis-4.3.0]# make install 安装

#提示模块的安装目录

Installing shared extensions:     /usr/lib64/php/modules/  

[root@host50 redis-4.3.0]#

 #查看目录下的模块列表 有redis.so 模块文件即可

[root@host50 redis-4.3.0]# ls /usr/lib64/php/modules/ 

curl.so      json.so    mysql.so      pdo.so         phar.so   sqlite3.so

fileinfo.so  mysqli.so  pdo_mysql.so  pdo_sqlite.so  redis.so  zip.so

[root@host50 redis-4.3.0]# vim /etc/php.ini

 728 extension_dir = "/usr/lib64/php/modules/"  模块文件所在的目录

 730 extension = "redis.so" 模块名

:wq

 [root@host50 redis-4.3.0]# systemctl  restart php-fpm

 #查看支持的模块

[root@host50 ~]# php -m  | grep -i  redis

redis


Redis服务的内存清除策略

redis服务提供的内存清除策略如下:(在/etc/redis/6379.conf 有说明信息)

   1) LRU  删除最近最少使用的,有2种清除方式:

             volatile-lru    针对设置了TTL的key

             allkeys-lru     针对所有的key

     2)LFU  删除使用频率最少的 有2种清除方式:

             volatile-lfu    针对设置了TTL的key

             allkeys-lfu     针对所有的key

    3) RANDOM  随机删除 有2种清除方式:

             volatile-random 针对设置了TTL的key

             allkeys-random  针对所有的key

   4) volatile-ttl  删除快要过期的

   5)noeviction 不删除 存储空间不够时 服务直接报错


与内存相关的配置项 vim /etc/redis/6379.conf

maxmemory        //最大内存

maxmemory-policy     //定义使用策略

maxmemory-samples  20 //选取key模板的个数 (针对lru 和 ttl 、volatile-ttl 策略



Redis集群

准备工作:

  第1步 安装redis软件并做初始化配置

第2步 停止按照初始化配置启动的Redis服务

第3步 修改主配置文件(启用集群功能)

第4步 启动redis服务 并查看端口号

重要说明:内存里不允许有数据 不能设置连接密码

[root@host51 ~]# yum -y install gcc

[root@host51 ~]# tar -xf redis-4.0.8.tar.gz

[root@host51 ~]# cd redis-4.0.8/

[root@host51 ~]# make && make install

[root@host51 ~]# ./utils/install_server.sh  遇到提示就回车

[root@host51 ~]# /etc/init.d/redis_6379  stop

[root@host51 ~]# vim /etc/redis/6379.conf

bind 192.168.4.51

port 6379

cluster-enabled yes #启用集群功能

cluster-config-file nodes-6379.conf 保存集群信息的配置文件

cluster-node-timeout 5000  集群中主机的连接超时时间

[root@host51 ~]#            

[root@host51 ~]# /etc/init.d/redis_6379  start

[root@host51 ~]# netstat  -utnlp  | grep redis-server

tcp        0      0 192.168.4.51:16379      0.0.0.0:*               LISTEN      4249/redis-server 1

tcp        0      0 192.168.4.51:6379      0.0.0.0:*               LISTEN      4249/redis-server 1

  注重复上面的步骤有几台就重复好多

配置管理主机

第一步:准备ruby脚本的运行环境

        第二步:创建脚本

        第三步:查看脚本帮助信息

]#yum  -y  install   rubygems   ruby

]#gem  install  redis-3.2.1.gem

]#mkdir  /root/bin                //创建命令检索目录

]#tar -xf redis-4.0.8.tar.gz

]#cp  redis-4.0.8/src/redis-trib.rb   /root/bin/     

]#chmod  +x   /root/bin/redis-trib.rb  设置执行权限

]#redis-trib.rb   help   (能看到帮助信息为成功)

创建集群

        

       创建集群的命令格式  

[root@mgm57 ~]# redis-trib.rb  create --replicas 数字   ip地址:端口  ip地址:端口  ip地址:端口  ....

说明,创建集群时,会把前3台服务器 配置为主服务器,剩下的其他主机全做从服务器

       --replicas 从服务器的台数(指定每个主服务器有几台从服务器)

[root@mgm57 ~]# redis-trib.rb create --replicas 1  192.168.4.51:6379  192.168.4.52:6379 192.168.4.53:6379 192.168.4.54:6379 192.168.4.55:6379 192.168.4.56:6379

>>> Creating cluster

创建集群失败:

             1 如果所有的Redis服务都启用的集群功能 内存里也没有数据 也没设置连接密码 还是创建失败

             可能是物理内存不足 导致创建失败 把没用的虚拟机删除

            

           2 在集群中所有主机执行清除集群信息的命令 > cluster reset 

查看集群信息

           #查看集群统计信息

[root@mgm57 ~]# redis-trib.rb info  192.168.4.56:6379

#查看集群详细信息

[root@mgm57 ~]# redis-trib.rb check  192.168.4.51:6379



访问集群存取数据

命令格式 

]# redis-cli  -c   -h redis服务器的ip   -p 端口号

说明:

       连接集群中的任意一台服务器都可以查询数据和存储数据)

       -c 连接集群中的主机 使用集群算法存储数据


管理集群

3.1 向集群里添加新服务器

        说明:什么情况下需要向集群里添加新主机(添加master角色服务器)

             扩大内存空间(添加master角色服务器)。

             为了保证服务的可靠性(给主服务器添加多个从服务器)

    1)添加master角色的服务器

           诉求把新的Redis服务器Host58 添加到集群里做master 服务器

           具体配置如下:

              1) Host58运行redis 服务且启用了集群功能

                  redis服务的端口 6379   服务使用的地址 192.168.4.58

              2) 在管理主机mgm57 如下操作:

                     2.1 把host58主机添加到集群里

命令格式

[root@mgm57 ~]# redis-trib.rb add-node 新主机Ip:端口  集群中已有主机的ip:端口

 分配hast slots (master角色的服务器没有hast slots得不到存储数据机会)

命令格式                    

[root@mgm57 ~]# redis-trib.rb   reshard  集群中已有主机的ip:端口

 

 2)添加slave角色的服务器

           说明:从角色服务器的数据是master服务器同步过来的数据

                所以slave角色的服务器不需要分配hash slots

                只要把主机添加到集群了做slave服务器就可以了。

       命令格式

[root@mgm57 ~]# redis-trib.rb  add-node   --slave  新主机Ip:端口  集群中已有主机的ip:端口

3.2 把服务器移除集群

           3.2.1  移除slave角色的主机

命令格式  [root@mgm57 ~]# redis-trib.rb del-node  集群中任意主机的Ip:端口  被移除主机的id

说明:slave角色的主机的没有hash slots 直接移除即可

      主机被移除集群后redis服务会自动停止

             

 移除master角色的主机

     说明:master角色的服务器会占用hash slots  要先释放hash slots  再执行移除主机的命令

    具体操作步骤:

                  第一步:释放 hash slots (再次执行reshard命令)

                  第二步:移除主机 (执行删除主机的命令)

#释放 hash slots (再次执行reshard命令)

[root@mgm57 ~]# redis-trib.rb  reshard  192.168.4.56:6379

 第1个问题:释放hash slots 的个数

How many slots do you want to move (from 1 to 16384)? 4096  (host58主机占用hash slots 的个数)

 第2个问题:接收4096的个hash slots的主数据库服务器的ID (随便给那个主服务器都可以)

What is the receiving node ID?0eb3b7aa0493a19189cba35b0c658202cc20884b   (host51主机的id ,就是把释放的4096个hash slots给主数据库服务器host51)

 第3个问题:从那台主服务器移除4096个hash slots

Source node #1:87cc1c128166e08a16cc294758611453bbc71437  (host58主机的id)

Source node #2:done 结束指定

第4个问题:确认配置 yes同意  no 退出       

Do you want to proceed with the proposed reshard plan (yes/no)? yes  同意


查看host58主机的id 然后删除主机 Host58

[root@mgm57 ~]# redis-trib.rb  check  192.168.4.56:6379 | grep  192.168.4.58

M: 87cc1c128166e08a16cc294758611453bbc71437 192.168.4.58:6379

[root@mgm57 ~]# redis-trib.rb  del-node   192.168.4.56:6379  87cc1c128166e08a16cc294758611453bbc71437            

>>> Removing node 87cc1c128166e08a16cc294758611453bbc71437 from cluster 

                 

 

扩展知识

      1) 平均分配当前所有主服务器的hash slots

[root@mgm57 ~]# redis-trib.rb  info  192.168.4.56:6379  槽不平均

192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves.

192.168.4.51:6379 (0eb3b7aa...) -> 3 keys | 8192 slots | 1 slaves.

192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves.

[OK] 6 keys in 3 masters.

0.00 keys per slot on average.

平均分配hash slots

[root@mgm57 ~]# redis-trib.rb    rebalance 192.168.4.56:6379

    再次查看平均了

[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379

192.168.4.53:6379 (f2c1bdb7...) -> 2 keys | 5462 slots | 1 slaves.

192.168.4.51:6379 (0eb3b7aa...) -> 2 keys | 5461 slots | 1 slaves.

192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 5461 slots | 1 slaves.

[OK] 6 keys in 3 masters.

0.00 keys per slot on average.


2) 把移除的主机再次添加到集群里的步骤

              第一步: 启动Redis服务并清除前世记忆(在Redis服务器本机操作)

              第二步: 清空内存里的数据(在Redis服务器本机操作)

              第三步: 在管理主机执行执行添加命令(在管理主机执行)

              第四步: 查看是否添加成功(在管理主机执行)

#启动服务器 

/etc/init.d/redis_6379 start

Starting Redis server...

[root@host58 ~]# netstat  -utnlp  | grep  -i redis-server

tcp        0      0 192.168.4.58:6379       0.0.0.0:*               LISTEN      4480/redis-server 1

tcp        0      0 192.168.4.58:16379      0.0.0.0:*               LISTEN      4480/redis-server 1

[root@host58 ~]#

[root@host58 ~]# redis-cli  -h 192.168.4.58 -p 6379

192.168.4.58:6379> cluster reset清除前世记忆

OK

192.168.4.58:6379>              

192.168.4.58:6379> keys *

在管理主机把5添加到集群里

[root@mgm57 ~]# redis-trib.rb add-node 192.168.4.58:6379  192.168.4.51:6351

 #查看集群信息

[root@mgm57 ~]# redis-trib.rb info  192.168.4.51:6351  发现多了主服务器58



把 移除的59 再次添加到集群 做53主机的slave数据库服务器

 命令格式

redis-trib.rb add-node --slave --master-id 主服务器的id   新服务器的ip:端口 集群中已有机器的Ip:端口

#启动53主机的redis服务并清除前世记录

]# /etc/init.d/redis_6379 start

]# redis-cli  -h 192.168.4.59 -p 6379

> cluster  reset

> exit

 #在管理主机查看host53主机的id

[root@mgm57 ~]# redis-trib.rb check   192.168.4.51:6351 | grep 192.168.4.53

M: d9c9ef29c07ad740a05fa7aaa4d96ce25fa089b5 192.168.4.53:6353

#添加59主机做主服务器53的 slave服务器

[root@mgm57 ~]# redis-trib.rb add-node --slave --master-id d9c9ef29c07ad740a05fa7aaa4d96ce25fa089b5 192.168.4.59:6379 192.168.4.51:6351

 

3)把集群中的主机恢复为独立的数据库服务器(host51~host56)

              在数据库服务器本机执行如下操作

               #停止redis服务

              #注释掉配置文件中的集群功能

              #清空数据库目录

              #启动服务

              #连接服务查看不到集群信息 也没有数据

[root@host51 ~]# redis-cli  -h 192.168.4.51 shutdown

[root@host51 ~]# vim  /etc/redis/6379.conf

#cluster-enabled yes

#cluster-config-file nodes-6379.conf

#cluster-node-timeout 5000

[root@host51 ~]# rm -rf /var/lib/redis/6379/*

[root@host51 ~]# /etc/init.d/redis_6379 start

Starting Redis server...

[root@host51 ~]# netstat -utnalp  |grep -i redis-server

tcp        0      0 192.168.4.51:6379       0.0.0.0:*               LISTEN      9082/redis-server 1

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379

192.168.4.51:6379> keys *

(empty list or set)

192.168.4.51:6379> cluster info

ERR This instance has cluster support disabled  没有启用集群功能

192.168.4.51:6379>

 #在管理主机查看集群信息看不到host51主机了

[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379

192.168.4.54:6379 (bdba7786...) -> 2 keys | 5462 slots | 1 slaves.

192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 5461 slots | 1 slaves.

192.168.4.58:6379 (87cc1c12...) -> 2 keys | 5461 slots | 0 slaves.

[OK] 6 keys in 3 masters.

0.00 keys per slot on average.



主从复制

     redis服务的主从复制(与mysql服务主同步的功能一样,都是实现数据自动同步的存储结构。

     主服务器:接收客户端连接

     从服务器:连接主服务器同步数据

 主从复制结构模式:

一主一从   、 一主多从 、 主从从

 redis主从复制工作过程(数据同步原理):

!!!说明!!!:从服务器首次做的是全量同步,且同步的数据会覆盖本机的数据

            第1步:slave向master发送sync命令

            第2步:master启动后台存盘进程,并收集所有修改数据命令

            第3步:master完成后台存盘后,传送整个数据文件到slave

            第4步:slave接收数据文件,加载到内存中完成首次完全同步,后续有新数据产生时,master继续收集数据修改命令依次传给slave,完成同步


命令行配置命令(马上生效 但不永久 适合配置线上服务器)

info  replication     #查看复制信息

slaveof   主服务器ip地址   主服务器端口号   #指定主服务服务器IP地址和服务端口号

slaveof   no  one                         #临时恢复为主服务器

 修改配置文件(永久有效,重启了redis服务依然有效)

        ]# vim /etc/redis/6379.conf

        slaveof  主服务器ip地址   主服务器端口号

       :wq

!!!说明!!!!

        redis服务运行后 默认角色就是master(主)所以一台主机做master 服务器的话 无需配置。

        主从结构中的从服务器 都是只读的, 客户端连接从服务器对数据仅有查询权限


配置一主一从 

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379  #host51主机 连接服务 

192.168.4.51:6379> info replication   查看复制信息

# Replication

role:master  角色是 master

connected_slaves:0  从服务器的个数 是 零个

 [root@host52 ~]# redis-cli  -h 192.168.4.52 -p 6379 #host52主机连接服务

192.168.4.52:6379> info replication

# Replication

role:master   角色是 master

connected_slaves:0    从服务器的个数 是 零个

192.168.4.52:6379> slaveof  192.168.4.51  6379   指定主服务器的ip 和端口

OK

 #在52主机再次查看复制信息

192.168.4.52:6352> info replication

# Replication

role:slave  角色变为 slave

master_host:192.168.4.51   主服务器ip

master_port:6351  主服务器端口

master_link_status:up   能与主服务器连接   如是down 表示连接不上master 服务

.....       

把52永久配置为51的从服务器 (host52主机的系统重启 或redis服务重启 都依然是host51的从服务器)

[root@host52 ~]# vim +282 /etc/redis/6379.conf

282 slaveof  192.168.4.51 6379  

:wq

 #在51主机再次查看复制信息

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379

192.168.4.51:6379> info  replication

# Replication

role:master

connected_slaves:1  有1台 从服务器

slave0:ip=192.168.4.52,port=6379,state=online,offset=294,lag=0  从服务器的具体信息

 验证配置:

     第一步 连接主服务器存储数据

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379

192.168.4.51:6379> mset   x 1  y  2  z 3 

OK

192.168.4.51:6379> keys *

1) "x"

2) "z"

3) "y"

192.168.4.51:6351>      

     第二步  连接从服务器 能够查看到和主服务器一样的数据

[root@host52 ~]# redis-cli  -h 192.168.4.52 -p 6379

192.168.4.52:6379> keys *

1) "z"

2) "y"

3) "x"

     说明:主从结构的从服务器不允许执行存储数据的操作

192.168.4.52:6379> set name bob

(error) READONLY You can't write against a read only slave.

192.168.4.52:6379>


配置一主多从

在host53主机做如下配置

[root@host53 ~]# redis-cli  -h 192.168.4.53 -p 6379  

192.168.4.53:6379> slaveof  192.168.4.51  6379   指定主服务器的ip 和端口

OK

 

在master服务host51 查看复制信息

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379

192.168.4.51:6379> info  replication

# Replication

role:master

connected_slaves:2   有2台从服务器

slave0:ip=192.168.4.52,port=6379,state=online,offset=294,lag=0 

slave1:ip=192.168.4.51,port=6379,state=online,offset=294,lag=0 

 

 

配置主从从结构

    在host53主机做如下配置

        第1步 把一主多从结构中的host53主机恢复为独立的数据库服务器

        第2步:把host53配置为 host52主机的slave服务器

    [root@host53 ~]# redis-cli  -h 192.168.4.53 -p 6379  

    192.168.4.53:6379>  slaveof  no  one

    OK

    192.168.4.53:6379>  slaveof  192.168.4.52 6379

  在host52主机查看复制信息

    #既有主服务器的信息又有从服务器的信息

192.168.4.52:6379> info replication

# Replication

role:slave

master_host:192.168.4.51

master_port:6379

master_link_status:up

....

connected_slaves:1

slave0:ip=192.168.4.53,port=6379,state=online,offset=2310,lag=0

.....



配置带验证的主从复制

            意思就是:

           主从结构中的master服务器设置了连接密码,

           slave服务器要指定连接密码才能正常同步master主机数据

第一步 给Redis服务器Host51 设置连接密码 123456 

第二步 在redis服务器host52 设置连接 master服务器  host51的连接密码  并设置本机redis服务的连接密码为123456

第三步 在redis服务器host53 设置连接 master服务器  host52的连接密码

 第一步:给主服务器51 设置连接密码

[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6379

192.168.4.51:6379> config get requirepass

1) "requirepass"

2) ""

192.168.4.51:6379> config set requirepass 123456

OK

192.168.4.51:6379> config get requirepass

(error) NOAUTH Authentication required.

192.168.4.51:6379>

192.168.4.51:6379> auth 123456

OK

192.168.4.51:6379> config get requirepass

1) "requirepass"

2) "123456"

192.168.4.51:6379> config rewrite

OK

192.168.4.51:6379> exit

[root@host51 ~]# tail -1 /etc/redis/6379.conf

requirepass "123456"

[root@host51 ~]#

 第二步 :配置redis服务器 host52

[root@host52 ~]# redis-cli  -h 192.168.4.52  -p 6379

192.168.4.52:6379> config get requirepass

1) "requirepass"

2) ""

192.168.4.52:6379> config set requirepass 123456

OK

192.168.4.52:6379> auth 123456

OK

192.168.4.52:6379> config get masterauth

1) "masterauth"

2) ""

192.168.4.52:6379> config set masterauth 123456

OK

192.168.4.52:6379> config get masterauth

1) "masterauth"

2) "123456"

192.168.4.52:6379> config rewrite

OK

192.168.4.52:6379>

192.168.4.52:6379> info replication

192.168.4.52:6379> info replication

# Replication

role:slave

master_host:192.168.4.51

master_port:6379

master_link_status:up

....

....

192.168.4.52:6379> exit

[root@host52 redis-4.0.8]# tail -2 /etc/redis/6379.conf

masterauth "123456"

requirepass "123456"

[root@host52 redis-4.0.8]#

 第三步 在redis服务器host53 设置连接 master服务器  host52的连接密码

[root@host53 ~]# redis-cli  -h 192.168.4.53

192.168.4.53:6379> config set masterauth 123456

OK

192.168.4.53:6379> slaveof 192.168.4.52 6379

OK

192.168.4.53:6379> config rewrite

OK

192.168.4.53:6379>

192.168.4.53:6379> info  replication

# Replication

role:slave

master_host:192.168.4.52

master_port:6379

master_link_status:up

....

192.168.4.53:6379> exit


哨兵服务

  什么是哨兵服务:监视主从复制结构中主服务器,发现主服务器无法连接后,会把对应的从升级为主数据库服务器,继续监视新的主数据库服务器,坏掉的主数据库服务器恢复后,会自动做当前主服务器的从主机。哨兵服务+redis主从服务 能够实现redis服务高可用和数据的自动备份,但远比Redis集群的资金成本和运维成本要低。

说明:

        1)可以使用一主一从或 一主多从 或 主从从   +   哨兵服务 做服务的高可用 和 数据自动备份 

       2)如果主从结构中的redis服务设置连接密码的话必须全每台数据库都要设置密码且密码要一样,

        3)宕机的服务器 启动服务后,要人为指定主服务器的连接密码   

步骤一  给host53主机的Redis服务设置连接密码  要与另外2台Redis服务器设置一样的连接密码

[root@host53 ~]# redis-cli  -h 192.168.4.53

192.168.4.53:6379> config set requirepass 123456

OK

192.168.4.53:6379> auth 123456

OK

192.168.4.53:6379> config rewrite

OK

192.168.4.53:6379>

步骤二:配置哨兵服务(192.168.4.57)

                具体操作步骤:

                    1)安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)

                    2)创建并编辑主配置文件 (说明源码包里有哨兵服务配置文件的模板sentinel.conf)

  1) 安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)

[root@redis57 ~ ]# yum -y install gcc

[root@redis57 ~ ]# tar -zxf redis-4.0.8.tar.gz

[root@redis57 redis]# cd redis-4.0.8/

[root@redis1 redis-4.0.8]# make

[root@redis1 redis-4.0.8]# make install         

 2)创建并编辑主配置文件

                #说明源码包里有哨兵服务配置文件的模板sentinel.conf

             [root@host57 ~]# vim  /etc/sentinel.conf

             bind  192.168.4.57

             sentinel   monitor    redis_server   192.168.4.51   6379   1

             sentinel auth-pass    redis_server   123456   #如果主服务器没有连接密码此配置项可用省略

             :wq

  3)启动哨兵服务  (会占用当前终端显示启动信息)

 [root@mgm57 redis-4.0.8]# nohup redis-sentinel  /etc/sentinel.conf  &

[1] 5701

[root@mgm57 redis-4.0.8]# nohup: 忽略输入并把输出追加到"nohup.out"   回车即可

 [root@mgm57 redis-4.0.8]# jobs  查看当前终端后台进程

[1]+  运行中               nohup redis-sentinel /etc/sentinel.conf &


 3)查看哨兵服务主配置文件 监视的主服务器 自动修改为 从服务器的ip

[root@host57 ~]# cat /etc/sentinel.conf

.....

sentinel monitor redis_server 192.168.4.52 6379 1

.....

sentinel auth-pass redis_server 123456

sentinel known-slave redis_server 192.168.4.53 6379

sentinel known-slave redis_server 192.168.4.51 6379



二、持久化        (理论多)

      2.1、什么是持久化: redis服务可以永久的保存数据,怎么实现的呢?

     2.2、实现方式有2种:分别是 RDB文件 和  AOF文件

          1) RDB文件

                         指定就是数据库目录下的 dump.rdb 文件

                         redis运行服务后,会根据配置文件的设置的存盘频率 把内存里的数据复制到数据库目录下的dump.rdb文件里(覆盖保存)

         2)AOF文件

                  redis服务AOF文件(与mysql服务的binlog日志文件的功能相同)

                 是一个文件,记录连接redis服务后执行的写操作命令并且是以追加的方式记录写操作命令

                  默认没有开启,使用需要人为启用。

       !!!说明:通过这2种文件 均可以实现对数据的手动备份和手动恢复!!!


RDB文件的使用

          2.4.1、查看 redis服务存储数据到硬盘的存盘频率

vim /etc/redis/6379.conf (默认 219行 220行 221行)    

save  秒   变量的个数

save 900   1

save 300   10

save 60    10000


使用RDB文件 实现数据的备份和恢复

               第1步:拷贝 dump.rdb 文件就是对数据的备份

[root@host56 ~]# cp /var/lib/redis/6379/dump.rdb  /opt/

[root@host56 ~]# ls /opt/*.rdb

/opt/dump.rdb

使用备份的dump.rdb文件恢复

                          第1步  停止内存没有数据的redis服务

                          第2步  把没有数据的dump.rdb文件删除

                          第3步 把备份dump.rdb文件拷贝到数据库目录下

                          第4步 启动redis服务 并连接服务查看数据

[root@host56 ~]# redis-cli -h 192.168.4.56 -p 6379  shutdown

[root@host56 ~]# rm -rf /var/lib/redis/6379/dump.rdb

[root@host56 ~]# cp /opt/dump.rdb  /var/lib/redis/6379/

[root@host56 ~]# /etc/init.d/redis_6379 start

Starting Redis server...

[root@host56 ~]# redis-cli -h 192.168.4.56 -p 6379

192.168.4.56:6379> keys *

 1) "i"

 2) "d"

 3) "x"

.4.4 RDB方式的优/缺点

           优点:

               高性能的持久化实现 —— 创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;

               过程中主进程不做任何IO操作比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合

           缺点:意外宕机时,丢失最后一次持久化的所有数据


AOF文件的使用 

                2.5.1 启用AOF文件

                      1、通过修改配置文件启用(修改文件需要重启redis服务才能生效,所以时适合线下服务器)

注意:通过配置文件启用AOF文件  服务器原有的数据会被删除

 vim /etc/redis/6379.conf       

appendonly yes         启用 aof 文件  

appendfilename "appendonly.aof"  日志文件名  

:wq

[root@host53 ~]# /etc/init.d/redis_6379 start

Starting Redis server...

[root@host53 ~]# ls /var/lib/redis/6379/   存放在日志目录下

appendonly.aof  dump.rdb

连接服务存储数据后 再查看文件行数

[root@host53 ~]# redis-cli  -h 192.168.4.53 -p 6379

192.168.4.53:6379> keys *  删除了服务器原有的数据


命令行启动(马上生效且不需要重启redis服务,也不会删除原有的数据 所以适合线上服务器)

[root@host56 ~]# redis-cli -h 192.168.4.56 -p 6379

192.168.4.56:6356> config set  appendonly yes    启用aof文件

OK

192.168.4.56:6356> config rewrite  永久有效

OK

192.168.4.56:6356> keys *

(empty list or set)

192.168.4.56:6356> set x 1

OK

192.168.4.56:6356> set y 2

OK

192.168.4.56:6356> set z 3

OK

192.168.4.56:6356> keys *

1) "x"

2) "z"

3) "y"

192.168.4.56:6356> exit

[root@host56 ~]# ls /var/lib/redis/6379/*.aof      数据库目录多了.aof文件

/var/lib/redis/6379/appendonly.aof

[root@host56 ~]# ls /var/lib/redis/6379/*.rdb

/var/lib/redis/6379/dump.rdb


使用AOF文件 实现数据的备份和恢复

               第1步  备份aof文件

[root@host56 ~]# cp /var/lib/redis/6379/appendonly.aof  /opt/

[root@host56 ~]# ls /opt/*.aof

/opt/appendonly.aof

[root@host56 ~]#

      

               第2步  使用备份的aof文件恢复数据

                     #删除数据

[root@host56 ~]# redis-cli -h 192.168.4.56 -p 6379

192.168.4.56:6379> flushall

192.168.4.56:6379> exit

            #恢复数据

                             第1步: 把没有数据的服务停止

                      [root@host56 ~]# redis-cli -h 192.168.4.56 -p 6356  shutdown

                           第2步: 删除没有数据的aof文件和rdb文件

                      [root@host56 ~]# rm -rf  /var/lib/redis/6379/*

                      第3步:把备份的aof文件拷贝到数据库目录

                     [root@host56 ~]# cp /opt/appendonly.aof  /var/lib/redis/6379/

                      第4步:启动redis服务并查看数据

                         [root@host56 ~]# /etc/init.d/redis_6379 start

                         Starting Redis server...


  使用自带命令修改有问题的aof文件

      命令格式 [root@host56 ~]# redis-check-aof --fix /目录名/日志文件名

 redis-cli  -h 192.168.4.56 -p 6379 shutdown  停止服务

[root@host56 ~]# echo "daaaa" >> /var/lib/redis/6379/appendonly.aof   在日志追加错误格式的命令

[root@host56 ~]# /etc/init.d/redis_6379 start 启动服务

Starting Redis server...

[root@host56 ~]# redis-cli  -h 192.168.4.56 -p 6379  连接服务

Could not connect to Redis at 192.168.4.56:6379: Connection refused  提示连接失败 说明服务没启动

Could not connect to Redis at 192.168.4.56:6379: Connection refused

not connected> exit  退出登录提示

 [root@host56 ~]# tail -1 /var/log/redis_6379.log  查看日志文件的最后1行 (最新的日志信息都记录在日志文件的末尾) ,会显示报错原因的解决办法

5662:M 26 Nov 16:53:09.530 # Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>

 [root@host56 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof 恢复日志

0x              78: Expected prefix '*', got: 'd'

AOF analyzed: size=126, ok_up_to=120, diff=6

This will shrink the AOF from 126 bytes, with 6 bytes, to 120 bytes

Continue? [y/N]: y  同意修复    

Successfully truncated AOF

 [root@host56 ~]# /etc/init.d/redis_6379 start  启动服务

/var/run/redis_6379.pid exists, process is already running or crashed  提示PID文件存储

[root@host56 ~]# rm  -rf /var/run/redis_6379.pid 删除文件

 [root@host56 ~]# /etc/init.d/redis_6379 start 启动服务

Starting Redis server...

[root@host56 ~]# redis-cli  -h 192.168.4.56 -p 6379 连接服务查看数据

192.168.4.56:6379> keys *  查看数据

1) "a"

2) "e"

3) "b"

4) "c"

5) "d"

192.168.4.56:6379>

与aof 相关的配置项 ( vim /etc/redis/6379.conf )

                    appendfsync  always      //时时记录,并完成磁盘同步

                    appendfsync  everysec       //每秒记录一次,并完成磁盘同步

                    appendfsync  no              //写入aof ,不执行磁盘同步

                    auto-aof-rewrite-min-size   64mb   //首次重写触发值

                    auto-aof-rewrite-percentage  100   //再次重写,增长百分比

.5.6 AOF文件的优缺点

                    AOF优点

                            可以灵活设置持久化方式

                            出现意外宕机时,仅可能丢失1秒的数据

                      AOF缺点

                            持久化文件的体积通常会大于RDB方式

                            执行fsync策略时的速度可比RDB方式慢


redis安装 集群 教程的评论 (共 条)

分享到微博请遵守国家法律