生产环境部署单台redis

生产环境部署redis方案
1.腾讯云有redis主从
2.自己部署redis也很简单

(1)redis使用编译安装方式,所以需要安装编译基本组件
# yum install gcc cpp glibc glibc-devel gcc-c++

(2)redis依赖jemalloc,所以先安装此组件
# wget http://www.canonware.com/download/jemalloc/jemalloc-4.2.1.tar.bz2
后续读者可以查看此链接获取更新版本jemalloc,http://www.canonware.com/download/jemalloc/
# tar -xf jemalloc-4.2.1.tar.bz2
cd jemalloc-4.2.1
# ./configure --prefix=/usr/local/
# make
# make install

(3)下载安装redis-server
# cd /usr/local/src/
# wget http://download.redis.io/redis-stable.tar.gz
后续读者可以查看此链接获取更新版本redis,http://download.redis.io/或者从官网地址开始查找下载地址
# tar -xf redis-stable.tar.gz
# cd redis-stable
# make
# make install
# mkdir /etc/redis
# cp /usr/local/src/redis-stable/redis.conf /etc/redis

先尝试前台启动redis,查看其日志输出
/usr/local/bin/redis-server /etc/redis/redis.conf

例如本文作者遇到了三个内核参数相关的警告
(1)WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
(2)WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.
(3)WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never> /sys/kernel/mm/transparent_hugepage/enabled‘ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

解决办法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
sysctl -w net.core.somaxconn = 65536
sysctl -w vm.overcommit_memory = 1
读者可以把上述设置分别加入/etc/rc.local和/etc/sysctl.conf文件中

此时启动redis无任何警告.可以修改配置文件/etc/redis/redis.conf
daemonize no => daemonize yes
redis默认只监听本机IP:127.0.0.1.所以,如果允许redis可以由内网其他主机访问,可以在bind命令后添加本主机的内网IP即可.注意:redis由程序访问使用,通常是不会监听公网IP的.

登录访问redis-server
redis-cli:可以直接访问本主机的redis-server
redis-cli -h redis-server_内网IP -p 6379:其他内网主机访问

127.0.0.1:6379> set name Tom
OK
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> quit
测试可正常使用

(4)接下来我们要为redis设置一个密码
第一种情景:可以重启redis的情景.当redis重新部署
vim /etc/redis/redis.conf
# requirepass foobared =>
requirepass YOUR_PASSWORD
[随机密码生成命令: openssl rand -base64 16]
然后修改redis.conf仅root可读写: chmod 600 /etc/redis/redis.conf
最后kill掉redis进程再启动
kill -9 `pgrep redis` && /usr/local/bin/redis-server /etc/redis/redis.conf

然后再次登录redis.需要输入密码验证通过后才能访问数据
# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
未经授权的登录是不能访问数据的
127.0.0.1:6379> auth 71840de8c369958
OK
127.0.0.1:6379> keys *
1) "name"

也可以在登录直接输入密码
# redis-cli -h 127.0.0.1 -p 6379 -a 71840de8c369958
127.0.0.1:6379> keys *
1) "name"

第二种情景:不能重启redis.当redis已经在生产环境中运行了,不能重启redis时可以如下操作:
# redis-cli
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
此时requirepass对应的值是空的""
127.0.0.1:6379> config set requirepass 71840de8c369958
OK
现在我们为redis设置了密码
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
获取keys和requirepass都遭到拒绝
127.0.0.1:6379> auth 71840de8c369958
OK
使用密码进行认证,返回OK表示通过认证,现在执行任何操作都是被允许的.
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "71840de8c369958"
127.0.0.1:6379> keys *
1) "name"

最后在redis.conf配置文件中添加requirepass 71840de8c369958.
这样重启redis后,密码同样生效.然后修改redis.conf仅root可访问
# chmod 600 /etc/redis/redis.conf

安装过程中可能会遇到的问题以及解决办法
1、不能编译没有GCC 编译工具
安装报错:
问题1:make时可能会报如下错误
cc -c -std=c99 -pedantic -O2 -Wall -W   -g -rdynamic -ggdb   adlist.c
make: cc:命令未找到
make: *** [adlist.o] 错误 127

解决方法:安装gcc
命令如下:yum install gcc

2、make时可能会报如下错误:
collect2: ld returned 1 exit status
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/usr/local/redis/src‘
make: *** [all] Error 2

