linux 的环境搭建(二)--redis单机环境、生产环境、集群环境的搭建

一、目录
1、工具
2、安装tcl
3、安装单机版redis
4、把redis设置为daemon进程,每次系统启动,redis进程一起启动
5、安装redis cluster
二、工具
2.1、tcl8.6.1-src.tar.gz
2.2、ruby-2.3.1.tar.gz
2.3、redis-4.1.1.gem
2.4、redis-3.2.8.tar.gz
2.5、openssl-1.0.2r.tar.gz
三、安装tcl(安装redis必须先要安装tcl)

1、shell可以说是unix\linux原生的,用户通过它与系统内核进行交换。特点就是直接,主要用来管理和使用系统。
2、perl可以说是对shell的扩展,在编写的灵活性、跨平台性都有提高,特别是在文本处理上有独到的地方。另外,perl的用途广泛如:开发CGI,功能上远远不止维护系统这么简单。
3、tcl可以看做C库,十分方便被C\C++调用,另外,tcl容易被扩展或者缩减,十分方便被移植到特定的软件平台中,作为专业的脚本。我知道很多EDA工具内嵌tcl语言。

3.1、把tcl8.6.1-src.tar.gz通过WinSCP上传到虚拟机中的/usr/local目录下

image.png

3.2、依次运行如下命令:
tar -xzvf tcl8.6.1-src.tar.gz 解压文件
image.png

cd /usr/local/tcl8.6.1/unix/
./configure
image.png

make & make install

四、安装单机版redis
4.1、把redis-3.2.8.tar.gz通过WinSCP上传到虚拟机中的/usr/local目录下


image.png

4.2、依次运行如下命令:
tar -zxvf redis-3.2.8.tar.gz 解压文件
cd redis-3.2.8
make && make test && make install


image.png

五、把redis设置为daemon进程,每次系统启动,redis进程一起启动
5.1、将redis的utils目录下的redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379是我们希望这个redis实例监听的端口号


image.png

5.2、修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)


image.png

5.3、创建两个目录:/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)
5.4、修改redis配置文件(默认在根目录下,redis.conf),拷贝到/etc/redis目录中,修改名称为6379.conf
5.5、修改6379.conf中的部分配置为生产环境

protected-mode no 取消保护模式,保护模式只能127.0.0.1访问
daemonize yes 让redis以daemon进程运行
pidfile /var/run/redis_6379.pid 设置redis的pid文件位置
bind 192.168.3.110
port 6379 设置redis的监听端口号
dir /var/redis/6379 设置持久化文件的存储位置
logfile /var/log/redis/6379.log 设置日志文件位置
5.6、启动redis,依次执行:
cd /etc/init.d,
chmod 777 redis_6379,赋读写执行的权限(chmod -R 777 * 是递归把该目录下的所有文件和其子文件全部赋权限)
./redis_6379 start 启动

如果启动不了,提示找不到redis-server,redis-cli,此时把/usr/local/redis-3.2.8/src下的redis-server,redis-cli、redis-sentinel拷贝到/usr/local/bin目录下即可

5.7、确认redis进程是否启动,ps -ef | grep redis


image.png

5.8、让redis跟随系统启动自动启动

在redis_6379脚本中,最上面,加入两行注释

# chkconfig:   2345 90 10

# description:  Redis is a persistent key-value database

然后运行命令 chkconfig redis_6379 on
image.png

5.9、重启系统,不手动启动redis,直接连接redis,可以连接上,表示配置成功


image.png

此时一个单机版的redis的生产环境已经搭建好了,每次服务器重启,redis都会自动的启动

六、安装redis cluster
(redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,3个master,3个slave)
6.1、前提,我在其它机器上启动了六个redis(安装步骤都如下)
2.2、创建三个目录:
mkdir -p /etc/redis-cluster 存放集群配置信息,自动生成配置
mkdir -p /var/log/redis redis日志
mkdir -p /var/redis/7001 存放redis的rdb文件和aof文件
6.3、将redis的utils目录下的redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_7001,7001是我们希望这个redis实例监听的端口号,并修改redis_7001配置文件中的REDISPORT=7001
6.4、修改/etc/redis/7001.conf中的部分配置为生产环境

