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目录下
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:ingets': Interrupt from /usr/local/bin/redis-trib.rb:818:in
yes_or_die'
from /usr/local/bin/redis-trib.rb:1295:increate_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:横向扩容支持更大数据量