在Centos7下源码安装配置Redis
1.安装前准备开发环境
安装编译源码所需的工具和库:yum install gcc gcc-c++ ncurses-devel perl
安装cmake:yum -y install make gcc gcc-c++ ncurses-devel
安装ssl功能需要openssl库:yum -y install openssl-devel
安装压缩包:yum -y install zlib zlib-devel
JDK:jdk-8u92-linux-x64.rpm
Redis:jdk-8u92-linux-x64.rp
系统信息:
CentOS Linux release 7.2.1511 (Core)
Kernel: Linux 3.10.0-327.el7.x86_64
2.Redis安装过程
2.1解压Redis文件
进入到redis文件目录下,输入tar –zxvf redis-3.2.1.tar.gz解压文件。
编译成功。目录在在redis-3.2.1目录下输入make进行编译。
2.2编译安装文件
输入cd /usr/local目录下,输入mkdir redis创建文件夹。
输入cd /var/ftp/pub/redis-3.2.1目录下,输入输入make&&makeinstall进行编译安装。
输入whereis redis查看安装文件的路径。
输入cd /usr/local/redis/bin进入到目录下,查看文件。
Redis-benchmark
Redis-check-aof
Redis-check-rdb
Redis-cli
Redis-sentinel –>redis-server
Redis-server
2.3拷贝文件
进入到redis-3.2.1解压的目录下,输入
cp /var/ftp/pub/redis-3.2.1/redis.conf/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest-cluster/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest-sentinel/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest/usr/local/redis/bin
cd /usr/local/redis/bin
将文件到问道/usr/local/redis/bin目录下。
2.4运行Redis
2.5测试Redis
新打开一个窗口,进入到cd /usr/local/redis/bin目录下,输入./redis-cli,运行客户端,进行测试:
127.0.0.1:6379> set username andrew
OK
127.0.0.1:6379> set password 123456
OK
127.0.0.1:6379> get username
"andrew"
127.0.0.1:6379> get password
"123456"
127.0.0.1:6379>
如果想退出客户端,输入exit。
3.将Redis的端口添加到Firewall
在Firewall中添加6379端口,firewall-cmd –permanent –add-port=6379/tcp,然后在输入firewall-cmd–reload,
重载成功过后,在输入firewall-cmd –list-all,可显示添加的6379端口。
4.设置自定义开机系统服务
CentOS 7 使用systemd替换了SysV。Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,
而且够在进程启动过程中更有效地引导加载服务。
systemd的特性有:
支持并行化任务
同时采用socket式与D-Bus总线式激活服务;
按需启动守护进程(daemon);
利用 Linux 的 cgroups 监视进程;
支持快照和系统恢复;
维护挂载点和自动挂载点;
各服务间基于依赖关系进行精密控制。
检视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务。详见man 1 systemctl。
输入vim /usr/lib/systemd/system/redis.service进入文件编辑。
将以下内容拷贝到nginx.service文件中,然后保存。
[Unit]
Description=Redis daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server/usr/local/redis/bin/redis.conf
ExecReload=/usr/local/redis/bin/redis-server-s reload
ExecStop=/usr/local/redis/bin/redis-server-s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
如果需要更详细的配置,请参考:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
使用单元
一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。详情参阅 man 5 systemd.unit。
使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如 sshd.service)。但是有些单元可以在systemctl中使用简写方式。
如果无扩展名,systemctl 默认把扩展名当作 .service。例如 netcfg 和 netcfg.service 是等价的。
挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount。
设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device。
注: 有一些单元的名称包含一个 @ 标记, (e.g. name@string.service): 这意味着它是模板单元name@.service 的一个实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个参数传给模板单元,模板单元会使用这个传入的参数代替模板中的 %I 指示符。在实例化之前,systemd 会先检查 name@string.suffix 文件是否存在(如果存在,应该就是直接使用这个文件,而不是模板实例化了)。大多数情况下,包换 @ 标记都意味着这个文件是模板。如果一个模板单元没有实例化就调用,该调用会返回失败,因为模板单元中的 %I 指示符没有被替换。
例如:systemctl start <单元>
编写单元文件
systemd单元文件的语法来源于 XDG桌面入口配置文件.desktop文件,最初的源头则是MicrosoftWindows的.ini文件。单元文件可以从两个地方加载,优先级从低到高分别是:
/usr/lib/systemd/system/: 软件包安装的单元
/etc/systemd/system/: 系统管理员安装的单元
注意: 当systemd运行在用户模式下时,使用的加载路径是完全不同的。
处理依赖关系
使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元A要求单元B在A启动之前运行。在此情况下,向单元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依赖关系是可选的,可添加 Wants=B 和 After=B。请注意 Wants= 和 Requires= 并不意味着 After=,即如果 After= 选项没有制定,这两个单元将被并行启动。
依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。
服务类型
编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。
Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName出现在DBus系统总线上时,systemd认为服务就绪。
Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。
type的更多解释可以参考systemd.service(5)。
4.2设置开机服务
输入systemctl start redis启动redis服务
在输入systemctl enable redis设置redis服务为开机启动服务
最后输入systemctl status redis查看redis的运行状态。
4.2停止开机服务
输入systemctl disable redis停止开机启动redis服务
输入systemctlstop redis停止redis服务
输入systemctl status redis查看redis的运行状态。
5.在客户端上运行Redis
#redis-cli -h 127.0.0.1 -p 6379
localhost:6379>
localhost:6379> PING
PONG
localhost:6379> set databaseName redis
OK
localhost:6379> keys *
1) "databaseName"
#redis-cli -h 127.0.0.1 -p 6379 -a"mypass"
以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
6.附录
6.1Redis.conf配置项详解
#是否作为守护进程运行
daemonize yes
#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
pidfile redis.pid
#绑定主机IP,默认值为127.0.0.1
#bind 127.0.0.1
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接,默认为300(秒)
timeout 300
#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
loglevel verbose
#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志
logfile stdout
#可用数据库数,默认值为16,默认数据库为0
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#本地数据库存放路径,默认值为 ./
dir /usr/local/redis/var/
########### Replication#####################
#Redis的复制配置
# slaveof <masterip><masterport> 当本机为从服务时,设置主服务的IP及端口
# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码
#连接密码
# requirepass foobared
#最大客户端连接数,默认不限制
# maxclients 128
#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。
# maxmemory <bytes>
#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendonly no
#更新日志文件名,默认值为appendonly.aof
#appendfilename
#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能,默认值为no
vm-enabled no
# vm-enabled yes
#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file logs/redis.swap
#将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
注意:Redis官方文档对VM的使用提出了一些建议:
当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.
2. 调整系统内核参数
如果内存情况比较紧张的话,需要设定内核参数:
echo 1 > /proc/sys/vm/overcommit_memory
这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)
四. 运行 Redis
1. 运行服务
/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis.conf
即可在后台启动redis服务,确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如:
/usr/local/redis/bin/redis-cli set foo bar
OK
/usr/local/redis/bin/redis-cli get foo
bar
2. 关闭服务
redis-cli shutdown
如果端口变化可以指定端口:
redis-cli -p 6380 shutdown
3. 保存/备份
数据备份可以通过定期备份该文件实现。
因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:
redis-cli save 或者 redis-cli-p 6380 save(指定端口)
注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。
执行redis-benchmark命令时也会将内存数据写入硬盘。
4. 同步机制
redis实现的同步机制相对简单,缺少同步机制常见的checkpoint和校验机制。
在运行时,如果master -> slave同步请求转发被丢弃, slave将无法恢复该请求的相关信息,直到slave重启时从master全量加载数据时才能修复。因此,建议使用redis尽量利用其 key/value和value支持多种类型的特性,存储一些相对不重要的数据。
在Centos7下源码安装配置Redis相关推荐
- 阿里云服务器——centos7下源码安装tomcat9
阿里云服务器--centos7下源码安装tomcat9 (第一次写文章,俺会努力的) 首先进入src文件夹: cd /usr/local/src 使用wget命令下载tomcat : wget htt ...
- CentOS7 下源码安装MPlayer播放器
最近学习了build源码安装软件,老师布置的习题,用所学过的知识安装mplayer播放器.通过上网我了解到在linux系统下,mplayer播放器十分强大好用.但是,在安装的过程中遇到了很多问题,比如 ...
- linux7/centos7下源码安装nginx-1.16.1详解
以下操作因为系统是最小安装,所以会需要安装的依赖和命令较多,实验环境,centos7ip:192.168.11.123 1. 下载或上传nginx安装包 我这边使用wget命令直接在centos7上下 ...
- centos7下源码安装mysql5.6_Centos7 源码安装mysql5.6
mysql下载 谷歌 mysql->community->mysql community server->mysql community server 5.6->Select ...
- Centos7 下源码安装nginx
一.安装必要的库: (nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库) 选定/usr/local/nginx 为安装目录 ,文中版 ...
- centos7源码安装mysql报错_CentOS7 下源码安装MySQL数据库 8.0.11
本文主要向大家介绍了CentOS7 下源码安装MySQL数据库 8.0.11,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. CentOS7 下源码安装MySQL 8.0.11 系 ...
- CentOS7下源码编译安装MySQL5.6.4
CentOS7下源码编译安装MySQL5.6.4 写这篇博客的主要原因是:请看上一篇博客:CentOS7下更改MySQL5.6.4默认的数据存储位置.对,当初通过rpm安装的mysql5.6.4,一切 ...
- 在CentOS7上源码安装MongoDB 3.2.7
转载http://www.jianshu.com/p/132c9b2766e0 在CentOS7上源码安装MongoDB 3.2.7 字数1780 阅读100 评论0 喜欢0 环境准备 [root@s ...
- linux系统下源码安装mysql5.6数据库
linux系统下源码安装mysql5.6数据库 下载mysql数据库相关软件包(百度云盘:http://pan.baidu.com/s/1bnL31c7) 从mysql 5.5版本开始,mysql源码 ...
最新文章
- 在多变环境中长期定位和建图的通用框架
- linux 统一设备模型 pci,Linux设备驱动模型摘抄
- 成功解决win10下dos中运行tensorboard --logdir=logs和调用events.out.tfevents一闪而过的问题
- python数据分析考点_零基础30天入门python数据分析|知识点整理
- Java并发教程–原子性和竞争条件
- 不懂指针类型,7个例子给你讲明白
- this java_Java this关键字详解
- css3 呼吸的莲花_CSS3制作莲花盛开动画
- Dapper Sqlpara where in
- JavaScript BOM基础
- VS 2003/VS 2005 迅雷资源下载网址
- python监控错误语句_Sentry错误日志监控使用方法解析
- NJUPT南邮 | 离散数学_实验一
- 微信小程序的事件冒泡和捕获
- python调整excel列宽_python - 有没有一种方法可以使用pandas.ExcelWriter自动调整Excel列的宽度? - 堆栈内存溢出...
- 微软Xbox击败PS4 主导“黑五”游戏机市场
- 利用串口解析AIS接收机数据
- EfficientDet-BiFPN
- css打印适应纸张_css控制打印样式
- Halcon学习---深度学习篇segment2~训练模型。
热门文章
- mysql复制不了的文字怎么办_网页上的文字不能复制怎么办?
- 头部 CT 图像三维重建
- rk3288 android6,RK3288 的 Android 7.1.2 来了!
- 目前最精准的Android开源计步器
- c语言通过epoll来实现http协议的web服务器
- aptX技术完美解决无线音频的延时问题
- oracle中取月初,月末,季初,季末及年初,年末时间
- Jedis分析一-Pipeline is currently not supported for JedisClusterConnection.
- MAC下 生成安卓签名证书.keystore文件【详细】
- 印章与印鉴的区别_篆刻与印章有区别