Docker Volume 的那点事

使用 的过程中,数据保存是很重要的一环,因为容器一旦被删除,容器内的数据也将一并被删除。而 Volume 正是为了解决这个问题而存在,它可以映射一个物理机上的文件夹到容器内部,用于保存容器产生的数据。下面就来说说 Dokcer Volume 的使用及注意事项。

Continue reading “Docker Volume 的那点事”

Docker Volume 的那点事

Docker build 的几种方式

build 的帮助文件中我们可以看到,docker build 不仅能支持本地 Dcokerfile 的构建,还可以从 URL 以及标准输入(-)中读取信息进行构建,下面就来说说 docker build 的几种构建方式。

[hzz@ TEST]$ docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Continue reading “Docker build 的几种方式”

Docker build 的几种方式

magedu pro 第七周作业

1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;

脚本内容如下:

#!/usr/bin/env 

loginshell=$( /etc/|cut -d: -f7);

loginct=0;
nologinct=0;

for i in $loginshell;do
  if [[ "$i" == "/sbin/nologin" ]]; then
    let nologinct+=1;
  else
    let loginct+=1;
  fi
done

 "可登录的用户数为:$loginct";
 "不可登录的用户数为:$nologinct";

执行结果如下:

[hzz@ ~]$ bash test.sh 
可登录的用户数为:5
不可登录的用户数为:20
[hzz@ ~]$

Continue reading “magedu pro 第七周作业”

magedu pro 第七周作业

Linux 使用 autojump 直达目录

介绍这款神器之前,先来确认一个问题。在 的使用过程中,如何快速地到达指定目录?

很多人肯定会说,使用 tab 补全大法啊,笨!

嗯,没错,在没认识到 之前,我也是这么想的,但熟悉使用过这款神器后,才明白什么叫所达即所想。也就是无需考虑中间还有多少层目录,你只需要记住最终目录的名称,就可以快速进入该目录……

Continue reading “Linux 使用 autojump 直达目录”

Linux 使用 autojump 直达目录

OpenLDAP HA 部署

简介

这个不用说了,开源的轻量级目录访问协议。本次使用 MirrorMode 双主镜像的同步机制,实现两个节点间的数据同步。两台服务器互相以推的方式实现数据的同步。

OpenLDAP 同步条件

  1. OpenLDAP 服务器之间需要保持时间同步;
  2. OpenLDAP 软件包版本保持一致;
  3. OpenLDAP 节点之间域名可以相互解析;
  4. OpenLDAP 各节点需要提供完全一样的配置及目录树信息(BaseDn 需要保证一致)。

安装 OpenLDAP

建议使用 安装。

 sudo yum install -y openldap openldap-servers openldap-devel openldap-clients

OpenLDAP HA 配置

由于新版的 OpenLDAP 官方建议使用命令行或者导入 ldif 文件的方式进行配置,所以已经不再提供 slapd.conf 文件,但是对于初学者来说,使用 ldif 格式导入配置的方式有点难于理解。还好官方保留了导入 slapd.conf 的方式,使得我们可以自行创建 slapd.conf 文件再自行导入。

创建 slapd.conf 文件并填入以下内容:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include     /etc/openldap/schema/core.schema
include     /etc/openldap/schema/collective.schema
include     /etc/openldap/schema/corba.schema
include     /etc/openldap/schema/cosine.schema
include     /etc/openldap/schema/duaconf.schema
include     /etc/openldap/schema/dyngroup.schema
include     /etc/openldap/schema/inetorgperson.schema
include     /etc/openldap/schema/java.schema
include     /etc/openldap/schema/misc.schema
include     /etc/openldap/schema/nis.schema
include     /etc/openldap/schema/openldap.schema
include     /etc/openldap/schema/pmi.schema
include     /etc/openldap/schema/ppolicy.schema
# Define global ACLs to disable default  access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral  ://root.openldap.org

pidfile     /run/openldap/slapd.pid
argsfile    /run/openldap/slapd.args

# Load dynamic backend modules:
# modulepath    /libexec/openldap
# moduleload    back_mdb.la
# moduleload    back_.la
modulepath  /usr/lib64/openldap
moduleload  syncprov.la

# Sample security restrictions
#  Require integrity protection (prevent hijacking)
#  Require 112-bit (3DES or better) encryption for updates
#  Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#  Root DSE: allow anyone to  it
#  Subschema (sub)entry DSE: allow anyone to  it
#  Other DSEs:
#      Allow self write access
#      Allow authenticated users  access
#      Allow anonymous users to authenticate
#  Directives needed to implement policy:
# access to dn.base="" by * 
# access to dn.base="cn=Subschema" by * 
# access to *
#  by self write
#  by users 
#  by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to  anything but restricts
# updates to rootdn.  (e.g., "access to * by * ")
#
# rootdn can always  and write EVERYTHING!

#######################################################################
# MDB database definitions
#######################################################################

database    bdb
#maxsize       1073741824
suffix      "dc=,dc=com"
rootdn      "cn=Manager,dc=,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw      {SSHA}Owxt0yhMvU41kWbik1q2KfNygDPCuzdm
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory   /var/lib/ldap
# Indices to maintain
index   objectClass eq

## HA 配置

