本文目录:
- 1、云主机文件系统readonly处理案例
- 2、方德系统部署
- 3、群晖docker怎么运行debian
- 4、linux怎么启动docker
- 5、如何安装和配置 HUBOT ?
- 6、一台windiws可以跑不同版本的redis吗
云主机文件系统readonly处理案例
本文由作者朱益军授权网易云社区发布。
背景
维护巡检云主机时,发现有一台运行redis的云主机状态显示维护中,登录该实例查看,系统盘变成readonly。本文简单分析该问题出现原因,并为运维人员提供常见处理方法及建议。
故障分析
查看云主机dmesg信息发现,系统运行过程中python进程发生segfault,随后vda(云主机配置virtio-blk,故盘符显示为vda)系统盘I/O error。
基本可确定是业务把系统盘写坏了。通常发生该问题的场景有二:
一、云主机和宿主机IO繁忙,云主机的IO请求得不到及时的响应,从而产生磁盘IO错误,为了保护磁盘数据会remount分区为只读;
二、云主机被强制关机,导致磁盘出现文件系统错误故障。
故障处理
通常的解决方法是重启系统以root用户进入单用户模式, 运行fsck.ext3 –y /dev/vda(如果是ext4使用fsck.ext4修复),/dev/vda是系统/根分区。修复完reboot进入系统。以debian系统为例:
1、重启系统,grub菜单会出现正常启动和修复模式( recovery mode )启动两个菜单项,选择修复模式启动;
2、进入修复模式,运行fsck工具修复;
3、重启进入正常模式启动。
注意:
1、运维人员在重启云主机之前尽量先收集一些关键的日志,如/var/log下面的一些日志、dmesg等,有条件也要收集宿主机的日志;
2、fsck是Linux内核自带工具,它不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。 fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。建议在单用户模式下运行。如果扫描正常运行中的系统,会造成系统文件损坏,需要root权限执行。
建议与思考
1、当前开发要定位问题,需要申请宿主机权限等流程,无法及时上去定位;
2、当前云主机的日志收集功能尚不完善,呈现的日志比较杂、乱、实用性不高,需要适当进行修改调整。另外,运维人员也不知道要收集哪些日志可支撑开发定位;
开发正在考虑开发一个一键式日志收集工具,集成到版本中,定期采集系统数据并归档,或者在发生故障时,由运维先收集分析,再交给开发定位,这样效率会高一些。
更多网易技术、产品、运营经验分享请访问 网易云社区 。
相关文章:
【推荐】 网易云易盾发布多国家多语种内容安全服务,助力中国互联网出海
【推荐】 Spring-Boot自定义Starter实践
【推荐】 一文带你了解 Raft 一致性协议的关键点
方德系统部署
1、jdk
2、mysql
3、redis
4、nginx
在java官网上寻找debian版本的jdk jdk-18_linux-x64_bin.deb 通过直接在桌面双击实现了安装
安装
开通权限
查看3306端口的状态:
上图表示3306端口没有开启
开启步骤:
编辑配置文件
将 bind-address 前加 # 即可
启动
开通外网访问
尝试使用外网访问
开始安装
安装成功可以访问了
群晖docker怎么运行debian
将Docker安装到CentOS或Fedora上
要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令:
$ sudo yum install docker-io
$ sudo service docker start
$ sudo chkconfig docker on
要将Docker安装到Fedora上,使用下面这些命令:
$ sudo yum install docker-io
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service
将Docker安装到CentOS或Fedora上后,你需要将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。为此,使用这个命令:
$ sudo usermod -a -G docker $USER
退出,重新登录,以激活群组变更。
至此,你应该能够以非特权用户的身份来运行docker命令了。
Docker的基本用法
你想启动一个新的Docker容器,就需要确定为容器使用哪个Docker映像。你可以搜索官方的Docker映像索引(),上面列出了公开可用的Docker映像。Docker索引包括:Docker团队管理的Linux基本映像(比如Ubuntu、Debian、Fedora和 CentOS),以及用户贡献的自定义映像(比如MySQL、Redis和WordPress)。
比如说,想在交互模式开启动一个Ubuntu容器,就要运行下面这个命令。容器一启动,最后的变量“/bin/bash”就在容器里面执行。
$ docker run -i -t ubuntu /bin/bash
你头一次运行上面这个命令时,它会通过网络下载可用的一个或多个Ubuntu docker映像,然后使用该映像,启动Docker容器。Ubuntu容器会立马启动,你会看到容器里面的控制台提示符。你可以访问容器沙箱里面的功能完备的Ubuntu操作系统。
如果你在提示符处键入“exit”,就会退出容器,容器会被停止。
想列出所有的容器(包括已停止的容器),运行这个命令:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a08a0b2bb4c ubuntu:14.04 /bin/bash About a minute ago Exit 0 cocky_ritchie
想在守护进程模式下重新启动某个已停止的容器:
$ docker start [container-id]
想移除某个已停止的容器:
$ docker rm [container-id]
想连接到后台运行的容器,以便查看容器或与之交互:
$ docker attach [container-id]
你可以随意定制某个运行中的容器(比如安装新软件)。如果你想把变更内容保存在当前容器中,先要在提示符处键入“exit”,退出容器的交互模式。然后使用这个命令,将已变更的映像保存为不同的映像:
$ docker commit [container-id] [new-image-name]
想获得你容器的容器ID,可以使用之前描述的“docker ps –a”命令。
一旦你已构建了像这样的新映像,就可以借助该映像启动一个新的容器了。
你还可以下载任何公开的容器映像(比如ubuntu,bowery/mysql),将它们保存到本地软件库中,如下所示。
$ docker pull [image name]
想查看所有本地下载/保存的容器映像:
$ docker images
你可以选择从哪个特定的映像来启动容器:
$ docker run -i -t [image-id] /bin/bash
想从本地软件库移除某个容器映像:
$ docker rmi [image-id]
将Docker安装到CentOS或Fedora上
要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令:
$ sudo yum install docker-io
$ sudo service docker start
$ sudo chkconfig docker on
要将Docker安装到Fedora上,使用下面这些命令:
$ sudo yum install docker-io
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service
将Docker安装到CentOS或Fedora上后,你需要将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。为此,使用这个命令:
$ sudo usermod -a -G docker $USER
退出,重新登录,以激活群组变更。
至此,你应该能够以非特权用户的身份来运行docker命令了。
Docker的基本用法
你想启动一个新的Docker容器,就需要确定为容器使用哪个Docker映像。你可以搜索官方的Docker映像索引(),上面列出了公开可用的Docker映像。Docker索引包括:Docker团队管理的Linux基本映像(比如Ubuntu、Debian、Fedora和 CentOS),以及用户贡献的自定义映像(比如MySQL、Redis和WordPress)。
比如说,想在交互模式开启动一个Ubuntu容器,就要运行下面这个命令。容器一启动,最后的变量“/bin/bash”就在容器里面执行。
$ docker run -i -t ubuntu /bin/bash
你头一次运行上面这个命令时,它会通过网络下载可用的一个或多个Ubuntu docker映像,然后使用该映像,启动Docker容器。Ubuntu容器会立马启动,你会看到容器里面的控制台提示符。你可以访问容器沙箱里面的功能完备的Ubuntu操作系统。
如果你在提示符处键入“exit”,就会退出容器,容器会被停止。
想列出所有的容器(包括已停止的容器),运行这个命令:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a08a0b2bb4c ubuntu:14.04 /bin/bash About a minute ago Exit 0 cocky_ritchie
想在守护进程模式下重新启动某个已停止的容器:
$ docker start [container-id]
想移除某个已停止的容器:
$ docker rm [container-id]
想连接到后台运行的容器,以便查看容器或与之交互:
$ docker attach [container-id]
你可以随意定制某个运行中的容器(比如安装新软件)。如果你想把变更内容保存在当前容器中,先要在提示符处键入“exit”,退出容器的交互模式。然后使用这个命令,将已变更的映像保存为不同的映像:
$ docker commit [container-id] [new-image-name]
想获得你容器的容器ID,可以使用之前描述的“docker ps –a”命令。
一旦你已构建了像这样的新映像,就可以借助该映像启动一个新的容器了。
你还可以下载任何公开的容器映像(比如ubuntu,bowery/mysql),将它们保存到本地软件库中,如下所示。
$ docker pull [image name]
想查看所有本地下载/保存的容器映像:
$ docker images
你可以选择从哪个特定的映像来启动容器:
$ docker run -i -t [image-id] /bin/bash
想从本地软件库移除某个容器映像:
$ docker rmi [image-id]
linux怎么启动docker
2.1 在测试机启动容器,安装ssh
docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会关闭。
apt-get install openssh-server #安装ssh
#需要修改/etc/sshd/sshd_config文件中内容
PermitRootLogin yes
UsePAM no
2.2 启动ssh,容器以后台方式运行
docker run -d -p 50001:22 容器id /usr/sbin/sshd-D
#容器id可通过 docker ps-a查看,最上面的为最新的。
2.3 通过ssh连接到容器安装软件
ssh root@127.0.0.1-p 50001
#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。
2.4 服务安装完成后,停止容器。
docker stop 容器id #停止运行的容器
2.5 把容器提交生成最新的镜像
docker commit 容器id debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)
2.6 打包镜像
docker save debian02 /root/debian02.tar #debian02镜像打包
2.7 在另外的机器上导入镜像
docker load debian02.tar #导入镜像
docker images #查看存在的镜像
2.8 启动容器
docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local
#此处是我测试机器启动命令,指定主机名与端口映射。
#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。
docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。
3、关于docker容器的端口映射
由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:docker run -h="activemq" --name activemq -d -p 51000:22 -p 51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p 51007:8888 debian/base/etc/rc.local
#此处我把mysql,redis,nginx,ssh都进行了映射。
后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。docker stop activemq
docker start activemq
当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:
docker网络配置:
4、关于docker容器的多程序开机自动运行
docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。
多程序开机自动运行方法:
可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。
后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start 容器ID即可。
如何安装和配置 HUBOT ?
Mac 下,我用的是homebrew 作为包管理系统
1)安装node.js
brew install node.js
2)安装npm — node package manager
curl | sh
3)进入hubot ,用npm 安装相关依赖
npm install
4)shell 测试一下
export PATH=”node_modules/.bin:$PATH”
./bin/hubot
在这个命令行提示符下
Hubot
输入 hubot pug me 看看效果,如果返回一个包含图片url 的json 就成功了
我的Linux 是Debian
1)安装相关依赖包
# apt-get install build-essential libssl-dev git-core redis-server libexpat1-dev
2)安装node.js
# wget
# tar xf node-v0.6.9.tar.gz -C /usr/local/src cd /usr/local/src/node-v0.6.9
# ./configure make make install
3)进入hubot ,用npm 安装相关依赖
npm install
4)编写用于Campfire 的启动脚本
# vim run
--------------------------
#!/bin/bash
##
## Wrapper for Hubot startup
##
HUBOT="/opt/hubot/bin/hubot"
NAME="marvin"
ADAPTER="campfire"
HUBOT_CAMPFIRE_TOKEN="marvin's api token" HUBOT_CAMPFIRE_ACCOUNT="subdomain"
HUBOT_CAMPFIRE_ROOMS="roomid1, roomid2"
OPTS="--name ${NAME} --adapter ${ADAPTER}"
export HUBOT_CAMPFIRE_TOKEN
export HUBOT_CAMPFIRE_ACCOUNT
export HUBOT_CAMPFIRE_ROOMS
until ${HUBOT} ${OPTS};
do echo "Hubot crashed with exit code $?. Restarting." 2
sleep 5
done
---------------------------
这里说明一下,申请一个Campfire 账号给hubot 使用,需要它的API token ,和它需要进入的room 的id。
NAME 是机器人的名字
HUBOT_CAMPFIRE_TOKEN 是申请的那个账号的api token
HUBOT_CAMPFIRE_ACCOUNT 这里是你的 的xxx ,而不是hubot 的账号
HUBOT_CAMPFIRE_ROOM 聊天室的id ,用逗号分隔
chmod +x run
一台windiws可以跑不同版本的redis吗
一台windiws不可以跑不同版本的redis。
扩展知识;
Redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。
如何在window上让redis跑起来:
在Windows上,安装Ubuntu上的Bash,这是首选方法。
从开始搜索打开或关闭Windows功能(类型turn)
选择适用于Linux的Windows子系统(测试版)
一旦安装,可以通过从Windows命令提示符键入 bash 在Ubuntu上运行bash 。要安装最新版本的Redis,我们需要使用一个存储库来维护Ubuntu和Debian服务器的最新软件包
启动redis
【debian配置redis】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: