前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于腾讯云上自建高可用Redis实践

基于腾讯云上自建高可用Redis实践

原创
作者头像
Vicwan
修改于 2018-11-12 03:14:55
修改于 2018-11-12 03:14:55
2.6K00
代码可运行
举报
文章被收录于专栏:上云实践上云实践
运行总次数:0
代码可运行

一、环境说明:

1.软件版本:

目前企业生产环境用的主流版本还是3.x,这里我就以redis 3.2.8稳定版来做搭建环境。

2.基本环境:

使用三台腾讯云VM,每台VM上开启一个redis-server和redis-sentinel服务,redis-server端口为6379,redis-sentinel的端口为26379。我这里用默认端口,生产环境中可以修改默认端口。

role

IP

port

redis-master1

172.16.2.4

6379

redis-slave1

172.16.2.2

6379

redis-slave2

172.16.2.15

6379

redis-sentinel1

172.16.2.4

26379

redis-sentinel2

172.16.2.2

26379

redis-sentinel3

172.16.2.15

23679

二、几种redis高可用方案说明:

1.一般的主从复制方案:

由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,还得想办法,当主redis挂了,让从redis升级成为主redis。

优点:

(1)实现了对master数据的备份,一旦master出现故障,slave节点可以提升为新的master,顶替旧的master继续提供服务;

(2)实现读扩展。使用主从复制架构, 一般都是为了实现读扩展。Master主要实现写功能, Slave实现读的功能。

缺点:

(1)一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预;

此时需要经过如下操作(假设提升Slave1为Master):

  • 在Slave1上执slaveof no one命令提升Slave1为新的Master节点。
  • 在Slave1上配置为可写,这是因为大多数情况下,都将slave配置只读。
  • 告诉Client端(也就是连接Redis的程序)新的Master节点的连接地址。
  • 配置Slave2从新的Master进行数据复制。

(2)主节点的写能力受到单机的限制;

(3)主节点的存储能力受到单机的限制。

2.官方sentinel方案:

客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主redis是变化的,所以ip地址也是变化的。客户端程序如何感知当前主redis的ip地址和端口呢?redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name <master name>就能得到当前主redis的ip和port。

优点:

redis sentinel带有自动故障转移功能(failover),当一个主redis不能提供服务时,redis sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让它们使用新的主redis进行复制备份。

缺点:

客户端每次连接redis前,先向sentinel发送请求,获得主redis的ip和port,然后用返回的ip和port连接redis。每次操作redis至少需要发送两次连接请求,第一次请求sentinel,第二次请求redis。

3.VIP方案:

VIP方案是redis系统对外始终是同一ip地址,当redis主从进行故障转移时,需要做的是将VIP从之前的redis服务器漂移到现在新的主redis服务器上。

比如:当前redis系统中主redis的ip地址是172.16.2.4,那么VIP(172.16.2.250)指向172.16.2.4,客户端程序用VIP(172.16.2.250)地址连接redis,实际上连接的就是当前主redis,这样就避免了向sentinel发送请求。

优点:

当主redis宕机,进行故障转移时,192.168.56.102这台服务器上的redis提升为主,这时VIP(172.16.2.4)指向192.168.56.102,这样客户端程序不需要修改任何代码,连接的是192.168.56.102这台主redis。

注意:

VIP方案对配置环境有一定的要求,比如在腾讯云上要想搭建redis VIP方案的话,需要申请腾讯云HAVIP作为VIP,注意自己在内网私自定义的VIP是不生效的,申请HAVIP的文档详见:

https://cloud.tencent.com/document/product/215/20062

腾讯云控制台申请高可用虚拟IP
腾讯云控制台申请高可用虚拟IP

三、安装部署:

方案一:官网sentinel高可用方案

1.下载地址:http://download.redis.io/releases/,下载redis 3.2.8版本并编译安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz 
$ tar -zxvf redis-3.2.8.tar.gz 
$ cd redis-3.2.8 
$ make (如果没有安装gcc会报错,所以强烈建议在make之前先yum install gcc先安装gcc)

make报错如下:(make是用来编译的,从Makefile中读取指令,安装到指定的位置)

make[3]: gcc: Command not found

make[3]: *** [net.o] Error 127

make[3]: Leaving directory `/opt/redis-3.2.8/deps/hiredis'

make[2]: *** [hiredis] Error 2

make[2]: Leaving directory `/opt/redis-3.2.8/deps'

