reids 哨兵,集群,docker容器简单实用

day111Linux笔记

redis哨兵博客地址:
https://www.cnblogs.com/pyyu/p/9718679.html
redis-cluster博客
https://www.cnblogs.com/pyyu/p/9844093.html
docker博客:
https://www.cnblogs.com/pyyu/p/9485268.html


内容回顾
redis

1.安装配置redis
redis.conf  放哪都可以 编译安装的话,就在redis源码的目录
port 6379
bind 0.0.0.0
dir 指明redis数据文件存放路径
daemonize  yes   #将redis在后台运行,不占用一个终端
protomode  yes   #安装模式
requirepeass   s1466  #redis密码登录
pidfile   #存放redis进程id的文件

RDB持久化的参数
AOF持久化的参数

#指明master的ip和端口信息
slaveof  127.0.0.1  6380 

#redis支持多实例 
redis-server  redis-6379.conf 
redis-server  redis-6380.conf 
redis-server  redis-6381.conf 





#发布订阅
发布者
订阅者
频道 

#主从同步
redis主从
优先
1.保证数据安全,主从机器两份数据
一主多从
2.读写分离,缓解主库压力
主redis,可读可写
slave身份,只读



缺点
1.手动主从切换
假如主库挂了,得手动切换
master   192.168.12.10   挂了 

slave1    192.168.12.11    主库挂了,我得手动选一个slave为新的master
        1.配置主库地址
        slaveof 192.168.12.12 6380  


slave2  192.168.12.12    
        1.取消12的从库身份
        slaveof no one
        
2.准备一个值班人,他去检测,redis主从机制,是否宕机,值班人来做这个主从切换的事



redis哨兵配置:
1.准备3个redis实例文件
    -rw-r--r-- 1 root root 145 12月 11 09:14 redis-6379.conf
    -rw-r--r-- 1 root root 115 12月 11 09:13 redis-6380.conf
    -rw-r--r-- 1 root root  93 12月 11 09:13 redis-6381.conf

    redis-6379配置文件内容如下
    cat redis-6379.conf 

    port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"
    daemonize yes 

    #其余6380、6381配置文件,端口确保不同,且配置上主从参数
    slaveof 127.0.0.1 6379
    
2.启动三个redis实例
     1030  redis-server redis-6379.conf 
     1031  redis-server redis-6380.conf 
     1032  redis-server redis-6381.conf 

3.检查三个redis实例的主从身份关系
1071  redis-cli -p 6379 info replication
1071  redis-cli -p 6380 info replication
1072  redis-cli -p 6381 info replication


4.配置三个哨兵
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26379.conf
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26380.conf
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26381.conf


哨兵配置文件,几乎一致,仅有端口区别

    // Sentinel节点的端口
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"

    // 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
    // 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    // mymaster是主节点的别名
    sentinel monitor mymaster 127.0.0.1 6379 2

    //每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
    sentinel down-after-milliseconds mymaster 30000

    //当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
    原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs mymaster 1

    //故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000

    
    
5.启动三个redis哨兵

 1053  redis-sentinel redis-sentinel-26379.conf 
 1054  redis-sentinel redis-sentinel-26380.conf 
 1055  redis-sentinel redis-sentinel-26381.conf
 
 
6.检查redis哨兵身份信息,检查主从节点健康状态

 1058  redis-cli -p 26379 info sentinel
 1059  redis-cli -p 26380 info sentinel
 1060  redis-cli -p 26381 info sentinel

 
7.配置正确后,杀死master节点,查看主从身份切换是否正常





1,2,3,4,5,6...100


1%3   1
2%3        2
3%3        0 


将余数为1分给一匹马


讲余数为2的分给马2


余数为0的分给马3




ruby语言脚本,一键自动安装redis-cluster

redis-cluster就是什么

将我所有的数据,keys * 

分配6匹马,6匹马的身份信息

3个主

3个从



redis-cluster使用的哈希槽算法,将数据分为0~16383的槽位


将所有的keys 分配到这些槽位当中




安装配置手册
1.准备6个redis节点,也就是准备6匹马

redis可以自定制端口,你可以用6379,也可以用7000

-rw-r--r-- 1 root root 185 12月 11 09:51 redis-7000.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7001.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7002.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7003.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7004.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7005.conf




查看redis配置文件,修改这6个文件的端口不同

    sed   's/7000/7001/g' redis-7000.conf    #此时还未生效,只返回处理结果
        -i 参数,写入到文件 insert 
        
    sed  -i  's/7000/7001/g' redis-7000.conf  #对这个文件修改

    sed    's/7000/7001/g'    redis-7000.conf   >  redis-7001.conf

    sed     linux处理字符串的命令

    's/7000/7001/g'     第二空格 放入你想替换的内容 
        s  代表替换指令
        /你想换的内容/你想替换后的内容/
        g 全局替换 globol 
     
     redis-7000.conf   操作的对象,将这个文件内的所有7000替换为7001
 

