redis部署锦集,redis部署都在这了。

2023-11-17

大数据之Redis——Redis各种部署方案和实现

Redis在大数据技术的发展中主要是用来作为中间值存储,快速计算,管道等工具使用。

今天先给大家介绍一下关于Redis的部署方案和实现,其原理和应用将会在下一期和大家分享。

直接上干货:

一、单机部署redis
二、redis主从结构部署
三、redis哨兵模式部署
四、redis集群部署
   redis集群部署配置秘密
五、redis主从方案
六、redis高可用部署
七、redis5.0之前版本搭配ruby的redis集群部署

1.linux单机安装

redis 5.x、6.x安装部署

https://blog.csdn.net/xch_yang/article/details/104019552 (linux单机安装部分)

#准备:
	yum -y install centos-release-scl
	yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
	scl enable devtoolset-9 bash
	#如果是离线的。则准备移植一些东西过去
        1)/opt/rh/devtoolset-9
        2)/usr/bin/scl
        3) /etc/scl
        4)在准备上面的rpm包,进行强制安装,最后别忘了scl enable devtoolset-9 bash
        #注意,里面有个报错Invalid argument, 没事,执行两次即可(yum相关包离线安装:https://blog.csdn.net/tfner123/article/details/123832115)
        具体:
         	1)下载 yum -y install yum-utils
         	2)查看命令如何使用:repotrack  -h		查看repotrack相关命令
         	3)下载所需的依赖包:repotrack  包名  -p 下载到的路径
         	4)离线安装:进入下载的路径: 用:rpm -ivh *.rpm    【不用:rpm -Uvh --nodeps *.rpm】
        】
		

#step1:官网下载地址:https://redis.io/download,这里我们下载目前最新稳定版5.0.7,直接点击下载。
	wget http://download.redis.io/releases/redis-6.0.16.tar.gz
	tar xzf redis-5.0.7.tar.gz
	cd redis-5.0.7/
	make
	#这时候会看到redis-5.0.7 中会有对应的 src、conf 等文件
	
#step2:进入 src 文件夹,执行 make install 进行 Redis 安装。
	cd src/
	make install
	
#step3:由于 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理(为了方便使用),如下
	cd /root/redis-5.0.7/
	mkdir etc
	mkdir bin
	cp redis.conf etc
	cd src/
	cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel ../bin/


#step4: 设置被外网访问
	cd etc
	vim redis.conf
	修改bind 127.0.0.1    为 bind 0.0.0.0

#step5:启动/关闭redis
	cd /root/redis-5.0.7/bin
	#启动
		./redis-server /root/redis-5.0.7/etc/redis.conf
	#关闭
		redis-cli -p 6379 shutdown
		
		

#完毕!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hoDdTDhn-1657028419409)(%E4%BA%A4%E6%B5%81%E7%BC%96%E8%BE%91.assets/image-20220623194052508.png)]

redis配置文件(redis.conf)的参数解释

# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis.pid
# redis进程的端口号
port 6379
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode yes
# 绑定的主机地址
bind 127.0.0.1
# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
timeout 300
# redis日志级别,可用的级别有debug.verbose.notice.warning
loglevel verbose
# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
logfile stdout
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件
save <seconds> <changes>
# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
rdbcompression yes
# 指定本地数据库文件名
dbfilename dump.db
# 指定本地数据问就按存放位置
dir ./
# 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
replicaof <masterip> <masterport>
# 当master设置了密码保护时,slave服务连接master的密码
masterauth <master-password>
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass footbared
# 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxclients 128
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory<bytes>
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。
appendonly no
# 指定跟新日志文件名默认为appendonly.aof
appendfilename appendonly.aof
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec


在这里插入图片描述

2.主从结构安装(从库只起到备份作用)

#Redis主从结构介绍:
	单纯的主从结构只是主库把数据复制给从库。
	-主库数据同步到从库, 从库一般情况不允许写,如果设置可以写则也只能写自己的库,没法同步到主库或者其他从库

具体安装流程:

https://blog.csdn.net/xch_yang/article/details/104019552 (主从结构安装部分)

#step1:完成上述linux单机安装

#step2:把step1安装好的redis作为master,并把安装好的复制到两个solve。然后到两个slove的redis/src/中执行 "make install"