# 增加索引
index entryCSN,entryUUID eq
overlay syncprov
# 执行的条件,修改 1 个条目或满足 1 分钟时执行
syncprov-checkpoint 1 1
syncprov-sessionlog 100
# 保证唯一
serverID    1
# 同步进程 id,必须为三位数
syncrepl      rid=123
              # 另一节点的 
              provider=ldap://10.65.252.57
              # 认证方式为简单模式
              bindmethod=simple
              # 用户名
              binddn="cn=Manager,dc=magedu,dc=com"
              # 密码
              credentials=123456
              # BaseDn
              searchbase="dc=magedu,dc=com"
              schemachecking=off
              type=refreshAndPersist
              # 尝试时间,切记之间有空格
              retry="60  +"
mirrormode on

根据自己的环境修改 dc 以及 provider 的地址。

修改完成后,使用以下命令导入配置:

rm -rf /etc/openldap/slapd.d/*;
slaptest -f slapd.conf -F /etc/openldap/slapd.d;
chown -R ldap:ldap /etc/openldap/*;
service slapd restart;

另一节点的配置方式相同,注意更改 provider 的地址即可。

配置

建议使用 yum 安装 Keepalived:

sudo yum isntall -y keepalived;

修改 /etc/keepalived/keepalived.conf 配置如下:

! Configuration File for keepalived
global_defs {
    notification_email {
       xhh@cmss.chinamobile.com
    }
   notification_email_from  root@cmss.chinamobile.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   # 节点标识
   router_id ldap_A
}
vrrp_instance VI_1 {
   state MASTER
   # 使用的网卡为 eth0
   interface eth0
   # 虚拟路由标识,两个节点必须一致
   virtual_router_id 150
   # 优先级,两个节点的优先级高者为 master
   priority 100
   # 不抢占
   nopreempt
   advert_int 1
  authentication {
     auth_type PASS
     auth_pass 1111
  }
  virtual_ipaddress {
    10.133.47.180
  }
   notify_master "/etc/keepalived/to_master.sh"
   notify_backup "/etc/keepalived/to_master.sh"
   notify_stop "/etc/keepalived/to_stop.sh"
   track_script {
      check_ldap_server_status
   }
}
vrrp_script check_ldap_server_status {
  script "/etc/keepalived/check-ldap-server.sh"
  # 脚本检测时间间隔
  interval 3
  # 脚本返回失败值时 优先级权重减 5
  weight -5
}

check-ldap-server.sh 的内容为:

#!/bin/bash
ldapPid=$(ps -ef |grep slapd|grep -v grep|awk '{print $2}'|grep -v PID)
if [ "$ldapPid" == "" ]; then
   service keepalived stop
   exit 1
else
   exit 0
fi

to_master.sh 的内容为:

#!/bin/bash
service slapd start

to_stop.sh 的内容为:

#!/bin/bash
service slapd stop

另一节点的 Keepalived 配置方式相同,只需要修改以下三个字段的值即可:

router_id   ldap_B
state   BACKUP
priority    98  

更多的 Keepalived 配置可查看:《【转载】keepalived 工作原理和配置说明

配置完成后重启 Keepalived 即可:

service keepalived restart;
OpenLDAP HA 部署

CentOS 7 关闭 iptables 和 SELinux

6 换到 7,虽然服务管理命令从 service 换成了 systemctl,但总归是通用的。但今天在新装主机上关闭防火墙时,经历了以下错误:

[hzz@ ~]$ sudo service  stop
[sudo] password for hzz: 
Redirecting to /bin/systemctl stop  .service
Failed to stop .service: Unit .service not loaded.
[hzz@magedu ~]$ 

Continue reading “CentOS 7 关闭 iptables 和 SELinux”

CentOS 7 关闭 iptables 和 SELinux

Linux 获取外部 IP 及当前地址

说到获取外部 ,很多人的第一反应就是百度一下 IP 关键字,即可在搜索结果内获取到本机的外部 IP。但这种方式仅适用于有 GUI 和浏览器的前提下,若系统没装 GUI,只有 CLI 的情况下呢?相信很多人都有 curl http://www.ip138.com 的体验,那乱七八糟的输出,还真是苦不堪言。

有没有一种便捷的,可以快速获取到 外部 IP 的方法呢?

Continue reading “Linux 获取外部 IP 及当前地址”

Linux 获取外部 IP 及当前地址

magedu pro 第六周作业

1、请详细描述 系统的启动流程(详细到每个过程系统做了哪些事情)。

由于篇幅过长,已单独写成一篇博客,详见:《CentOS 系统启动流程

2、为运行于虚拟机上的 CentOS 6 添加一块新硬件,提供两个主分区。

  • (1)为硬盘新建两个主分区;并为其安装
  • (2)为硬盘的第一个主分区提供内核和 ramdisk 文件;为第二个分区提供 rootfs 。
  • (3)为 rootfs 提供 、 ls 、 程序及所依赖的库文件。
  • (4)为 grub 提供配置文件。
  • (5)将新的硬盘设置为第一启动项并能够正常启动目标主机。

Continue reading “magedu pro 第六周作业”

magedu pro 第六周作业

使用 kickstart 文件自动安装 CentOS

说到 ,就不能不说 anaconda。什么是 anaconda 呢?简单的来说,就是使用光盘安装系统时引导安装程序,而 ,就是 anaconda 的配置文件。

isolinux

在说 anaconda 是如何启动的之前,先来说说 isolinux 的启动流程和它的配置文件。

Continue reading “使用 kickstart 文件自动安装 CentOS”

使用 kickstart 文件自动安装 CentOS