docker-ce的离线安装与redis哨兵部署看这篇就够了

一、Docker安装

确认部署的linux Centos7系统内核在3.10及以上

uname -r  #查询内核命令
cat /etc/redhat-release   #查看版本当前操作系统发行版信息
1、准备文件

Docker安装包:docker-19.03.3.tgz
docker配置文件:docker.service
Centos+jdk8镜像(在本地制作docker镜像):centos-java.tar.gz
将上面的文件通过FTP传到服务器目录下/app/docker/images

mkdir -p /app/docker/images  #创建目录
2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下

需root权限

tar -xvf docker-19.03.3.tgz
cp docker/* /usr/bin 
cp docker.service /etc/systemd/system/
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
3、验证
systemctl status docker #查看Docker状态
docker -v #查看Docker版本
4、创建用户、启动

#使用root权限操作

groupadd appdeploy   #增加appdeploy用户组
useradd -d /home/appdeploy -s /bin/bash -g appdeploy -G docker appdeploy  #新增appdeploy用户,所属组
groupadd docker  #添加docker用户组
usermod -aG docker appdeploy  #将appdeploy用户加入docker用户组 
systemctl restart docker	#重启docker
#su切换或者退出当前账户再重新登入
su appdeploy  #再切换到原来的应用用户以上配置才生效
5、检查验证
systemctl status docker  #查看Docker状态
chown -R appdeploy:appdeploy /app   #将/app目录赋予appdeploy用户

二、Docker部署redis哨兵

准备文件
redis启动会有告警,需提前设置系统参数:点击这里
Redis镜像:appdeploy-redis.tar.gz
配置文件:点击这里获取
Redis主配置文件:redis1.conf
Redis从1配置文件:redis2.conf
Redis从2配置文件:redis3.conf
哨兵配置文件:sentinel.conf

(一)部署redis主从

1、确认docker环境已装好并已启动
systemctl status docker #检测命令
#镜像文件appdeploy-redis.tar.gz放到/app/docker/images下
#导入镜像
docker load -i appdeploy-redis.tar.gz
2、创建目录、创建日志文件、赋权限
mkdir -p /app/docker/redis-sentinel/{dat,log,etc,run,back}	

redis1.conf,sentinel.conf文件
配置放到目录下:/app/docker/redis-sentinel/etc

touch /app/docker/redis-sentinel/log/redis.log #创建日志文件

#将redis1.conf(主),redis2.conf(从),redis3.conf(从)放到对应机器的etc目录下
#从的配置文件需修改配置项:ip, port
replicaof 10.100.0.3 6379

chmod -R 777 /app/docker/redis-sentinel #赋权
3、启动

映射端口为:6379:6379
#master启动,使用 redis1.conf,挂载了日志,数据,配置

docker run -d --name redis-3-1 -p 6379:6379 -e 'echo never>/sys/kernel/mm/transparent_hugepage/enabled' -v /app/docker/redis-sentinel/dat:/app/redis/dat -v /app/docker/redis-sentinel/etc/redis1.conf:/app/redis/etc/redis1.conf -v /app/docker/redis-sentinel/log/redis.log:/app/redis/log/redis.log -v /app/docker/redis-sentinel/run:/app/redis/run  --privileged=true appdeploy-redis:latest redis-server /app/redis/etc/redis1.conf

#slave1启动,使用 redis2.conf,注意需要修改的replicaof配置,端口映射6379:6379

docker run -d --name redis-3-2 -p 6379:6379 -v /app/docker/redis-sentinel/dat:/app/redis/dat -v /app/docker/redis-sentinel/etc/redis2.conf:/app/redis/etc/redis2.conf -v /app/docker/redis-sentinel/log/redis.log:/app/redis/log/redis.log -v /app/docker/redis-sentinel/run:/app/redis/run  --privileged=true appdeploy-redis:latest redis-server /app/redis/etc/redis2.conf

#slave2启动,使用 redis3.conf,注意需要修改replicaof配置,端口映射6379:6379

docker run -d --name redis-3-3 -p 6379:6379 -v /app/docker/redis-sentinel/dat:/app/redis/dat -v /app/docker/redis-sentinel/etc/redis3.conf:/app/redis/etc/redis3.conf -v /app/docker/redis-sentinel/log/redis.log:/app/redis/log/redis.log -v /app/docker/redis-sentinel/run:/app/redis/run --privileged=true appdeploy-redis:latest redis-server /app/redis/etc/redis3.conf
docker stop redis-3-1 #停止(redis-3-1对应容器名)
4、检查验证

方法一:

redis-cli -h host -p port -a password #Redis远程连接命令
info #查看信息

方法二:

docker exec -it redis-3-1 bash  #进容器查看redis-3-1为容器名或使用容器id

redis-cli #连接redis

Info #查看信息

(二)部署redis哨兵

哨兵配置文件使用同一个:sentine.conf

1、导入配置、创建日志文件、赋权
touch /app/docker/redis-sentinel/log/sentinel.log #创建日志文件

#导入sentinel.conf到/app/docker/redis-sentinel/etc下,并修改以下配置项的ip,port
sentinel monitor mymaster 10.203.198.196 6379 2
#赋权

chmod -R 777 /app/docker/redis-sentinel/log/sentinel.log
chmod -R 777 /app/docker/redis-sentinel/etc/sentinel.conf

2、启动
生产注意修改端口为:26379:26379
#第一台哨兵

docker run -d --name sentinel-3-1 -p 26379:26379 -v /app/docker/redis-sentinel/etc/sentinel.conf:/app/redis/etc/sentinel.conf -v /app/docker/redis-sentinel/log/sentinel.log:/app/redis/log/sentinel.log --privileged=true appdeploy-redis:latest redis-sentinel /app/redis/etc/sentinel.conf

#第二台哨兵

docker run -d --name sentinel-3-2 -p 26379:26379 -v /app/docker/redis-sentinel/etc/sentinel.conf:/app/redis/etc/sentinel.conf -v /app/docker/redis-sentinel/log/sentinel.log:/app/redis/log/sentinel.log --privileged=true appdeploy-redis:latest redis-sentinel /app/redis/etc/sentinel.conf

#第三台哨兵

docker run -d --name sentinel-3-3 -p 26379:26379 -v /app/docker/redis-sentinel/etc/sentinel.conf:/app/redis/etc/sentinel.conf -v /app/docker/redis-sentinel/log/sentinel.log:/app/redis/log/sentinel.log --privileged=true appdeploy-redis:latest redis-sentinel /app/redis/etc/sentinel.conf

3、检查验证
#查看日志sentinel.log

1:X 24 Oct 2019 11:19:50.306 # +monitor master mymaster 10.20.19.196 6379 quorum 2
1:X 24 Oct 2019 11:19:50.308 * +slave slave 10.20.19.199:6479 10.20.19.199 6379 @ mymaster 10.20.19.196 6379
1:X 24 Oct 2019 11:19:50.309 * +slave slave 10.20.19.198:6479 10.20.19.198 6379 @ mymaster 10.20.19.196 6379

(三)系统参数设置

处理redis启动的警告信息
1、TCP Backlog警告
临时

[root@centos224]# echo 1024 > /proc/sys/net/core/somaxconn

永久

[root@centos224]# echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf

2、bgsave警告,可能因内存不够分配导致返回失败
临时

[root@centos224]# echo 1 > /proc/sys/vm/overcommit_memory

永久

[root@centos224]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

3、透明大页警告
临时

[root@centos224]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久(测试无效,使用临时方法)

[root@centos224]# vi /etc/rc.local
if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi

以上执行完后执行以下命令使配置生效

[root@centos224]# sysctl -p
[root@centos224]# source /etc/rc.local

若发现启动redis后日志还有报TCP Backlog信息
需进入到容器中设置配置

docker exec -it redis-3-1 bash  # redis-3-1为容器名或使用容器id
echo 1024 > /proc/sys/net/core/somaxconn  #执行命令

三、问题FAQ

1、启动redis容器报错,写入权限问题
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: 
starting container process caused "process_linux.go:449: 
container init caused \"write /proc/self/attr/keycreate: 
permission denied\"": unknown.

处理方法:

vi /etc/selinux/config  #需root权限
/etc/selinux下的config文件中的SELINUX属性改为disabled 

需重启linux

shutdown -r #重启,1min后系统重启
shutdown -c #取消重启
2、启动redis容器报错,docker.sock无权限:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:
/var/run/docker.sock:
 Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create?name=redis-3-2: dial unix /var/run/docker.sock: connect: permission denied.

处理方法:
创建docker用户组,并将点击参考这里

groupadd docker  #添加docker用户组
usermod -aG docker appdeploy  #将appdeploy用户加入docker用户组 
systemctl restart docker	#重启docker
#su切换或者退出当前账户再重新登入
su appdeploy  #再切换到原来的应用用户以上配置才生效
3、创建用户
groupadd appdeploy   #增加appdeploy用户组
#新增appdeploy用户,所属组
useradd -d /home/appdeploy -s /bin/bash -g appdeploy -G docker appdeploy  
4、哨兵启动后无法发现主或者从

(1)、首先检查conf配置文件。
(2)、检查防火墙状态,6379端口是否打开,命令参考本文章 (四、4)

四、其它

1、内网文件传输

拷贝目录下的所有文件,包含目录本身到目标机器上

scp -r /app/docker root@ip:/app
scp /app/docker/images/docker.service root@ip:/app/docker/images/ #拷贝单个文件
2、docker常用操作命令
docker save -o myimages.tar.gz myimages:latest  #导出镜像
docker load -i myimages.tar.gz #导入镜像
docker ps -a 					#查看所有容器
docker stop 容器名/容器id		#停止服务
docker start 容器名/容器id		#启动服务
docker rm 容器名/容器id 		#删除容器
docker exec -it 容器名/容器id bash 	#进入容器(exit退出)
docker ps -a|grep Exited|awk{print $1}#显示所有容器,过滤出Exited状态的容器

docker rm docker ps -a|grep Exited|awk '{print $1}' #删除Exited状态的容器:
docker rm $(docker ps -a -q) #删除所有容器:
docker rm $(docker ps -qf status=exited) #删除Exited状态的容器:
docker container stop $(docker container ls -a -q) 	#批量停止容器
docker container rm $(docker container ls -a -q)		#批量删除容器
docker image rm $(docker image ls -a -q)				#批量删除镜像
3、用户权限操作相关命令
chown -R appdeploy:appdeploy /app	#修改目录所属用户、组
chmod -R 777 /app/docker/redis-sentinel		#R递归修改目录下的文件xwr权限
cat /etc/passwd 				#查看所有的用户信息
cat /etc/passwd|grep 用户名   	#用于查找某个用户
cat /etc/group 					#查看所有组信息
groups appdeploy 						#查看用户所属组
groupadd appdeploy					#增加用户组
#新增appdeploy用户,所属组(appdeploy),附属组(docker,多个用“,”分隔)
useradd -d /home/appdeploy -s /bin/bash -g appdeploy -G docker appdeploy
usermod -d /home/appdeploy appdeploy		#修改所属用户目录
4、防火墙命令
service firewalld start  #开启
service firewalld restart  #重启
service firewalld stop #关闭
firewall-cmd --list-all  #查看防火墙规则
firewall-cmd --query-port=8080/tcp #查询端口是否开放
#开放端口
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --permanent --add-port=26379/tcp
firewall-cmd --permanent --add-port=8080/tcp
#移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值