#step3:对master进行配置(redis/etc/redis.conf)
	bind 0.0.0.0
    port 6379
    protected-mode no
    daemonize yes
    logfile ./redis.log
    requirepass pwdtest@2019
    masterauth pwdtest@2019

#step4:对两个slove进行配置(redis/etc/redis.conf):从机的配置和主机相似,相同的地方我就不再详解,不同的地方是需要使用replicaof指定主机(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof,目前我使用的5.0.7版本要使用 replicaof ,如下。
	bind 0.0.0.0
	port 6379
	protected-mode no
	daemonize yes
	logfile ./redis.log
	requirepass pwdtest@2019
	masterauth pwdtest@2019
	replicaof 192.168.231.130 6379 

在这里插入图片描述

#step5:启动所有结点redis:
	redis-server redis-5.0.7/etc/redis.conf
	上面我们主从节点的配置文件配置好后,重启 redis 服务,进入 bin 目录即可查看配置文件中指定的redis.log日志文件。
	
#step6:验证测试(下面内容可不看)
	1.进入redis, 输入:info replication.
	2.在主结点设置变量,其值会同步到从结点
	3.从节点不可以设置变量。(默认从结点没有写的权限,但是可以配置,即使配置了也只是写自己机子上的。)

3.哨兵模式安装(既互为主从[主挂了从就变成主])