make[1]: [persist-settings] Error 2 (ignored)

CC adlist.o

/bin/sh: cc: command not found

make[1]: *** [adlist.o] Error 127

make[1]: Leaving directory `/opt/redis-3.2.8/src'

make: *** [all] Error 2

安装gcc:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install gcc

继续编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make

Make报错如下:

make[1]: Entering directory `/opt/redis-3.2.8/src'

CC adlist.o

In file included from adlist.c:34:0:

zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory

#include <jemalloc/jemalloc.h>

^

compilation terminated.

make[1]: *** [adlist.o] Error 1

make[1]: Leaving directory `/opt/redis-3.2.8/src'

make: *** [all] Error 2

重新编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make MALLOC=libc

编译成功!!!

2.环境配置:

(1)make完后 redis-3.2.8目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

复制redis相关命令到/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd src
$ cp redis-cli  redis-server  redis-sentinel   /usr/sbin/

$ cd src 
$ ./redis-server

(2)在redis目录下有redis.conf和sentinel.conf配置文件示例,将两个配置文件复制到/etc目录下(当然也可以在/etc/目录新建配置文件),然后修改配置文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 
cp  redis.conf  sentinel.conf  /etc/

(3)redis.conf 是一个默认的配置文件。我们可以根据需要修改配置文件。

  • 修改主redis-server(172.16.2.4)配置文件内容如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 不修改,使用默认端口
port  6379   
# 修改为0.0.0.0,可以从外部连接redis服务端  

bind  0.0.0.0
# 默认情况下redis运行在保护模式(这种模式下,访问不需要密码),但是这种模式只允许本地回路访问,这里改为no
protected-mode no
# 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no  
daemonize yes
# redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组
pidfile /var/run/redis.pid 
# 开启AOF持久化,默认是关闭的,RDB默认是开启的,但是AOF的优先级更高,启动时Redis 会优先载入 AOF 文件来恢复数据,与 RDB 相比,AOF 的实时性更好,因此已成为主流的持久化方案 
# 如果不希望丢掉任何一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。  
appendonly yes
  • 修改从redis-server(172.16.2.2和172.16.2.15)配置文件内容如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 不修改,使用默认端口
port  6379   
# 修改为0.0.0.0,可以从外部连接redis服务端  

bind  0.0.0.0
# 默认情况下redis运行在保护模式(这种模式下,访问不需要密码),但是这种模式只允许本地回路访问,这里改为no
protected-mode no
# 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no  
daemonize yes
# redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组
pidfile /var/run/redis.pid 
# 开启AOF持久化,默认是关闭的,RDB默认是开启的,但是AOF的优先级更高,启动时Redis 会优先载入 AOF 文件来恢复数据,与 RDB 相比,AOF 的实时性更好,因此已成为主流的持久化方案 
# 如果不希望丢掉任何一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。  
appendonly yes
# 从redis比主redis多这一行
,使用slaveof实现主从复制 

slaveof  172.16.2.4 6379  
  • redis要求的,kernel参数修改,重启生效
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 511

(4)启动redis-server服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ redis-server &        #加上‘&’号使redis以后台程序方式运行
或
$ redis-server /etc/redis.conf   #通过指定配置文件启动,在生产环境中建议使用这种方式启动服务

(5)停止:

使用客户端方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ redis-cli shutdown

因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kill -9 PID

(6)启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了,连接redis-server:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 本地连接redis-server,如果要连接远程redis,redis-cli -h host -p port -a password
$ redis-cli   
redis> set key1 value1 OK 
redis> get key1 "value1"

(7)查看主从状态:

通过redis-cli 进入主redis命令行,执行info replication查看当前主从配置,可以发现两个从节点信息,表明redis-server主从已经配置完毕。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis>  INFO replication
查看redis主从关系已经建立
查看redis主从关系已经建立
  • 可能遇到的问题:redis主从起不来
  • 解决方案:查看系统是否有之前配置过的redis.conf的旧文件,rm -rf删除之后,用redis-server指定配置文件重新启动服务

(8)搭建redis-sentinel系统:

redis-sentinel程序上面已经安装过了,这里只需要修改配置文件就可以了。修改/etc/sentinel.conf如下:

  • 三台sentinel服务器配置都一致
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  当前Sentinel服务运行的端口
port 26379
#  监控的master的名字叫做mymaster(自定义),地址为172.16.2.4:6379,行尾最后的一个2代表在sentinel集群中,多少个sentinel认为masters死了,才能真正认为该master不可用了 
sentinel monitor mymaster 172.16.2.4 6379 2     
#  每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30秒且没有回复,则判定不可达 
sentinel down-after-milliseconds mymaster 30000 
#  当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长  
sentinel parallel-syncs mymaster 1    
#  failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failover失败。默认180秒,即3分钟。
sentinel failover-timeout mymaster 18000      
#  如果Sentinel监控的主节点配置了密码,可以通过sentinel auth-pass配置通过添加主节点的密码,防止Sentinel节点无法对主节点进行监控。
#  例如:sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
sentinel auth-pass \ \ 
#  在故障转移期间,当一些警告级别的Sentinel事件发生(指重要事件,如主观下线,客观下线等)时,会触发对应路径的脚本,想脚本发送相应的事件参数。
#  例如:sentinel notification-script mymaster /var/redis/notify.sh
sentinel notification-script \ \ 
#  在故障转移结束后,触发应对路径的脚本,并向脚本发送故障转移结果的参数。
#  例如:sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
sentinel client-reconfig-script \ \ 
  • 常见问题:在172.16.2.4(主redis)上查看sentinel的信息,发现报错
查看sentinel服务报错
查看sentinel服务报错
  • 解决方案:修改/etc/sentinel.conf文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/sentinel.conf
#  关闭保护,改为no
protected-mode no
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  指定文件启动sentinel服务
redis-sentinel sentinel.conf  &
  • 验证:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h host -p port info sentinel

三个redis-sentinel服务启动完毕后,连接任意sentinel服务可以获知当前主redis服务信息,说明sentinel服务已经成功起来

查看sentinel服务已经启动
查看sentinel服务已经启动

(9)测试sentinel的failover故障切换功能:

  • 把主redis(172.16.2.4)停掉
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h 172.16.2.4 -p 6379 shutdown
  • 查看redis-sentinel的监控状态:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h 172.16.2.4 -p 26379 info sentinel
查看sentinel信息发现master已经切换为172.16.2.2
查看sentinel信息发现master已经切换为172.16.2.2
  • 发现172.16.2.2这台redis-server提升为主库:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h 172.16.2.2 -p 6379 info replication
在master上查看主从状态
在master上查看主从状态
  • 控制台也输出相关信息,表示主从切换成功。
控制台log,redis主从切换成功
控制台log,redis主从切换成功
  • 172.16.2.2切换成主之后,也可以执行写操作了。至此,redis的官方高可用sentinel方案已经搭建完成。
确认当前主可以执行写操作
确认当前主可以执行写操作

(10)客户端使用方式:

客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主redis是变化的,所以ip地址也是变化的。客户端程序如何感知当前主redis的ip地址和端口呢?redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name <master name>就能得到当前主redis的ip和port。

  • 连接到sentinel获取当前主redis的ip和端口(因为又执行了一次切换,这里的主已经切换到172.16.2.15,这里只是说明客户端的使用方式)
客户端程序连接方式
客户端程序连接方式

方案二:vip方案

1.方案说明

VIP方案是redis系统对外始终是同一ip地址,当redis主从进行故障转移时,需要做的是将VIP从之前的redis服务器漂移到现在新的主redis服务器上。

比如:当前redis系统中主redis的ip地址是172.16.2.4,那么VIP(172.16.2.250)指向172.16.2.4,客户端程序用VIP(172.16.2.250)地址连接redis,实际上连接的就是当前主redis,这样就避免了向sentinel发送请求。

  • 正常情况下VIP指向172.16.2.4
正常情况下VIP指向172.16.2.4
正常情况下VIP指向172.16.2.4
  • 故障情况下,VIP漂移指向172.16.2.2
  master故障情况下,VIP自动漂移指向172.16.2.2
master故障情况下,VIP自动漂移指向172.16.2.2

2.漂移VIP操作

那么现在的问题是,如何在进行redis故障转移时,将VIP漂移到新的主redis服务器上。

(1)在sentinel.conf配置文件设置要执行的vip漂移的脚本

使用sentinel.conf配置文件的有一个参数client-reconfig-script,这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  修改三个服务器的redis-sentinel配置文件/etc/sentinel.conf,增加下面一行。
vi /etc/sentinel.conf
sentinel client-reconfig-script mymaster   /opt/notify_mymaster.sh

(2)创建VIP漂移脚本(VIP用之前在腾讯云控制台上申请的VIP)

然后在/opt/目录下创建notify_mymaster.sh脚本文件,这个脚本做VIP漂移操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 777 notify_mymaster.sh  #赋予脚本执行权限

脚本内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#notify_mymaster.sh脚本内容
#!/bin/bash
MASTER_IP=$6  #第六个参数是新主redis的ip地址
LOCAL_IP='172.16.2.2'  #其他两个服务器上为172.16.2.4,172.16.2.15
VIP='172.16.2.250'
NETMASK='24'
INTERFACE='eth0'
if [ ${MASTER_IP} = ${LOCAL_IP} ];then   
   sudo /sbin/ip  addr  add ${VIP}/${NETMASK}  dev ${INTERFACE}  #将VIP绑定到该服务器上
   sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
   exit 0
else 
  sudo /sbin/ip  addr del  ${VIP}/${NETMASK}  dev ${INTERFACE}   #将VIP从该服务器上删除
  exit 0
fi
exit 1  #如果返回1,sentinel会一直执行这个脚本

(3)第一次需在主redis上手工设置VIP

只需要第一次手工在主redis上设置vip,现在当前主redis是172.16.2.2,需要手动绑定VIP到该服务器上。(注意强烈建议加sudo执行)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /sbin/ip  addr add 172.16.2.250/24 dev eth0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /sbin/arping -q   -c 3 -A 172.16.2.250 -I eth0

(4)然后,去另一个服务器上(172.16.2.15)通过VIP地址连接redis-server和redis-sentinel。从上面可以看到主redis是172.16.2.2

VIP成功绑定在master 172.16.2.2上
VIP成功绑定在master 172.16.2.2上

(5)验证:下面关闭这台主redis服务(172.16.2.2),看看VIP是否漂移到另一台服务器上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h 172.16.2.2 -p 6379 shutdown

通过查询sentinel发现172.16.2.15提升为主。

sentinel自动failover,将172.16.2.15提升为master
sentinel自动failover,将172.16.2.15提升为master

(6)通过访问VIP连接查看redis sentinel信息和redis-server主从关系,发现VIP确实指向了172.16.2.15。

通过VIP成功查看sentinel状态
通过VIP成功查看sentinel状态
通过VIP成功查看redis的状态
通过VIP成功查看redis的状态

四、总结:

通过上面的操作,使用redis主从 + 哨兵(sentinel)+ 漂移VIP的方案搭建了一个redis高可用系统,但这个系统保证的是单个redis实例的高可用,所以适合业务比较小的应用。如果业务比较大,并发量比较高,建议搭建redis集群,比如官方redis cluster,还有开源的codings集群,或者使用腾讯云PAAS层redis集群方案,文档说明见:https://cloud.tencent.com/document/product/239

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
ImportError: cannot import name ‘audio_ops‘ (TensorFlow)
tensorflow 报错: from tensorflow.python.framework import ops as tf_ops
狼啸风云
2020/12/21
8600
ImportError: cannot import name ‘audio_ops‘ (TensorFlow)
【快速解决】vscode安装Keras,tensorflow;解决from tensorflow.keras.models import Sequential环境配置不上怎么办?
命运之光
2024/03/20
2.1K0
【快速解决】vscode安装Keras,tensorflow;解决from tensorflow.keras.models import Sequential环境配置不上怎么办?
运行tensorboard报错:ValueError: Duplicate plugins for name projector
环境里安装了多个版本的tensorboard和tensorflow,按照提示卸载并重新安装:
JOYCE_Leo16
2024/03/19
4770
手把手教你运行一个五子棋模型AlphaZero_Gomoku
项目地址GitHub - junxiaosong/AlphaZero_Gomoku:Gomoku的AlphaZero算法的实现(也称为Gobang或Five in a Row)
洛墨-天染-依然
2022/05/10
2.9K1
『开发技巧』解决Python使用pandas读取xlsx文件报错“ImportError: Missing optional dependency ‘xlrd‘”的问题
笔者在使用Mac进行Python开发时使用pandas读取xlsx文件遇到这个错误:
小宋是呢
2021/09/10
5.9K0
[754]ImportError: DLL load failed: 找不到指定的模块
在tensorflow的学习中,想使用tensorflow-gpu版的学习,充分利用计算机。但是跟网上很多博主的方法安装gpu,cuda是安装成功了,但是却一直报以下一个错误。
周小董
2020/02/14
15K0
[754]ImportError: DLL load failed: 找不到指定的模块
import tensorflow 报错 as tf ImportError: DLL load failed
安装tensorflow时安装了好几次才成功,装着装着就断了,目前还没搞清楚原因, 不过最终还是成功了,这个方法是可行的 ,另外一台机子win7系统一次pip就成功了
诡途
2022/05/09
1.1K0
import tensorflow 报错 as tf ImportError: DLL load failed
tensorflow的安装
本人Mac,但是不是nividna的显卡,所以装不了g pu版本的,虽然自己电脑也带g pu。
bye
2020/10/29
2.3K0
MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
本来按照这个MLFlow教程(MLflow系列1:MLflow入门教程(Python)),找台机器跑起来没啥问题; 不过,看到项目的github有Dockerfile那必须上啊! 然后就被各类报错虐了一下午。。
悟乙己
2021/12/07
2.1K0
MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip impor...
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple python3设置默认源时报错 Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import main
马哥Python
2019/09/29
2.9K0
TensorFlow的安装
在本篇文章中,我们将会介绍TensorFlow的安装,TensorFlow是Google公司在2015年11月9日开源的一个深度学习框架。
夜雨飘零
2020/05/06
1.8K0
使用Anaconda搭建TensorFlow-GPU环境
前言:      对于深度学习来说,各种框架torch,caffe,keras,mxnet,tensorflow,pandapanda环境要求各一,如果我们在一台服务器上部署了较多的这样的框架,那么各种莫名的冲突 会一直伴随着你,吃过很多次亏之后,慢慢的接触了Anaconda,真的是很爽的一个功能,来管理环境配置。我们进行tensorflow安装的时候,还是使用Anaconda,鉴于国内墙太高 ,我们使用了Tsinghua的镜像文件,清华大学的Anaconda介绍地址见:https://mirror.tun
Gxjun
2018/03/27
4.6K0
Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
ImportError: cannot import name ‘build_info’
用户1148525
2019/05/26
4.6K0
Python升级tensorflow2.x版本相关问题:No module named ‘tensorflow.contrib‘ 问题解决
tensorflow2.x 版本舍去了 contrib 相关功能,相关功能的使用可以通过安装 tf_slim 来引用。
小蓝枣
2023/02/26
1.8K0
Python升级tensorflow2.x版本相关问题:No module named ‘tensorflow.contrib‘ 问题解决
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
李林 编译整理 量子位 报道 | 公众号 QbitAI Google今天推出了一个语音指令数据集,其中包含30个词的65000条语音,wav格式,每条长度为一秒钟。 这30个词都是英文的,基本是yes
量子位
2018/03/27
3.4K0
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
pycharm怎么配置tensorflow环境_python tensorflow安装
在操作之前先安装好python环境,我是安装的Anaconda,Anaconda下载安装教程可参考:https://blog.csdn.net/Chen_Meng_/article/details/80375884,接下来进入正题。
全栈程序员站长
2022/09/28
1.6K0
pycharm怎么配置tensorflow环境_python tensorflow安装
TensorFlow学习笔记:1、TensorFlow快速下载与安装
本文介绍了如何在CentOS系统上安装TensorFlow。首先介绍了TensorFlow的基本概念,然后提供了详细的安装步骤。最后,通过验证安装来确认是否成功安装。在文章中还提到了一些常见的安装问题以及解决方法。
程裕强
2018/01/02
1.2K0
Python基础学习之pip包管理器介绍与实践
描述: 在Python中默认的包、模块管理工具是 pip, 使得其可以对 Python 包的查找、下载、安装、卸载的功能。
全栈工程师修炼指南
2022/09/29
9940
Python基础学习之pip包管理器介绍与实践
Crontab和sudo中无法使用TensorFlow ImportError libcublas.so.9.0
最近因为特殊的原因重新安装了python,但是引发了一个很严重的问题——TensorFlow不好使了。
用户1154259
2019/01/03
1.6K0
win10 tensorflow笔记3 MNIST机器学习进阶
1训练 建立py文件(我这里是shuzi.py) from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf mnist = input_data.read_data_sets('./', one_hot=True) #MNIST数据集所在路径 x = tf.placeholder(tf.float32, [None, 784]) y_ = tf.placeholder(tf.float32,
我是木木酱呀
2019/04/28
3680
win10 tensorflow笔记3 MNIST机器学习进阶
推荐阅读
相关推荐
ImportError: cannot import name ‘audio_ops‘ (TensorFlow)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验