环境:centos6.6
Redis版本:redis-3.0.4.tar.gz
安装目录:/usr/local/redis/
用户:root
cd /usr/local/src/
cp /install_software/redis-3.0.4.tar.gz ./
mkdir /usr/local/redis
cd redis-3.0.4
make prefix=/usr/local/redis/ install //使用PREFIX指定安装目录
编译安装完成后,在/usr/local/redis目录下有一个bin目录,里面就是redis的命令脚本
安装完成后,Redis的启动脚本为:/usr/local/src/redis-3.0.4/utils/ redis_init_script
将启动脚本复制到/etc/rc.d/init.d/目录下,并命名为redis:
cp redis_init_script /etc/rc.d/init.d/redis
vi /etc/rc.d/init.d/redis
查看以上redis服务脚本,做如下几个修改的准备:
(1) 在脚本的第一行后面添加一行内容如下:
#chkconfig: 2345 80 90
(如果不添加上面的内容,在注册服务时会提示:service redis does not support chkconfig)
(2) REDISPORT端口改为6379;(注意,端口名将与下面的配置文件名有关)
(3) EXEC=/usr/local/bin/redis-server 改为
EXEC=/application/redis/bin/redis-server
(4) CLIEXEC=/usr/local/bin/redis-cli改为CLIEXEC=application/redis/bin/redis-cli
(5) 配置文件设置:
创建redis配置文件目录
# mkdir /application/redis/conf
复制redis配置文件/usr/local/src/redis-3.0.4/redis.conf到/application/redis/conf目录并按端口号重命名为6379.conf
#cp /usr/local/src/redis3.0/redis.conf /usr/local/redis/conf/6379.conf
做了以上准备后,再对CONF属性作如下调整:
CONF=”/etc/redis/${REDISPORT}.conf” 改为
CONF=”/application/redis/conf/${REDISPORT}.conf”
(6) 更改redis开启的命令,以后台运行的方式执行:
$EXEC $CONF & // “&”作用是将服务转到后面运行
修改的/etc/rc.d/init.d/redis脚本内容为:
redis启动脚本中指定的运行服务配置文件为/usr/local/redis/conf/6379.conf
以上配置操作完成后,便可将Redis注册成为服务:
# chkconfig --add redis
防火墙中打开对应的端口
# vi /etc/sysconfig/iptables
添加:
# Redis port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT //redis默认端口为6379
重启防火墙:
# service iptables restart
vi /application/redis/conf/6379.conf
参数 | 值 | 说明 |
---|---|---|
daemonize | yes | 使Redis以守护进程模式运行 |
pidfile | /var/run/redis_port.pid | 设置Redis的PID文件位置 |
port | 端口号 | 设置Redis的监听端口号 |
dir | /var/redis/端口号 | 设置持久化文件的存放位置需要mkdir该路径 |
bind | Ip地址 | By default Redis listens for connections from all the network interfaces |
#service redis start
redis-server --port 6379
redis-server /etc/redis/6379.conf //指定配置文件启动
客户端命令连接之后,输入ping,返回PONG,说明Redis服务正常运行
service redis stop
考虑Redis可能在执行内存数据持久化到硬盘中,强行停止Redis可能导致数据丢失,正确方式停止Redis使用发送SHUTDOWN命令,
redis-cli SHUTDOWN
redis-cli -h ip -p 6379 shutdown
redis先断开所有客户端链接,然后根据配置执行持久化,最后完成退出
使用kill pid 也可以正常结束redis进程,效果等同shutdown。
ps -ef | grep redis
kill PID
至此,Redis服务全部安装,测试完成
官方集群安装过程:http://doc.redisfans.com/topic/cluster-tutorial.html
要让Redis3.0集群正常工作至少需要3个Master节点,要想实现高可用,每个Master节点要配备至少1个Slave节点。本例只做两主两从,进行如下的集群实施规划:
使用4台服务器(物理机或虚拟机)部署2个Master +2个Slave;
主机名 | IP | 服务端口 | 集群端口 | 主/从 |
---|---|---|---|---|
Master_1 | 192.168.230.131 | 6379 | 16379 | Master |
Master_2 | 192.168.230.136 | 6379 | 16379 | Master |
Slave_1 | 192.168.230.137 | 6379 | 16379 | Slave |
Slave_2 | 192.168.230.138 | 6379 | 16379 | Slave |
按规划:防火墙中打开相应的端口
192.168.1.131
-A INPUT -m state –state NEW -m tcp -p tcp–dport 6379 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 16379 -j ACCEPT
192.168.1.136
-A INPUT -m state –state NEW -m tcp -p tcp–dport 6379 -j ACCEPT
-A INPUT -m state –stateNEW -m tcp -p tcp –dport 16379 -j ACCEPT
192.168.1.137
-A INPUT -m state –state NEW -m tcp -p tcp–dport 6379 -j ACCEPT
-A INPUT -m state –stateNEW -m tcp -p tcp –dport 16379 -j ACCEPT
192.168.1.138
-A INPUT -m state –state NEW -m tcp -p tcp–dport 6379 -j ACCEPT
-A INPUT -m state –stateNEW -m tcp -p tcp –dport 16379 -j ACCEPT
安装Redis过程省略
复制redis配置文件
/usr/local/src/redis-3.0.4/redis.conf
到
/application/redis/conf目录并按端口号重命名为6379.conf
cp /usr/local/src/redis3.0/redis.conf /usr/local/redis/conf/6379.conf
创建集群配置目录,并拷贝redid.conf配置文件到各节点配置目录:
原始配置文件
cp /usr/local/src/redis-3.0.4/redis.conf /usr/local/redis3/cluster/6379/redis-6379.conf
scp
root@192.168.230.131:/usr/local/redis/cluster/6379/redis-6379.conf
cluster/6379/redis-6379.conf
192.168.230.131
# mkdir -p /usr/local/redis/cluster/6379
# cp /usr/local/redis/conf/6379.conf /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.136
# mkdir -p /usr/local/redis/cluster/6379
# cp /usr/local/redis/conf/6379.conf /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.137
# mkdir -p /usr/local/redis/cluster/6379
# cp /usr/local/redis/conf/6379.conf /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.138
# mkdir -p /usr/local/redis/cluster/6379
# cp /usr/local/redis/conf/6379.conf /usr/local/redis/cluster/6379/redis-6379.conf
6个节点的集群配置文件cluster/redis-6379.conf配置文件内容,注意修改下红色字体部分的内容即可,其他都相同:
配置选项 | 选项值 | 说明 |
---|---|---|
daemonize | yes | 是否作为守护进程运行 |
pidfile | /var/run/redis-6379.pid | 如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid |
port | 6379 | 监听端口,默认为6379,注意:集群通讯端口值默认为此端口值+10000,如16379 |
bind | Ip地址 | By default Redis listens for connections from all the network interfaces, available on the server |
dir | /usr/local/redis/persistence/6379 | 节点数据持久化存放目录(建议配置) |
databases | 1 | 可用数据库数,默认值为16,默认数据库存储在DB 0号ID库中,无特殊需求,建议仅设置一个数据库databases 1 |
cluster-enabled | yes | 打开redis集群 |
cluster-config-file | /usr/local/redis/cluster/6379/nodes.conf | 集群配置文件(启动自动生成),不用人为干涉 |
cluster-node-timeout | 15000 | 节点互连超时时间。毫秒 |
cluster-migration-barrier | 1 | 数据迁移的副本临界数,这个参数表示的是,一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来给另一个没有任何从节点的主节点。 |
cluster-require-full-coverage | yes | 如果某一些key space没有被集群中任何节点覆盖,集群将停止接受写入 |
appendonly | yes | 启用aof持久化方式,因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no |
使用集群配置文件启动4个节点
192.168.230.131
redis-server /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.136
redis-server /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.137
redis-server /usr/local/redis/cluster/6379/redis-6379.conf
192.168.230.138
redis-server /usr/local/redis/cluster/6379/redis-6379.conf
启动之后用PS命令查看实例启动情况:
注意:启动完毕后,4个Redis实例尚未构成集群。
安装ruby和rubygems(注意:需要ruby的版本在1.8.7 以上)
# yum install ruby rubygems
gem 安装redis ruby 接口:
# gem install redis
(只需要在其中一个节点上执行一次则可)
#cd /usr/local/src/redis-3.0.4/src/
#cp redis-trib.rb /usr/local/redis/bin/redis-trib
#redis-trib create –-replicas 1 192.168.230.131:6379 192.168.230.136:6379
192.168.230.137:6379 192.168.230.138:6379
本例采取了1台虚拟机开启3个实例,2台开启6个实例进行集群
redis-server /usr/local/redis/cluster/6379/redis-6379.conf
redis-server /usr/local/redis/cluster/6380/redis-6380.conf
redis-server /usr/local/redis/cluster/6381/redis-6381.conf
redis-trib create –replicas 1 192.168.230.131:6379 192.168.230.131:6380 192.168.230.131:6381 192.168.230.136:6379 192.168.230.136:6380 192.168.230.136:6381
如报错:
Creating cluster
Connecting to node 192.168.230.131:6379: OK
[ERR] Node 192.168.230.131:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.错误提示已经有数据了。
将persistence/6379,persistence/6380,persistence/6381目录下的appendonly.aof持久化文件删掉。
将cluster/6379,/cluster/6380,/cluster/6381目录下生成的nodes-6379.conf,nodes-6380.conf,
nodes-6381.conf文件删掉。
重新启动服务。
(输入yes 并按下回车确认之后,集群就会将配置应用到各个节点,并连接起(join)各个节点,也就是让各个节点开始互相通讯)
集群创建过程说明:
1. 给定redis-trib 程序的命令是create,这表示我们希望创建一个新的集群;
2. 这里的–replicas 1表示每个主节点下有一个从节点;
3. 之后跟着的其它参数则是实例的地址列表,程序使用这些地址所指示的实例来创建新集群;
总的来说,以上命令的意思就是让redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
接着,redis-trib 会打印出一份预想中的配置给你看,如果你觉得没问题的话(注意核对主从关系是否是你想要的),就可以输入yes ,redis-trib 就会将这份配置应用到集群当中。