#哨兵模式详解:
	Redis Sentinel是Redis 的高可用性解决方案,由一个或多个Sentinel(哨兵)实例组成。它可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,它的主要功能如下:
	-监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
	-通知(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel可以通过API向管理员或者其他应用程序发送通知。
	-故障迁移:当主服务器不能正常工作时,Sentinel会自动进行故障迁移,也就是主从切换。
	-统一的配置管理:连接者询问sentinel取得主从的地址。
	

#哨兵模式原理:
	Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系统,系统容错,以及Leader选举,每个Sentinel都需要定期的执行以下任务:
	-每个 Sentinel 会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。
	-如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
	-如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。
	-如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。
	-在一般情况下, 每个Sentinel会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。 当一个主服务器被Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
	-当没有足够数量的Sentinel同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向Sentinel的 PING 命令返回有效回复时, 主服务器的主管下线状态就会被移除。

在这里插入图片描述

安装步骤

#step1: 三台机子完成《主从结构安装》

#step2: 同样为了方便管理,首先将sentinel.conf复制到 etc 下。 编辑 sentinel.conf。【每个机子都配】
	cd /data/redis-5.0.7/
	cp sentinel.conf /data/redis-5.0.7/etc/
	cd etc/
	vi sentinel.conf
	配置文件修改如下,修改完毕后先按 esc ,然后:wq命令保存退出
        //端口默认为26379。
        port:26379
        //关闭保护模式,可以外部访问。
        protected-mode:no
        //设置为后台启动。
        daemonize:yes
        //日志文件。
        logfile:./sentinel.log
        //指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。【注意这里的ip是自己主机ip】
        sentinel monitor mymaster 192.168.231.130 6379 2
        //当在Redis实例中开启了requirepass,这里就需要提供密码。
        sentinel auth-pass mymaster pwdtest@2019
        //这里设置了主机多少秒无响应,则认为挂了。
        sentinel down-after-milliseconds mymaster 3000
        //主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
        snetinel parallel-syncs mymaster 1
        //故障转移的超时时间,这里设置为三分钟。
        sentinel failover-timeout mymaster 180000

#step3:先启动所有主从机子的redis,再启动所有主从机子的哨兵
		启动redis:
		启动哨兵:  redis-sentinel redis-5.0.7/etc/sentinel.conf
		
#step4:检查哨兵状态
		redis-cli -p 26379
		----------------------------------------------------------------------------------
		|127.0.0.1:26379> info sentinel                                                  |
        |# Sentinel                                                                      | 
        |sentinel_masters:1                                                              |
        |sentinel_tilt:0                                                                 |
        |sentinel_running_scripts:0                                                      |
        |sentinel_scripts_queue_length:0                                                 |
        |sentinel_simulate_failure_flags:0                                               |
        |master0:name=mymaster,status=ok,address=192.168.72.11:6379,slaves=2,sentinels=3 |
		----------------------------------------------------------------------------------
		可以看到,哨兵已经监听到当前的主机IP端口和运行状态,并且有2台从机,3个哨兵。
		#这里有个容易出现的bug,所有程序都正常执行了,就是发现sentinels=1 
			原因是:“哨兵的 配置文件中myid不能相同, 请删掉在启动,会自动分配”

sentinel.conf参数介绍如下:

# 哨兵sentinel实例运行的端口,默认26379  
port 26379
# 哨兵sentinel的工作目录
dir ./
# 是否开启保护模式,默认开启。
protected-mode:no
# 是否设置为后台启动。
daemonize:yes

# 哨兵sentinel的日志文件
logfile:./sentinel.log

# 哨兵sentinel监控的redis主节点的 
## ip:主机ip地址
## port:哨兵端口号
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了  
# sentinel monitor <master-name> <ip> <redis-port> <quorum>  
sentinel monitor mymaster 127.0.0.1 6379 2

# 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass <master-name> <password>  
sentinel auth-pass mymaster 123456  

# 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,默认30秒  
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000  

# 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1  

# 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。  
## 3. 当想要取消一个正在进行的failover时所需要的时间。
## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了
# sentinel failover-timeout <master-name> <milliseconds>  
sentinel failover-timeout mymaster 180000

# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
# 对于脚本的运行结果有以下规则:  
## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。
## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。  
## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
# sentinel notification-script <master-name> <script-path>  
sentinel notification-script mymaster /var/redis/notify.sh

# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

4.集群安装(数据分布)

在这里插入图片描述

#注意:安装过程中暂时不考虑主从(既:master1-master2-master3)

#step1: 1台机子先安装好《linux单机安装》

#step2: 配置redis.conf(如下具体意思请核查)
	# 开启redis的集群模式
	cluster-enabled yes
	# 配置集群模式下的配置文件名称和位置,redis-cluster.conf这个文件是集群启动后自动生成的,不需要手动配置。
	cluster-config-file redis-cluster.conf
	protected-mode no
	port  6379
	daemonize    yes                         
	pidfile  redis_6379.pid                  
	cluster-node-timeout  5000   
	appendonly  yes   
	bind 0.0.0.0

#step3: 主机scp分发,node1,node2,node3...

#step4: 快速的部署集群:主机之间相互认识
	#注意:防火墙打开
	redis-cli --cluster create 192.168.72.11:6379 192.168.72.12:6379 192.168.72.13:6379 --cluster-replicas 0
	#--cluster-replicas 0表示没有从机。 如果是1,则后面的ip:port 分别是 主 从 主 从 主 从 ......
	#可能遇到的bug
	https://blog.csdn.net/qq_38151401/article/details/86741950
	https://blog.csdn.net/shudaqi2010/article/details/53261754
		#检查集群
			每个机子执行:redis-cli --cluster check 192.168.72.xxx:6379
		#修复集群:
			每个机子执行:redis-cli --cluster fix 192.168.72.xxx:6379
		#重新分配slot
			每个机子执行:redis-cli --cluster reshard 192.168.72.xxx:6379
			
	

#step5:测试
    执行完成后自动生成配置的redis-cluster.conf文件。

    登录集群:redis-cli -c -h 192.168.1.11 -p 6379 -a 123456 # -c,使用集群方式登录。

    查看集群信息:192.168.1.11:6379> CLUSTER INFO #集群状态。

    列出节点信息:192.168.1.11:6379> CLUSTER NODES #列出节点信息。

5.Redis集群配置密码

https://blog.csdn.net/Xin_101/article/details/122987210
https://blog.csdn.net/weixin_44432789/article/details/120450017
https://www.cnblogs.com/linjiqin/p/7462822.html
https://blog.csdn.net/xufei512/article/details/82758676
配置方法:
#step1:创建Redis集群之后再配置密码,所有Redis节点配置文件中添加。 [也可以先创建密码,再设置集群,如下]
	#所有Redis节点redis.conf配置文件中添加:
		requirepass 123456
		masterauth 123456
		
#命令连接测试
		redis-cli -c -a '密码'
	或者
		redis-cli -c  先进入
		然后 
		127.0.0.1:6379> auth "123456"  这个方法好像只能用在单个节点。
		
#scala 连接集群方式。 下文-程序连接Redis API/scala密码连接scala集群

#补充:先设置密码后创建集群, 只需要多加个 -a '密码' 即可。
redis-cli -a "123456" --cluster  create 192.168.72.31:6379 192.168.72.32:6379 192.168.72.33:6379 --cluster-replicas 0

6.Redis高可用集群模式[简单且重点]

Redis集群主从以及配置方案

在这里插入图片描述

	redis集群是一个由多个主从节点群组成的分布式服务器群,具有复制、高可用、分片等特性。Redis集群不需要哨兵也能完成主从切换和故障转移。redis集群具有水平扩展的特性。redis集群的性能和高可用性优于哨兵模式,而且配置相对简单。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6CQ0P1Z-1657028419414)(%E4%BA%A4%E6%B5%81%E7%BC%96%E8%BE%91.assets/image-20220624145958530.png)]

