美文网首页docker
linux 的环境搭建(二)--redis单机环境、生产环境、集

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

作者: 笑才 | 来源:发表于2019-05-27 00:50 被阅读0次

    一、目录
    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:横向扩容支持更大数据量

    相关文章

      网友评论

        本文标题:linux 的环境搭建(二)--redis单机环境、生产环境、集

        本文链接:https://www.haomeiwen.com/subject/owcqtctx.html