文章目录
  1. 1. 拷贝文件配置并修改
  2. 2. 完成conf关联的修改
  3. 3. redis自启动脚本修改
    1. 3.1. 修改6379实例配置
    2. 3.2. 增加6380实例配置
    3. 3.3. 更新自启动
  4. 4. 验证
  5. 5. 问题
  6. 6. 参考

apt-get install redis-server安装redis后,默认是单点redis,为了研究redis集群,决定在单机上配置多个redis实例。
所谓redis实例,就是指多个redis进程,它们分别监听多个端口,单独都可以提供服务。

拷贝文件配置并修改

安装好redis之后,默认会在/etc/redis下存放2个配置文件:redis-server.conf、sentinel.conf,分别是redis服务端配置和redis哨兵配置。
使用已经存在的6379端口示例配置,拷贝一份新的文件

1
2
3
4
5
6
7
8
9
10
11
12
user@ubuntu:/etc/redis$ sudo cp redis.conf 6380.conf
vi 6380.conf
#修改pidfile
pidfile /var/run/redis/redis-6380.pid
#修改port
port 6380
#修改bind (O)
bind 0.0.0.0
#修改logfile
logfile /var/log/redis/redis-6380.log
#修改dump file name
dbfilename dump-6380.rdb

最后,将默认的redis-server.conf也修改为redis-6379.conf,使命名风格统一。在后面会看到,配置文件命名风格统一后可以很方便统一配置自启动脚本。

1
sudo mv redis-server.conf redis-6379.conf

同时也修改pidfile,logfile,dumpname

完成conf关联的修改

这一步是可选的,因为如果不配置,redis在启动时会帮我们自动创建。

1
2
3
4
5
6
#pidfile
cd /var/run/redis/
touch redis-6380.pid
#log file
cd /var/log/redis/
sudo touch redis-6380.log

redis自启动脚本修改

修改6379实例配置

1
2
3
4
#进入自动启动脚本目录
cd /etc/init.d
#找到redis启动脚本
ll | grep redis

默认为看到一个redis-server的脚本,修改redis-server名称,即redis-6379

1
2
mv redis-server redis-6379
vi redis-6379

将脚本前面的变量定义修改为如下:

1
2
3
4
5
6
7
8
9
10
11
#定义redis实例名称
REDIS_INSTANCE="redis-6379"
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/redis-server
#引用redis实例变量
DAEMON_ARGS=/etc/redis/${REDIS_INSTANCE}.conf
NAME=${REDIS_INSTANCE}
DESC=${REDIS_INSTANCE}
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/${REDIS_INSTANCE}.pid

增加6380实例配置

1
2
3
4
#拷贝一份6379脚本
cp redis-6379 redis-6380
#修改实例名称
REDIS_INSTANCE="redis-6380"

更新自启动

1
2
3
4
5
6
#先删掉旧的redis-server启动
update-rc.d –f redis-server remove
#添加6379自启动
update-rc.d redis-6379 defaults
#添加6380自启动
update-rc.d redis-6380 defaults

验证

1
2
3
4
5
#分别启动6379和6380实例
service redis-6379 start
service redis-6380 start
#查询启动的redis进程
ps -ef | grep redis-server | grep -v grep

Redis进程

1
2
3
#查看redis信息
redis-cli –h 192.168.1.111 –p 6379
192.168.1.111:6379>info replication

1
#reboot验证看Ubuntu启动时,2个redis实例是否自动启动

问题

总体来说,配置还是很简单的,但才开始玩redis,很是不熟,google了不少blog学习,redis实例本身配置这块是很简单的。主要的问题在启动脚本:

  • 问题1:自启动脚本启动后无法启动。
    开始参照一篇blog[1],给、/etc/init.d/redis-6379建软链接,去掉第一行的变量定义,改为通过获取启动命令获取实例名称。这样通过service启动成功,但是重启后怎么也启动不了,一开始怀疑是添加自启动未生效,还弄了好半天,结果无解;最后修改变量获取方法,定义实例常量值,结果成功了。由此得出结论,Ubuntu启动时,调用启动命令方式不是service xxx start
    #通过service启动,用basename可以把redis-6379读取作为实例名称
    service redis-6379 start

  • 问题2:service redis-6379 status无效
    需要跟踪status问题原因并解决。
    #service redis-6379 status查看状态永远是not running
    service redis-6379 status
    Redis状态

  • 遗留问题:

    1. Ubuntu系统启动时,是如何来调用启动脚本来启动需要自启动的应用的?
    2. 是否可以优化脚本,在一个启动脚本里面循环拉起多个redis启动?
    3. service redis-6379 status命名问题出在哪?如何修改?

参考

文章目录
  1. 1. 拷贝文件配置并修改
  2. 2. 完成conf关联的修改
  3. 3. redis自启动脚本修改
    1. 3.1. 修改6379实例配置
    2. 3.2. 增加6380实例配置
    3. 3.3. 更新自启动
  4. 4. 验证
  5. 5. 问题
  6. 6. 参考