集群原理分析

配置方法:

redis集群至少需要3个master节点,搭建3个master节点,并且每个主节点配置一个从节点,这样就有6个redis实例。

这里用一个机子,模拟搭建6个redis实例。搭建步骤如下:

#在一台机子上模拟6个实例吧。端口分别是 6381,6382,6383,6384,6385,6386


#创建文件夹 ./cluster/6381,  ./cluster/6382  ...........
#把redis.conf分别放置在其中,并且配置。(如下以6381为例)
 1. 在每台服务器的/usr/local下创建文件夹redis-cluster用于存放集群配置文件
	mkdir -p /usr/local/redis-cluster
	cd /usr/local/redis-cluster
	mkdir 8081 8082 8083 8084 8085 8086
 2. 把redis.conf复制到上面的文件夹中并修改一下内容
	(1)daemonize yes
	(2)port 6381(端口号分别设置)
	(3)pidfile /var/run/redis_6381.pid # 把pid进程号写入pidfile配置的文件
	(4)dir /usr/local/redis-6.0.16/cluster/6381/(指定数据文件存放位置,要指定不同的位置,不然会丢失数据)
	(5)cluster‐enabled yes(启动集群模式)
	(6)cluster‐config‐file nodes‐6381.conf(集群节点信息文件,这里808x最好和port对应上)
	(7)cluster‐node‐timeout 10000
	(8)bind 0.0.0.0(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通
过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
	(9)protected‐mode no (关闭保护模式)
	(10)appendonly yes
	(11)如果要设置密码需要增加如下配置:
		requirepass 123456(设置redis访问密码)
		masterauth 123456(设置集群节点间访问密码,跟上面一致)
 3. 分别启动6个redis实例,并验证是否启动成功
	redis-server /usr/local/redis-6.0.16/cluster/6381/redis.conf
	redis-server /usr/local/redis-6.0.16/cluster/6382/redis.conf
	redis-server /usr/local/redis-6.0.16/cluster/6383/redis.conf
	redis-server /usr/local/redis-6.0.16/cluster/6384/redis.conf
	redis-server /usr/local/redis-6.0.16/cluster/6385/redis.conf
	redis-server /usr/local/redis-6.0.16/cluster/6386/redis.conf

	ps ‐ef | grep redis 查看是否启动成功
	
 4. 用redis‐cli创建整个redis集群
	# 执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,
	(如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口16379(默认是在redis端口号上加1W)
	# 关闭防火墙
	# systemctl stop firewalld # 临时关闭防火墙



#组件集群命令
redis-cli -a '123456' \
--cluster create  192.168.0.61:6381 192.168.0.61:6382 192.168.0.61:6383 192.168.0.61:6384 192.168.0.61:6385 192.168.0.61:6386 \
--cluster-replicas 1
#注意:cluster-replicas值取
	1 : 表示有主从集群,前面一半是主,后面一半是对应的从。
    0 : 表示全部为master
    
    
    
#验证集群
(1)连接任意一个客户端 ./redis-cli -c -h -p (-a访问服务端密码 -c表示集群模式,指定ip和端口号)
(2)进行验证 命令:cluster info(查看集群信息),cluster nodes(查看节点信息,可以看到主从关系)
(3)数据操作验证
(4)关闭集群需要逐个关闭redis客户端

在这里插入图片描述

模拟故障实验

1.节点宕机实验
实验过程和现象
#可根据cluster nodes看到主从关系
    6381 -> 6386
    6382 -> 6384
    6383 -> 6385

#shutdown 一个从节点(6384)
	可根据cluster nodes看到主从关系. 6384已经fail了。 、、
	且 集群还可以正常使用

在这里插入图片描述

#shutdown 一个从节点(6383)
	可以看到一段时间后,其从节点(6385) 变成了master

#启动刚刚挂掉的之前的master 6383
	现在6383只能沦为 slave了

在这里插入图片描述

#启动刚刚挂掉的之前的slave 6384

总结
#总结:
	1)如果一个master挂掉,会由其slove 切换成master
	2)不可以同时挂半数以上master