解决办法:编辑src/.make-settings里的OPT,改为OPT=-O2 -march=i686

3、提示找不到jemalloc
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

解决办法: 安装jemalloc,请参考前文

4、make时可能会报如下错误:
cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
cc: error: ../deps/lua/src/liblua.a: No such file or directory
cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
make: *** [redis-server] Error 1

分别进入redis下的deps下的hiredis、lua运行make
注意:jemalloc下可能要先运行./configure,然后make
回到src目录运行make.结果还是报cc: error: ../deps/lua/src/liblua.a: No such file or directory

这下子我把redis的解压包删除掉:rm -rf redis-stable
重新解压,进入redis-stable;make还真没报错了。

参考博客文章如下
http://blog.csdn.net/steve1018/article/details/26737277
http://blog.csdn.net/jy0902/article/details/19248299
http://blog.csdn.net/lxpbs8851/article/details/8136126

后续可以部署redis主从集群

时间: 2024-11-08 17:00:15

生产环境部署单台redis的相关文章

【原创】大数据基础之Airflow(2)生产环境部署airflow研究

一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在scheduler的dags目录变动dag文件来提交流程 官方分布式部署方案 多个webserver 多个worker CeleryExecutor(依赖redis或rabbitmq) MesosExecutor(依赖mesos) 第三方开源方案ASFC 针对scheduler单点问题,有第三方方案:ht

生产环境部署squid服务

网络拓扑 该实验使用虚拟机模拟搭建,准备开启2台虚拟机,客户端用本记代替. 1.Squid服务器使用2块网卡.如下图显示: 2.Web服务器与squid服务器配置在同一个网段即可.如下图显示: 3.客户端IP与squid服务器网卡1是在同一网段上即可.如下图显示: 4.查看squid服务器上的eth0和eth1网卡ip地址 5.查看web服务器的ip地址 6.先测试客户端能否ping通squid服务器的网卡1. 7.测试客户端能否ping通web服务器,ping不通正常. 8.安装squid软件

生产环境部署容器的五大挑战及应对之策

Docker容器使应用程序开发变得更容易,但在生产中部署容器可能会很难. 环境复杂性.生态系统易变性.跨不同分布式基础架构的部署...... 本文将为你解析生产环境部署容器的五大挑战及应对之策. 软件开发人员通常只关注在特定基础架构上运行的单个应用程序.应用程序堆栈或工作负载.然而,在生产环境中,一组不同的应用程序常需在各种技术(例如Java,LAMP等)上运行,而这些技术又需在本地.云上或二者结合的异构基础设施上部署.这给生产环境中容器化应用程序的运行带来了一些挑战: 控制高度密集.快速变化的

Vue生产环境部署

前面的话 开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱.生产时,这些警告语句却没有用,反而会增加载荷量.再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的.本文将详细介绍Vue生产环境部署 生产环境 如果用 Vue 完整独立版本 (直接用 <script> 元素引入 Vue),生产时应该用精简版本 (vue.min.js) 如果用 Webpack 或 Browserify 类似的打包工具时,生产状态会在 Vue 源码中由 process.env.NODE_ENV 决定,

HyperLedger Fabric 1.2 kafka生产环境部署(11.1)

11.1 Kafka模式简介       上一章介绍的Solo模式只存在一个排序(orderer)服务,是一种中心化结构,一旦排序(orderer)服务出现了问题,整个区块链网络将会崩溃,为了能在正式环境中稳定运行,需要对排序(orderer)服务采用集群方式,Hyperledger Fabric采用kafka方式实现排序(orderer)服务的集群,kafka模块被认为是半中心化结构.       顺便提一下,去中心化的BFT(拜占庭容错)排序(orderer)服务集群方式目前还在开发,还没有

Django + Uwsgi + Nginx 的生产环境部署

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

奉上SCCM生产环境部署Error Logs

奉上SCCM生产环境部署Error Logs SCCM生产环境部署报错日志,供大家查看,如有此类问题,可共同探讨,附件为日志查看器及相关日志.

单台 redis和多台 redis tomcat配置session共享

单台redis: http://www.roncoo.com/article/detail/126625 多台redis http://blog.csdn.net/u010158267/article/details/51285296

storm生产环境部署问题

由于在正式生产环境上部署集群防火墙是不能关闭的,所以要帮storm中用到的端口在iptables中添加规则 是2.6的内核这样加: vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport     6700     -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport     6701     -j ACCEPT -A INPU