docker部署redis集群
1.0 安装环境
1.1 安装Centos7
-
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
-
如果docker安装在centos上面建议用Centos7版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
1.2 安装Docker
# 更新原有安装包
yum -y update
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装docker
sudo yum install docker-ce
1.21 docker常用命令
- linux 的 service 和 systemctl 命令大致区别
- 启用可以用service docker start也可以用systemctl start docker其他重启停止也可以用systemctl
- CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 daemon,原来管理系统启动和管理系统服务的相关命令全部由 systemctl命 令来代替。
- service命令是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
- service启动缺点
- 一是启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- 二是启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长
- systemctl 优缺点
- Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反 “keep simple, keep stupid” 的Unix 哲学。
# 查看docker版本
docker -v
# 启动
service docker start
# 停止
service dockerstop
# 重启
service docker restart
# 开机启动
systemctl enable docker
# 重启docker
systemctl restart docker
1.21 在线安装docker镜像
# 搜索java镜像
docker search java
#拉取java镜像
docker pull java
- docker仓库是部署在国外服务器上面的,所以如果在国内拉取镜像那将是一个非常漫长的过程,因此我们可以用一些国内的镜像仓库,比如阿里云的又或者加速器DaoCloud
1.22 配置Docker加速器
- 配置阿里云镜像加速器
- 配置阿里云镜像加速器需要注册账号
- https://cr.console.aliyun.com/#/imageList)
- 注册之后点击左下方镜像加速器会生成一个专属加速网址
- 将生成的专属网址,加入/etc/docker/daemon.json即可
# 修改docker配置文件
vi /etc/docker/daemon.json
- 配置Daocloud加速器
#配置加速器命令(复制粘贴执行即可)Ps:此命令仅克用于Linux操作系统
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
- 注意:在设置完成后,可能有一个坑存在的,执行命令设置后,它会在docker配置文件中添加一个地址,但是地址后面是多了一个,号的,需要手动删除
- 删除配置文件中多余的,号
# 修改docker配置文件
vi /etc/docker/daemon.json
1.23 导出和导出镜像
# 导出镜像
docker save 镜像名>导出路径
docker sava tomcat > /home/tomcat.tar.gz
# 导入镜像
docker load<镜像文件路径
docker load < /home/mysql.tar.gz
#查看docker已有镜像
docker images
# 删除镜像
docker rmi 镜像名
docker rmi reids
#修改镜像名
docker tag 原镜像名 修改后镜像名
docker tag docker.io/percona/percona-xtradb-cluster pxc
1.24 容器相关命令
# 创建并且启动一个容器
# -it表示启动容器后开启一个交互的界面 --name 给容器起一个名字不取就没有可通过id辨别 bash代表启动程序后运行什么样的成员bash=bash命令行
docker run -it --name myTomcat tomcat bash
# 开启容器并且映射端口 -p 8088:8080代表将容器8080端口映射到宿主机8088上面 可以映射多个端口
docker run -it --name myTomcat -p 8088:8080 -p 8089:3306 tomcat bash
# 开启容器并且映射目录或者文件
# -v宿主机目录映射到容器中/home/data:/mysqlData冒号之前是宿主机的目录集将目录/home/data映射到/mysqlData
# --privileged这个是代表容器操作映射目录使用的是最高权限,即可读可写可执行
docker run -it --name myTomcat -v /home/data:/mysqlData --privileged tomcat bash
# 三条命令合一
docker run -it -p 8088:8080 -p 8089:3306 -v /home/data:/mysqlData --privileged --name myTomcat tomcat bash
# 停止容器 myTomcat是容器名字没有可以通过容器id识别
docker pause myTomcat
# 恢复容器
docker unpauser myTomcat
# 彻底停止容器
docker stop myTomcat
# 重新启动容器
docker start -i myTomcat
# 退出交互页面开启容器-it执行的(同时会彻底关闭容器)
exit
# 删除容器
docker rm myTomcat
# 进入容器
docker exec -it 容器名 bash
# 重命名容器名
docker rename 原容器名称 新容器名称
PS:
以上仅仅是Docker基础命令
Docker后面还有
容器数据卷
DockerFile(制作镜像使用)
Docker Compose (多容器管理)
Docker Swarm (docker集群)
2.0基于docker部署RedisCluster集群
2.01 RedisCluster集群介绍
-
常见Redis集群方案
- RedisCluster Reids官方产品 没有中心节点,数据分片储存
- Codis 豌豆荚团队开发 有中心节点,豌豆荚 因为Codis是一个无状态的,所以可以增加多个Codis来提升QPS,同时也可以起着容灾的作用。
- Twemproxy是Twitter团队的开源的 有中心节点
-
Redis主从同步
- RedisCluster 切片存储(每个节点储存数据不同)
- 引入冗余节点,把主节点数据分发非从从节点当住节点挂掉后吧数据复制到从节点继续使用
-
Redis高可用
- 集群中住节点应采用奇数节点至少3个因为RedisCluster拥有选举机制
- 每个主节点都应该有对应的从节点,将主节点数据复制到从节点
2.02 部署Redis集群
-
安装Redis
#拉去redis镜像 docker pull redis # 创建network2网段 docker network create --subnet=172.20.0.0/24 network2 # 创建6节点redis容器 docker run -it -d --name redis1 -p 6001:6379 --net=network2 --ip 172.20.0.2 redis bash docker run -it -d --name redis2 -p 6002:6379 --net=network2 --ip 172.20.0.3 redis bash docker run -it -d --name redis3 -p 6003:6379 --net=network2 --ip 172.20.0.4 redis bash docker run -it -d --name redis4 -p 6004:6379 --net=network2 --ip 172.20.0.5 redis bash docker run -it -d --name redis5 -p 6005:6379 --net=network2 --ip 172.20.0.6 redis bash docker run -it -d --name redis6 -p 6007:6379 --net=network2 --ip 172.20.0.7 redis bash # 进入redis容器 docker exec -it redis1 bash
-
修改redis配置文件
# 编辑配置文件 vi /usr/redis/redis.conf #找到一下参数并做修改 daemonize yes #以后台进程运行 cluster-enabled yes #开启集群 cluster-config-file nodes.conf #集群配置文件 cluster-node-timeout 15000 #超时时间 append only yes #开启AOF(日志)模式
-
启动redis
#进入redis cd /usr/redis/src #启动 ./redis-server ../redis.conf #依次进入23456redis节点修改配置文件并启动redis
-
安装redis-trib.rb
-
redis-trib.rb这个是redis自带的通过redis-trib.rb创建RedisCluster集群
-
redis-trib是ruby写的首先安装ruby
# 复制redis-trib.rb 到一个空目录 cp /usr/redis/src/redis-trib.rb /usr/redis/cptrib需要拷贝目录 # 进入刚刚拷贝目录 cd /usr/redis/cluster # 安装ruby apt-get install ruby apt-get install rubygems #安装执行脚本 gem install redis
-
创建redis集群
#进入redis容器1 docker exec -it redis1 bash # 进入redis目录 cd /usr/redis/src #创建cluster目录 mkdir -p ../cluster #复制redis-trib.rb cp redis-trib.rb ../cluster/ #进入cluster在此目录创建redis集群 cd ../cluster # --replicas 1一个主节点给一个从节点 后面是redisip+端口 ./redis-trib.rb create --replicas 1 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 172.20.0.5:6379 172.20.0.6:6379 172.20.0.7:6379
-
错误汇总
- WARNING: IPv4 forwarding is disabled. Networking will not work.
# 解决命令
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
# 重启network 和docker
systemctl restart network && systemctl restart docker
作者:泪梦红尘
文章出处:https://www.s1g.cn/index.php/docker/8.html