其他问题

在这里插入图片描述

7.redis4.x集群安装

yum安装
yum install -y centos-release-scl-rh
yum install -y rh-ruby24


redis-4.0.9部署教程 
http://t.zoukankan.com/alexlv-p-15070131.html
#下面步骤内容即为引用此链接博主的博文内容。

一、下载redis 包

https://download.redis.io/releases/redis-4.0.9.tar.gz

二、解压缩redis包

tar xf redis-4.0.9.tar.gz

三、安装gcc,zlib-devel

yum install gcc zlib-devel -y

四、进入解压缩的目录

cd redis-4.0.9

五、安装,并指定安装位置

make PREFIX=/apps/redis install

六、复制配置文件到redis

cp redis.conf /apps/redis/etc/

七、修改配置文件

#守护进程模式运行(后台运行,默认前台运行)
daemonize yes
#设置密码
masterauth 123456
#日志文件存放位置
logfile "/apps/redis/logs/redis.log"
#开启集群(本次编译用来做集群,所以要取消注释这两项)
cluster-enabled yes
cluster-config-file nodes-6379.conf#修改监听端口0.0.0.0bind 0.0.0.0#设置本机密码requirepass 123456#设置主服务器密码(在集群中,这两个密码项非常重要,否则会导致主从数据不同步,并且不报错!!!)masterauth 123456

八、制作软连接,方便使用

ln -s /apps/redis/bin/redis* /usr/bin/

九、带配置文件启动redis(默认启动使用的是默认设置这个设置改不了)

redis-server /apps/redis/etc/redis.conf

配置集群:

十、将redis-trib.rb制作软链接到 /usr/bin/下 方便使用

ln -s /apps/redis-4.0.9/src/redis-trib.rb /usr/bin/

## redis-trib.rb 集群管理工具,这个工具是 redis 官方推出的管理 redis 集群的工具,集成在redis 的源码 src 目录下,是基于 redis 提供的集群命令封装成简单、便捷、实用的操作工具,redis-trib.rb是 redis 作者用 ruby 完成的

十一、下载ruby包(ruby和redis模块只需要在一台电脑安装即可)

wget https://cache.ruby-lang.org/pub/ruby/ruby-2.5.0.tar.gz

##yum源里带的版本低使用不了,版本高于2.30以上即可

十二、解压缩ruby

tar xf ruby-2.5.0.tar.gz

十三、进入ruby目录

cd ruby-2.5.0

十四、编译安装

1 ./configure 
2 make && make install

十五、下载redis模块

wget wget https://rubygems.org/downloads/redis-4.2.3.gem

##版本不限,和这个差不多就行

十六、安装指定的redis模块

gem install -l /apps/redis-4.2.3.gem

## 也可也直接gem install redis

返回如下则表示安装成功:

Successfully installed redis-4.2.3
Parsing documentation for redis-4.2.3
Installing ri documentation for redis-4.2.3
Done installing documentation for redis after 0 seconds
1 gem installed

十七、创建集群(任意一台安装过ruby的电脑上执行即可)

redis-trib.rb create --replicas 1 192.168.1.9:6379 192.168.1.8:6379 192.168.1.7:6379 192.168.1.6:6379 192.168.1.5:6379 192.168.1.4:6379

##我这里同时安装了6台电脑,直接创建集群

十八、提示如下,输入yes生成配置文件

redis-trib.rb create --replicas 1 192.168.1.9:6379 192.168.1.8:6379 192.168.1.7:6379 192.168.1.6:6379 192.168.1.5:6379 192.168.1.4:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:#创建了三个主节点
192.168.1.9:6379
192.168.1.8:6379
192.168.1.7:6379
Adding replica 192.168.1.6:6379 to 192.168.1.9:6379  ### 192.168.1.6是192.168.1.9的从节点
Adding replica 192.168.1.5:6379 to 192.168.1.8:6379
Adding replica 192.168.1.4:6379 to 192.168.1.7:6379
M: 73a51b03d3ae1ae60573924a36e35a4160ea2a8a 192.168.1.9:6379 # M表示master 主节点,S表示slave 从节点
   slots:0-5460 (5461 slots) master