port 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize   yes                         
pidfile     /var/run/redis_7001.pid                         
dir         /var/redis/7001     
logfile /var/log/redis/7001.log
bind 192.168.31.187     
appendonly yes

6.5、完成了一个redis环境的配置,依次再配置其余五个,分别为7002、7003、7004、7005、7006,每个启动脚本内,都修改对应的端口号

6.6、启动6个redis实例
6.7、创建集群(需要安装ruby、rubygems)

依次运行如下命令:
yum install -y ruby   安装ruby
yum install -y rubygems 安装rubygems
gem install redis  ruby 安装redis报错
如果不报错,即完成了安装

上述命令在部分机器上是可以直接运行完成,成功安装的,但在部分机器上运行第三条命令时会提示ruby版本太低、openssl找不到的问题,下面依次解决这两个问题:

问题:ruby版本太低,最少需要2.2.2版本
ERROR:  Error installing redis:
        redis requires Ruby version >= 2.2.2.
此时的做法就是下载一个高版本的ruby(本人下载的ruby-2.3.1.tar.gz),上传的/usr/local目录下,然后依次运行如下命令:
tar -zxvf ruby-2.3.1.tar.gz  解压
cd ruby-2.3.1
./configure -prefix=/usr/local/ruby
make && make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin 

此时再用ruby -v的命令查看一下ruby的版本,发现版本号还是未变,这是因为/usr/bin下的ruby命令先运行,里面的ruby还没有替换,用过cp bin/ruby /usr/bin/ruby替换一下即可,此时再查看ruby版本,则为:ruby 2.3.1p112 (2016-04-26 revision 54768) [i686-linux]

6.8、再次运行gem install redis命令,报出两个错误


image.png
问题:ruby cannot load such file -- zlib   ruby 安装redis报错
解决办法:
yum -y install zlib-devel  安装zlib-devel
进入ruby源码文件夹,安装ruby自身提供的zlib包
cd ruby-2.3.1/ext/zlib
ruby ./extconf.rb
make && make install

6.9、再次运行gem install redis命令,报出一个错误