2.准备6个配置文件redis.conf 
    -rw-r--r-- 1 root root 182 12月 11 10:01 redis-7000.conf
    -rw-r--r-- 1 root root 182 12月 11 10:01 redis-7001.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7002.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7003.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7004.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7005.conf

    配置文件内容如下:
        port 7000
        daemonize yes
        dir "/opt/redis/data"
        logfile "7000.log"
        dbfilename "dump-7000.rdb"
        cluster-enabled yes 
        cluster-config-file nodes-7000.conf
        cluster-require-full-coverage no
        
    6个配置文件,仅仅是端口的区别,可以使用sed命令快速生成配配置文件
        1117  sed 's/7000/7001/g'  redis-7000.conf > redis-7001.conf
        1118  sed 's/7000/7002/g'  redis-7000.conf > redis-7002.conf
        1119  sed 's/7000/7003/g'  redis-7000.conf > redis-7003.conf
        1120  sed 's/7000/7004/g'  redis-7000.conf > redis-7004.conf
        1121  sed 's/7000/7005/g'  redis-7000.conf > redis-7005.conf


3.启动6个redis实例
     1133  redis-server redis-7000.conf 
     1134  redis-server redis-7001.conf 
     1136  redis-server redis-7002.conf 
     1137  redis-server redis-7003.conf 
     1138  redis-server redis-7004.conf 
     1139  redis-server redis-7005.conf 

4.检查redis进程信息
    [root@node1 /opt/redis-4.0.10/myjiqun 10:05:42]#ps -ef|grep redis
    root       9478      1  0 10:04 ?        00:00:00 redis-server *:7000 [cluster]
    root       9483      1  0 10:04 ?        00:00:00 redis-server *:7001 [cluster]
    root       9490      1  0 10:04 ?        00:00:00 redis-server *:7002 [cluster]
    root       9495      1  0 10:04 ?        00:00:00 redis-server *:7003 [cluster]
    root       9500      1  0 10:04 ?        00:00:00 redis-server *:7004 [cluster]
    root       9505      1  0 10:04 ?        00:00:00 redis-server *:7005 [cluster]

5.安装配置ruby环境,用于一键搭建redis集群
    1.下载源码
        wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    2.解压缩ruby
        tar -xvf ruby-2.3.1.tar.gz
    3.编译安装ruby
        ./configure --prefix=/opt/ruby/
        make && make install
    
6.准备ruby的环境变量
cp ./bin/ruby   /usr/local/bin/
cp ./bin/gem   /usr/local/bin

7.下载ruby的软件包管理工具
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem  #安装ruby操作redis的模块

8.查看ruby语言的包邮哪些
gem list -- check redis gem

9.配置环境变量redis-trib.rb,用于创建redis-cluster 
    #找到这个redis-trib.rb命令在哪里
    [root@node1 /opt/redis-4.0.10/src 10:28:32]#find /opt  -name redis-trib.rb
    /opt/redis-4.0.10/src/redis-trib.rb
    #配置环境变量,用于快速执行redis-trib.rb这个命令 
    cp /opt/redis-4.0.10/src/redis-trib.rb    /usr/local/bin/

10.通过redis-trib.rb命令,一键创建redis-cluster集群功能
    #其实就是分配槽位,分配主从关系
    #通过这个命令,创建集群功能
    #1  代表每个主只有一个从
    #自动给后面6个节点,分配主从关系,70007001、7002是主节点,70037004、7005是从节点
    redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    

11.
写入数据来使用redis集群了

redis查看身份的命令,可以来检查集群的节点身份信息
redis-cli -p 7003 info replication     #查看主从身份信息
redis-cli -p 7004 info replication#查看主从身份信息
redis-cli -p 7005 info replication#查看主从身份信息

#查看redis集群状态信息
redis-cli -p 7000 cluster info    #查看节点集群状态

#redis操作集群数据
# 通过-c参数才能指定集群功能
redis-cli -p 7000 -c  






服务器环境

第一代:服务器+ centos  
第二代:服务器+windows+vmware workstation(学习版)+centos7     机器垃圾,只能安装10个以内的虚拟机 +  django应用

        dell poweer ege R720  
        实体服务器,26台,托管在上海世纪互联机房托管中心
        还有自建机房(5台内网服务器)
        通过R720实体服务器,通过vmware esxi(支持windows,linux)
        虚拟化出280+的linux操作系统
            100+redhat
            100+centos 
            
        服务器环境分为三个阶段
        
        线上服务器(对客户提供服务)
        
        即将上线服务器(测试环境)
        
        本地测试代码环境()
        
        
            
        
            
        服务器+vmware esxi(企业版虚拟化)+linux 
                                        +centos
                                        +redhat
                                        +suse
第三代:服务器 + opnstatck 云虚拟化

第四代:服务器 + vmware esxi +  docker + django应用 


我们个人学习 笔记本+vmware +centos+docker +django 

                        


解决环境依赖的问题
1.虚拟机,定制操作系统模板

vmware esxi  定制一个 centos镜像板块,我在这模板中定制我的功能,安装vim  安装 python3  安装 django 
通过镜像模块安装系统,也可以解决环境依赖的问题






docker三大概念
容器三大基本概念


镜像 image

class 



容器 container

class()