M: bc591a36af254e510488ab184b0e638e7298ff6d 192.168.1.8:6379 ##M后的一串数字是随机生成的,在集群中,以ID号区分主机,不以IP地址区分
   slots:5461-10922 (5462 slots) master ## slots是按照顺序分的,每台上的应该是差不多的,也会有原因导致无序分配,
M: 7226c301d028168f22f60930db0bf8b4260c2905 192.168.1.7:6379
   slots:10923-16383 (5461 slots) master
S: 3bcd400f071643f814d45479bfc3a56612eca471 192.168.1.6:6379
   replicates 73a51b03d3ae1ae60573924a36e35a4160ea2a8a  ## 这里的ID就是master的ID
S: 7a1ad13e2d2e3ad84a5da2d001e1680fcf8b2255 192.168.1.5:6379
   replicates bc591a36af254e510488ab184b0e638e7298ff6d  ##slave节点是没有slots的,master宕机后会自动继承
S: d53b5724df5ae6f6f5305cebb419e6b5ec2a6096 192.168.1.4:6379
   replicates 7226c301d028168f22f60930db0bf8b4260c2905Can I set the above configuration? (type 'yes' to accept): yes
##配置文件中dir /var/lib/redis这里定义了放在哪,这个配置就会保存在这个位置,配置文件自动生成,不需要手动更改

返回如下则表示成功

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
lots:10923-16383 (5461 slots) master
S: 3bcd400f071643f814d45479bfc3a56612eca471 192.168.1.6:6379
   replicates 73a51b03d3ae1ae60573924a36e35a4160ea2a8a  ## 这里的ID就是master的ID
S: 7a1ad13e2d2e3ad84a5da2d001e1680fcf8b2255 192.168.1.5:6379
   replicates bc591a36af254e510488ab184b0e638e7298ff6d  ##slave节点是没有slots的,master宕机后会自动继承
S: d53b5724df5ae6f6f5305cebb419e6b5ec2a6096 192.168.1.4:6379
   replicates 7226c301d028168f22f60930db0bf8b4260c2905Can I set the above configuration? (type 'yes' to accept): yes
##配置文件中dir /var/lib/redis这里定义了放在哪,这个配置就会保存在这个位置,配置文件自动生成,不需要手动更改

