Vmware搭建Redis主从配置实验环境

Redis (REmote DIctionary Server)是一个类似于Memcached的Key-Value存储系统。相比Memcached,它支持更丰富的数据结构,包括string(字符串)、list(链表)、set(集合)、zset(sorted set:有序集合)和hash(哈希类型),并提供了数据持久化机制,在某些场景下,你完全可以把它当做非关系型数据库来使用。它是一个高性能的存储系统,能支持每秒15万以上的读写速率。

本文记录了自己在vmware虚拟机中搭建Redis主从集群的经验,希望能为想深入学习Redis的朋友提供一些帮助。


目录

1. 部署环境说明

2. Vmware准备

3. Redis下载

4. Redis编译安装

5. 克隆搭建从服务器

6. Redis配置

7. Redis服务启动

8. Redis测试


1.安装环境说明

目的:搭建一主两从的Redis集群环境

版本说明:

  • Vmware:11.1.2

  • CentOS:6.5

  • Redis:3.0.3

回到目录


2. Vmware准备

  • 使用Vmware新建一台虚拟机,安装CentOS6.5(或者克隆之前安装过的某台虚拟机),作为Redis主Server

  • 修改主Server的网络配置,Vmware克隆的虚拟机会出现无法找到eth0网卡的问题

    • 原因:很多Linux distribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名。例如在 Debian etch中,udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。而VMware会自动生成虚拟机的mac地址。这样,由于基本系统的虚拟机已经记录了该虚拟机的网卡mac地址对应于网卡eth0,在克隆出的虚拟机中由于mac地址发生改变,udev会自动将该mac对应于网卡eth1。以此类推,udev会记录所有已经识别的mac与网卡名的关系,所以每次克隆网卡名称会自动加1,而其实kernel仅仅只识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。

    • 解决方法:

      • 执行命令vi /etc/udev/rules.d/70-persistent-net.rules,删除跟NAME=”eth0″相关的行,将eth1相关信息中的eth1替换为eth0

      • 接着执行命令reboot,重启系统:

  • 关闭防火墙

切换至命令行界面,执行Service iptables stop(注意:该方法重启后失效)

  • 查看主机IP

执行命令ifconfig,记录主机的局域网IP,本机测试IP为192.168.1.102

回到目录


3. Redis下载

Redis的下载地址:http://redis.io/download,建议下载Stable稳定版redis-3.0.3.tar.gz

下载后可使用Vmware Tools或者Xftp等工具发送到虚拟机中

回到目录


4. Redis编译安装

  • 解压缩:
1
2

tar xzvf redis-2.0.0-rc4.tar.gz
  • 编译:
1
2

make
  • 安装:
1
2
3

cd ./src
make install

安装完成后,会在src目录下生成可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:

  • redis-server:Redis服务器的daemon启动程序
  • redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
  • redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
  • redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
  • 拷贝:

为了便于管理,我们建立如下目录/home/redis/bin/home/redis/etc,将可执行文件及配置文件redis.conf分别拷贝至bin与etc目录下

回到目录


5. 克隆搭建从服务器

将主Server关机后,克隆两台从Server,修改网络配置并关闭防火墙。

回到目录


6. 优化系统配置

查看系统配置

1
vi /etc/sysctl.conf

添加vm.overcommit_memory=1

刷新配置使之生效

1
sysctl vm.overcommit_memory=1

补充介绍:

  • 如果内存情况比较紧张的话,需要设定内核参数:
1
echo 1 > /proc/sys/vm/overcommit_memory
  • 内核参数说明如下:

    >overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。

    • 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

    • 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

    • 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存


7. Redis配置

编辑redis.conf配置文件(/etc/redis.conf),按需求做出适当调整,主要参数意义如下所示:

  • daemonize:是否以后台daemon方式运行
  • pidfile:pid文件位置
  • port:监听的端口号
  • timeout:请求超时时间
  • loglevel:log信息级别
  • logfile:log文件位置
  • databases:开启数据库的数量
  • save X X:保存快照的频率,第一个X表示多长时间,第二个X表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
  • rdbcompression:是否使用压缩
  • dbfilename:数据快照文件名(只是文件名,不包括目录)
  • dir:数据快照的保存目录(这个是目录)
  • appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
  • appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
  • masterauth:主Server的密码

此处修改主服务器的选项为后台启动,密码为123456`

1
2
daemonize yes
requirepass 123456

修改从服务器的选项为后台启动,slaveof填写主机IP,端口默认为6379,密码为123456

1
2
3
daemonize yes
slaveof 192.168.1.102 6379
masterauth 123456

回到目录


7. Redis服务启动

在一主两从三台虚拟机上分别执行命令:

1
/home/redis/bin/redis-server /home/redis/etc/redis.conf

可通过命令查看是否正常启动:

1
2
3
4
#检测后台进程是否存在
ps -ef |grep redis
#检测6379端口是否在监听
netstat -lntp | grep 6379

回到目录


8. Redis测试

执行命令启动redis命令行

1
/home/redis/bin/redis-cli

在主Server上执行

1
set name jack

然后在从Server上执行

1
get name

如能正确返回name值则说明主从环境搭建成功

回到目录