image.png
问题:获取不到openssl
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
解决办法:
一般机器上可能安装了,但识别不了,通过openssl version可以查看到openssl的版本信息,但这个不管,我们直接去下载一个最新版的openssl,然后重新安装(下载地址:[http://distfiles.macports.org/openssl/],我下载的是:openssl-1.0.2r.tar.gz)
a、把openssl-1.0.2r.tar.gz上传到/usr/local中
b、tar -xzvf openssl-1.0.2r.tar.gz解压安装文件
c、cd openssl-1.0.2r 进入解压目录
d、依次运行下面三条命令:
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install
openssl的配置文件必须要配置-fPIC参数,如果没有该参数下面的安装中会出现问题!
安装完成,可以通过openssl version检测一下是否安装成功
e、进入ruby源码[/usr/loca/ruby-2.3.1]目录下的ext/openssl 目录,运行ruby extconf.rb命令:
[root@ceshi01 local]# cd ruby-2.3.1
[root@ceshi01 ruby-2.3.1]# cd ext/openssl
[root@ceshi01 openssl]# ruby extconf.rb
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for assert.h... yes
checking for openssl/ssl.h... no
f、提示没有找到ssl.h, 因为出现了错误:openssl/ssl.h:没有那个文件或目录,此时运行下面的命令:ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib

[root@ceshi01 openssl]# ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
-------------------------中间略过---------------------------------------
checking for X509_ATTRIBUTE.single in openssl/x509.h... yes
checking for OPENSSL_FIPS in openssl/opensslconf.h... no
checking for EVP_CTRL_GCM_GET_TAG in openssl/evp.h... yes
creating extconf.h
creating Makefile
此时表示命令运行成功

g、接下来并且将ruby 源码目录下的include目录软链接到 / 目录下
命令;ln -s /usr/local/ruby-2.3.1/include /
h、再执行make,如果在配置openssl时没有-fPIC参数时就会报错
[root@ceshi01 openssl]# make
compiling ossl_x509store.c
compiling ossl_pkey_dsa.c
compiling ossl_cipher.c
-------------------------中间略过---------------------------------------
compiling ossl_x509req.c
compiling ossl_pkey_ec.c
linking shared-object openssl.so
表示make成功
i、再运行make install命令
[root@ceshi01 openssl]# make install
/usr/bin/install -c -m 0755 openssl.so /usr/local/ruby/lib/ruby/site_ruby/2.3.0/i686-linux
installing default openssl libraries
[root@ceshi01 openssl]# 

此时大功告成

6.10、再次运行gem install redis命令,报出一个错误


image.png
问题:下载不到ruby redis接口资源
ERROR:  Could not find a valid gem 'redis' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
解决办法:(手动下载一个新版的,我下载的是redis-4.1.1.gem,下载地址:[https://rubygems.org/gems/redis/versions/4.1.1])
把redis-4.1.1.gem上传到/usr/local上
通过命令; gem install /usr/local/redis-4.1.1.gem安装
[root@ceshi01 local]# gem install /usr/local/redis-4.1.1.gem
Successfully installed redis-4.1.1
Parsing documentation for redis-4.1.1
^CERROR:  Interrupted
[root@ceshi01 local]#  gem install /usr/local/redis-4.1.1.gem
Successfully installed redis-4.1.1
Parsing documentation for redis-4.1.1
Installing ri documentation for redis-4.1.1
Done installing documentation for redis after 1 seconds
WARNING:  Unable to pull data from 'https://rubygems.org/': SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
1 gem installed
这时ruby redis接口已经安装成功了;

6.11、再次运行gem install redis命令
[root@ceshi01 local]# gem install redis
Successfully installed redis-4.1.1
Parsing documentation for redis-4.1.1
Done installing documentation for redis after 1 seconds
WARNING: Unable to pull data from 'https://rubygems.org/': SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
1 gem installed
运行成功

此时Redis安装好,此三个工具也安装好了,这时我们来做一个Redis集群测试,在一台服务器中创建了6个Redis实例,开启6个Redis服务
redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006

[root@eshop-cache02 init.d]# redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006

Creating cluster
Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.3.104:7001
192.168.3.105:7003
192.168.3.106:7005
Adding replica 192.168.3.105:7004 to 192.168.3.104:7001
Adding replica 192.168.3.104:7002 to 192.168.3.105:7003
Adding replica 192.168.3.106:7006 to 192.168.3.106:7005
M: 95ced0a89c8e264957a5741fceed6fc2ff9160dc 192.168.3.104:7001
slots:0-5460 (5461 slots) master
S: 1db5527a96364e6a73a5584e2f2b8c44bb06921d 192.168.3.104:7002
replicates 29fbdff232cba71ae300fd8900e8e391d8455658
M: 29fbdff232cba71ae300fd8900e8e391d8455658 192.168.3.105:7003
slots:5461-10922 (5462 slots) master
S: f020b3cd13880d6b45bde073884d625181da5ada 192.168.3.105:7004
replicates 95ced0a89c8e264957a5741fceed6fc2ff9160dc
M: be88db01183aa149949ee8abbb92633081082a7f 192.168.3.106:7005
slots:10923-16383 (5461 slots) master
S: 40ecf79b7a802e12d4e32c7e11c63e00ddb7adac 192.168.3.106:7006
replicates be88db01183aa149949ee8abbb92633081082a7f
Can I set the above configuration? (type 'yes' to accept): ^C/usr/local/bin/redis-trib.rb:818:in gets': Interrupt from /usr/local/bin/redis-trib.rb:818:inyes_or_die'
from /usr/local/bin/redis-trib.rb:1295:in create_cluster_cmd' from /usr/local/bin/redis-trib.rb:1701:in<main>'

此时一个redis集群环境就已经搭建好了,可以通过redis-trib.rb check 192.168.3.105:7003命令查看集群几点的信息

[root@eshop-cache02 init.d]# redis-trib.rb check 192.168.3.105:7004

Performing Cluster Check (using node 192.168.3.105:7004)
S: f020b3cd13880d6b45bde073884d625181da5ada 192.168.3.105:7004
slots: (0 slots) slave // 表示7004是一个slave节点,通过hash slot算法分配0个slots
replicates 95ced0a89c8e264957a5741fceed6fc2ff9160dc
M: 29fbdff232cba71ae300fd8900e8e391d8455658 192.168.3.105:7003
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 40ecf79b7a802e12d4e32c7e11c63e00ddb7adac 192.168.3.106:7006
slots: (0 slots) slave
replicates be88db01183aa149949ee8abbb92633081082a7f
M: 95ced0a89c8e264957a5741fceed6fc2ff9160dc 192.168.3.104:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 1db5527a96364e6a73a5584e2f2b8c44bb06921d 192.168.3.104:7002
slots: (0 slots) slave
replicates 29fbdff232cba71ae300fd8900e8e391d8455658
M: be88db01183aa149949ee8abbb92633081082a7f 192.168.3.106:7005
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
Check for open slots...
Check slots coverage...
[OK] All 16384 slots covered.
[root@eshop-cache02 init.d]#
[root@eshop-cache02 init.d]#
[root@eshop-cache02 init.d]# redis-trib.rb check 192.168.3.105:7003
Performing Cluster Check (using node 192.168.3.105:7003)
M: 29fbdff232cba71ae300fd8900e8e391d8455658 192.168.3.105:7003
slots:5461-10922 (5462 slots) master // 表示7003是一个master 节点,通过hash slot算法分配5462个slots
1 additional replica(s)
S: 1db5527a96364e6a73a5584e2f2b8c44bb06921d 192.168.3.104:7002
slots: (0 slots) slave
replicates 29fbdff232cba71ae300fd8900e8e391d8455658
M: 95ced0a89c8e264957a5741fceed6fc2ff9160dc 192.168.3.104:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 40ecf79b7a802e12d4e32c7e11c63e00ddb7adac 192.168.3.106:7006
slots: (0 slots) slave
replicates be88db01183aa149949ee8abbb92633081082a7f
S: f020b3cd13880d6b45bde073884d625181da5ada 192.168.3.105:7004
slots: (0 slots) slave
replicates 95ced0a89c8e264957a5741fceed6fc2ff9160dc
M: be88db01183aa149949ee8abbb92633081082a7f 192.168.3.106:7005
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
Check for open slots...
Check slots coverage...
[OK] All 16384 slots covered.
[root@eshop-cache02 init.d]#

redis cluster的优点:读写分离+高可用+多master
读写分离:每个master都有一个slave
高可用:master宕机,slave自动被切换过去
多master:横向扩容支持更大数据量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,265评论 0 36
  • 在开始搭建 Redis 集群之前,首先要明确集群节点的数量。集群正常运作至少需要三个主节点,为了增加集群的可访问性...
    简书冷雨阅读 2,520评论 2 22
  • 一、redis cluster简介 Redis在3.0版正式引入了集群这个特性。 Redis集群是一个提供在多个R...
    张伟科阅读 1,615评论 0 4
  • 小姑娘还是很想要的,只是之前为什么不好好听课呢,现在要化父母多少钱啊?有点不明白
    紫微妈咪阅读 75评论 0 0
  • 今天正在看理财规划,同学打来电话,风风火火推荐一个茶票项目,在我的理财分项里,这方面还真是一个缺口,我准备研究研究...
    静掌柜阅读 148评论 0 0