返回如下则表示成功

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis部署锦集,redis部署都在这了。 的相关文章

  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • 当用户按下打印时运行脚本,并且在脚本结束之前不开始假脱机(linux,cups)

    我需要做的是结合用户按下打印来执行 python 程序 脚本 并且在该程序退出之前不要让打印作业假脱机 原因是打印驱动程序不是开源的 我需要更改用户设置 在本例中是部门 ID 和密码 通常是每个用户 但因为这是一个信息亭 具有相同帐户的不同
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • linux读取按行读写文本文件

    include
  • 迪杰斯特拉算法浅析

    所谓的迪杰斯特拉算法 就是一个用来求一个图中某点到其它点的最短路径的算法 大致方法 遍历所有节点 找到离起点最近的一个点 那么这个点到起点的最小距离肯定是起点到这个点的这条边的权值 然后标记这个点被使用过了 以1中的那个点为中继 更新其它节
  • 进程和线程的区别

    简介 进程 进程是计算机中运行程序的实例 是操作系统进行资源分配和调度的基本单位 每个进程都有独立的内存空间和系统资源 不同进程之间相互独立 彼此不能直接访问对方的内存 进程之间的通信需要通过操作系统提供的特定机制 如管道 共享内存等 个人
  • nginx 之安全配置

    前言 看官网官网 一 控制并发连接数 1 在默认发布目录新建一个目录并保存一张图片 传送文件到server1 打开浏览器就能看到图片 2 测试 查看日至情况 cat usr local nginx logs access log http状
  • 时间计时android程序,Android实现时间倒计时功能

    本文实例为大家分享了Android实现时间倒计时功能展示的具体代码 供大家参考 具体内容如下 效果展示 MainActivity 主页面代码 public class MainActivity extends Activity privat
  • Nacos配置中心落地与实践

    一 背景 目前 我们公司各团队配置中心使用各异 电商使用的是 Spring Cloud Config 支付使用的是 Apollo APP 团队使用的是 Apollo Nacos 为了更好地应对公司业务的发展 统一基础设施技术栈必不可少 图片
  • ChatGPT-Next-Web:Vercel 和 Cloudflare 的快速部署

    项目地址 GitHub Chanzhaoyu chatgpt web 用 Express 和 Vue3 搭建的同时支持 openAI Key 和 网页 accessToken 的 ChatGPT 演示网页 依赖安装 1 安装node cur
  • BI-SQL丨行列转换

    行列转换 行列转换 在SQL Server中属于常见的基本操作 无论是搭建数仓 还是通过PowerBI进行数据分析 我们总会接触到各式各样的数据源 而在这些数据源中 除了标准的大型数仓外 我们很少能够拿到标准规范的数据表结构 接触最多的 往
  • 最熟悉的陌生人:ListView 中的观察者模式

    http blog csdn net u011240877 article details 52683711 RecyclerView 得宠之前 ListView 可以说是我们用的最多的组件 之前一直没有好好看看它的源码 知其然不知其所以然
  • tar分卷压缩解压

    1 使用tar分卷压缩 格式 tar cvzf filedir split d b 50m filename 样例 tar cvzf dir split d b 10m dirname tar gz 将 dir 打包 并切割为 10m 的包
  • python——*和**

    python中 和 的使用分两个方面 一个是计算 另一个是参数传递过程中元素的打包和解包 计算中的运用 和 在python中最常见的作用分别是 相乘 和 乘幂 如下 gt gt gt a 2 gt gt gt b 3 gt gt gt c
  • 20个Android游戏源码,…

    原文地址 分享20个Android游戏源码 希望大家喜欢哈 作者 我算哪根葱 分享20个 Android 游戏源码 希望大家喜欢哈 http www apkbus com android 21834 1 1 html Android 疯狂足
  • 凸优化学习(三)——凸函数

    注意 本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目 https github com Kivy CN Stanford CS 229 CN 中的凸优化部分的内容进行翻译学习 3 凸函数 凸优化的一个核心要素是凸函数的概念 定义
  • vtm配置以及编码示例

    vtm配置以及编码示例 下载VTM源码 网址 VTM源码 选择对应的版本下载 版本从2 0到最新的版本 1 0版本的VTM需要使用HM的工具svn下载 VTM 1 0源码地址 https jvet hhi fraunhofer de svn
  • STM32F4 IAP 跳转 APP问题

    1 概念 IAP 的作用 网上其他资料已经有很多介绍了 这里放一个链接 不进行深入的介绍 本文的关注重点是Bootloader在跳转APP程序中出现的问题 IAP的实现原理讲解以及中断向量表的偏移 2 程序 本人主要做应用层的开发 所有Bo
  • python--判断奇数偶数

    num int input 输入一个数 if num 2 0 print 0 是偶数 format num else print 0 是奇数 format num 优化 while True try num int input 输入一个整数
  • TS中类型推论、类型别名和never类型

    一 类型推论 TypeScript会在没有明确的指定类型的时候推测出一个类型 这就是类型推论 如果没声明变量 没定义类型 也没赋值 这时候TS会推断成any类型可以进行任何操作 let str str 456 str null 二 类型别名
  • 5分钟 教你搭建个人博客

    链接 https www jianshu com p 4eaddcbe4d12 五分钟倒数已经可以计时了 三步完成免费个人博客搭建 这是一篇小白也能看懂的文章 本文主要针对mac OS Windows 除了软件安装方式和命令有些区别 装了g
  • C++11之初始化列表

    系列文章 C 11之正则表达式 regex match regex search regex replace C 11之线程库 Thread Mutex atomic lock guard 同步 C 11之智能指针 unique ptr s
  • redis部署锦集,redis部署都在这了。

    大数据之Redis Redis各种部署方案和实现 Redis在大数据技术的发展中主要是用来作为中间值存储 快速计算 管道等工具使用 今天先给大家介绍一下关于Redis的部署方案和实现 其原理和应用将会在下一期和大家分享 直接上干货 一 单机