仓库 repository  (存放镜像文件的地方)  我可以去公网去,下载镜像



docker整个生命周期就是这三个概念。




#centos安装docker

1.编译安装,源码安装

2.yum安装
    #如果网速太慢,你可以选择阿里云的源,缺点就是版本低
    #你可以选择用aliyun的yum源,docker就存在epel源中
    #如果网速够快,或者在公司中,一定要装官方源
    #配置docker的官方源,一定是官方的最好啊
    
    
    #由于配置不了官方的docker仓库,咱们选择阿里云
    1.yum install docker* docker-*  -y  #安装docker服务端
    2.启动docker
    systemctl start docker 
    
    systemctl status  docker 
    
    3.查看docker是否正确启动
    docker version 
    
    
    
    4.简单使用docker
    docker search hello-world
    docker pull hello-world  
    docker image ls   #查看镜像
    #等于
    docker images  #查看镜像
    docker run 镜像名/镜像id(可以写前三位)   #运行一个docker容器实例
    docker ps  #查看docker进程
    docker ps -a  #查看所有运行过的docker容器记录

3.rpm安装



docker三大概念:
容器(如同通过class类的实例化对象),也就是可以通过一个镜像,创建多个容器实例




镜像(如同class类)



仓库


docker常用命令:


增
增加容器记录,启动容器

docker run 镜像id/镜像名  #运行创建一个容器container实例

docker run -it  centos   #此命令会 进入到容器空间内,进入到容器的centos中
-i 交互式界面
-t 是开启一个终端

docker run -it  --rm  ubuntu   #运行一个乌班图容器,并且在退出是,删除容器运行记录



docker run centos   
#直接运行这个centos镜像,会生成一个容器记录
#此时就会生成一个容器记录,但是容器中并没有任何的后台程序,因此直接就挂掉
# 你会发现,容器死活不生成,docker ps 看不到记录,

docker run -d centos /bin/sh -c "while true;do echo hello s14 docker~~~~; sleep 1;done"
#一定会生成一个容器记录
#docker ps  能不能看到记录?

-d 参数是  后台运行
/bin/sh  调用shell解释器
-c 指明一段shell语法





docker pull centos  #下载docker的镜像




删

docker rm 容器id  #docker rm删除的是已经停止的容器id

docker rmi  镜像id   #删除一个镜像记录 

docker rm `docker ps -aq` # 一次性删除所有容器id记录
    ` `   #反引号是取命令的运行结果 

docker rmi `docker images -aq`   #一次性删除所有镜像记录




改

docker commit  #提供容器记录,为新的镜像
docker stop  容器id  #停止正在运行的容器
docker start 容器id  #启动一个关闭中的容器

#导出镜像
docker save centos > /opt/centos.tar.gz  #导出docker镜像至本地

#导入镜像
docker load < /opt/centos.tar.gz
#通过--name参数给容器记录,加上别名
docker run --name s14hehe -d centos /bin/sh -c "while true;do echo hello s14 docker~~~~; sleep 1;done"

#进入正在运行的容器
docker exec -it c49  /bin/bash


-it  交互式的操作终端
/bin/bash使用shell解释器,只有在redhat,centos系统中,才能用/bin/bash 


#提交自定义的镜像文件(自己修改了容器记录,提交成一个新的镜像,可以发给别人使用)
#需求是?
1.默认的centos镜像,没有vim 
2.我们自己run一个容器记录,安装vim,然后提交成新的镜像文件
docker commit 24c1ef3f8da8 s14/centos-vim

3.查看新的镜像记录
docker images  
s14/centos-vim          latest              01b0298ec5b0        7 seconds ago       327 MB


4.可以通过新的带有vim的镜像运行容器记录,通过此方法可以解决环境难配置的问题
docker run -it s14/centos-vim    /bin/bash 


查

docker image  ls  #查看镜像记录
docker images  #查看镜像记录 

docker ps    #查看容器记录  ,只能查看到正在运行中的容器
             #正在运行中的容器,代表,容器后台一定有个进程在运行
             
docker ps -a #查看停止的和在运行的容器记录

docker container ls -a  #等同于docker ps -a 



docker logs -f 容器id  #查看正在运行中的 容器内日志
-f  不间断打印 




#其他
#容器内应用,外部也是可以访问的
#通过-P参数进行端口映射

#运行一个web容器实例
1.下载镜像
docker pull training/webapp  
2.运行镜像,产生容器记录
docker run -d -P 6fa  python app.py
-d 后台运行
-P  将容器内的5000端口随机映射到宿主机的一个端口



docker port 容器id 
[root@node1 /opt/redis-4.0.10/src 16:00:41]#docker port ebb7
5000/tcp -> 0.0.0.0:32768












#docker镜像加速器
#执行命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
#其实就是更改了,docker的一个仓库源
[root@node1 /opt/redis-4.0.10/src 14:48:26]#cat /etc/docker/daemon.json
{
    "registry-mirrors": [
        "http://95822026.m.daocloud.io"
    ],
    "insecure-registries": []
}
原文地址:https://www.cnblogs.com/bozhengheng/p/12185078.html