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个节点,分配主从关系,7000、7001、7002是主节点,7003、7004、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": []
}