综合练习day1

图片

在这里插入图片描述

创建一个目录,写一个docker-compose

1 | mkdir host
2 | cat docker-compose.yml

内容如下

version: '3.8'
services:
  h1:
    build: .
    image: centos7-sshd
    container_name: h1
    privileged: true
    command: /usr/sbin/init
    hostname: h1
    networks:
      xiuyun_net:

  tomcat1:
    build: .
    image: centos7-sshd
    container_name: tomcat1
    privileged: true
    hostname: tomcat1
    command: /usr/sbin/init
    networks:
      xiuyun_net:

  tomcat2:
    build: .
    image: centos7-sshd
    container_name: tomcat2
    hostname: tomcat2
    privileged: true
    command: /usr/sbin/init
    networks:
      xiuyun_net:

  mysql-master:
    build: .
    image: centos7-sshd
    container_name: mysql-master
    hostname: mysql-master
    privileged: true
    command: /usr/sbin/init
    networks:
      xiuyun_net:
  mysql-slave:
    build: .
    image: centos7-sshd
    container_name: mysql-slave
    hostname: mysql-slave
    privileged: true
    command: /usr/sbin/init
    networks:
      xiuyun_net:
  ansible:
    build: .
    image: centos7-sshd
    container_name: ansible
    hostname: ansible
    privileged: true
    command: /usr/sbin/init
    networks:
      xiuyun_net:

networks:
  xiuyun_net:

Dockerfile

1 | cat Dockerfile
FROM centos:7
RUN yum install -y \
    vim bash-com* openssh-clients openssh-server iproute cronie;\
    yum group install -y "Development Tools";yum clean all;\
    localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG=zh_CN.UTF-8

执行完上面的步骤,执行如下命令

1 | docker-compose up -d  #  启动进程
2 | docker-compose ps     

结果如下图
在这里插入图片描述

实施步骤

1.安装ansible

1 | docker-compose exec ansible bash      #   进入ansible机器
2 | curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 下载epel源
3 | yum -y install ansible     #  安装ansible

与其他管理节点建立信任关系

不检查其他主机的公钥
在ansible主机上修改文件 vi /etc/ansible/ansible.cfg中设置如下选项
在这里插入图片描述
继续在ansible主机上执行如下命令,创建自己的密钥对

1 | ssh-keygen -N '' -f ~/.ssh/id_rsa

在这里插入图片描述

建立hosts资产清单文件

IP 信息可以通过在 宿主机 上执行如下命令获取
在这里插入图片描述
创建一个文件hosts

1 | vim hosts

在这里插入图片描述

给管理的机器设置 root 密码

由于这里是使用容器作为虚拟机的,所以默认情况下,root 用户没有密码,需要我们手动设置。
在宿主机上执行如下命令设置密码

1 | docker-compose exec 服务名称 bash -c 'echo 密码 | passwd root --stdin'
1 | docker-compose exec h1  bash -c 'echo 1 | passwd root --stdin'
2 | docker-compose exec tomcat1 bash -c 'echo 1 | passwd root --stdin'
3 | docker-compose exec tomcat2  bash -c 'echo 1 | passwd root --stdin'
4 | docker-compose exec mysql-master  bash -c 'echo 1 | passwd root --stdin'
5 | docker-compose exec mysql-slave bash -c 'echo 1| passwd root --stdin'

传输公钥

1 | mkdir playbook     #  创建目录
2 | cd playbook        
3 | cat send-pubkey.yml

内容如下

---
- hosts: all
# gather_facts: no
  remote_user: root   
  vars_files:
    - foo.yml    
  tasks:
  - name: Set authorized key taken from file
    authorized_key:    
      user: root            
      state: present
      key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"  
...
1 | vim foo.yml
ansible_ssh_pass: 1

执行playbook

ansible-playbook -i hosts send-pubkey.yml

结果图

在这里插入图片描述
在这里插入图片描述
给另外一台机器安装nginx(在ansible机器上执行操作)

1 | mkdir nginx     #  创建目录
2 | vim nginx.repo  

内容如下

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
cat nginx/install-nginx.yml

内容如下

---
- hosts: nginx
  gather_facts: no
  tasks:
    - name: copy nginx 仓库文件
      copy:
       src: ./nginx.repo
       dest: /etc/yum.repos.d/nginx.repo
    
    - name: instll nginx
      yum:
        name: nginx
        state: present

    - name:  start nginx
      systemd:
         name: nginx
         state: started
...

执行playbook

  ansible-playbook -i hosts nginx/install-nginx.yml 

结果图如下
在这里插入图片描述
在这里插入图片描述

MySQL (部署两台机器)

2.1 部署Mysql 并启动MySQL服务

1 | mkdir mysql
2 | cd mysql
3 | cat install-mysql.yml

内容如下

---
- name: 安装 mysql,并启动服务
  hosts: mysql
  gather_facts: no
  tasks:
    - name: 安装仓库文件
      yum:
        name: https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
        state: present

    - name: 禁用 MySQL 8.0 仓库
      ini_file:
           path: /etc/yum.repos.d/mysql-community.repo
           section: mysql80-community
           option:  enabled
           value: '0'

    - name: 启用 MySQL 5.7 仓库
      ini_file:
           path: /etc/yum.repos.d/mysql-community.repo
           section: mysql57-community
           option: enabled
           value: '1'

    - name: 安装 mysql 社区版
      yum:
        name: mysql-community-server
        state: present
    - name: start mysql
      service:
        name: mysqld
        state: started
...

执行playbook

1 | ansible-playbook -i hosts install-mysql.yml

设置MySQL root 用户的密码

1 | grep password /var/log/mysqld.log        #  过滤密码
2 | mysqladmin -uroot -p'过滤出来的密码'  password 'taotao123'

创库、创表

在这里插入图片描述
创建数据库

 create database db default charset utf8mb4 collate utf8mb4_general_ci;  
 use db;

创建表;

  create table db.stu(
  id int auto_increment primary key,
  name varchar(4),
  age int,
  phone char(11));

插入数据

 insert into stu(name,age,phone)  values('王麻子',32,'13141098899'),
('九筒',32,'13721096541'),('六子',18,'13139192657'),('马邦德',37,'15855996688');

查询数据

查询出 年龄大于 18 的学员姓名

  select name from db.stu where age > 18;

统计出年龄 大于等于 32 的学员数量

  select count(name) from db.stu where age >= 32;
  select count(name) 数量 from db.stu where age >= 32;

统计出每个年龄段的学员数量–>需要用到分组查询

 select age 年龄,count(age) 数量 from db.stu group by age;

按照数量进行排序

 select age 年龄,count(age) 数量 from db.stu group by age order by 数量;

统计出 年龄在 30 到 50 之间的学员信息(id,name,age,phone)

  select id,name,name,age,phone from db.stu where age between 30 and 50;

查出年龄是 32 岁,并且电话号是13721096541 的学员姓名

select name from db.stu where age=32 and phone='13721096541';

配置主从复制

修改主服务器的配置
在主服务上操作,设置二进制日志文件信息并开启二进制日志

1 | cat /etc/my.cnf

内容如下

log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1

第二种

log-bin=/var/log/mysql/mysql-bin
server-id=1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

创建二进制日志文件路径,并授权

 mkdir  /var/log/mysql/
 chown mysql.mysql /var/log/mysql

重启主服务器的MySQL服务

systemctl  restart mysqld

在主服务器上给从库进行授权

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'   IDENTIFIED BY   '密码';

导出主数据库服务器目前的数据(在命令行)

 mysqldump  -uroot  -p'密码'  --all-databases  --master-data=1 > dbdump.db

将导出的数据传递给从服务器

MySQL的主服务器上执行

 scp dbdump.db  root@192.168.64.163:/root/

将数据导入到从服务器

在从服务器上操作

假如 从服务器的 root 初始密码没有修改,需要按照上面 master 提到的方法修改一下

在从服务器 /root/ 目录下执行下面的命令

1 | mysql -uroot -p'密码'   < dbdump.db

配置从服务器的server-id

编辑 /etc/my.cnf 文件,并添加如下内容

log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1

重启服务

systemctl restart mysqld

在从数据库上配置主库信息

查看二进制文件的同步信息

grep '^CHANGE' dbdump.db
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=437;

登录到从库停止从库

 stop slave

登录到 从库设置连接到主机的信息

 CHANGE MASTER TO
 MASTER_HOST='192.168.64.162',
 MASTER_USER='repl',
 MASTER_PASSWORD='密码'
 master_auto_position=1;

关闭防火墙和selinux(主数据库和从数据库)

systemctl stop firewalld
setenforce 0     #

从服务器启动 主从复制的进程

start slave;

查看是否成功
在这里插入图片描述
红色显示框 表示yes,证明成功

Tomcat

部署JDK 环境

mkdir tomcat
cd tomcat
cat install-jdk.yml

内容如下

---
- name: 部署 JDK 环境
  hosts: tomcat
  gather_facts: no
  remote_user: root
  tasks:
    - name: 解压 jdk 包到指定目录 /usr/local/
      ansible.builtin.unarchive:
        src: jdk-8u181.tar.gz
        dest: /usr/local/
        list_files: yes
      register: jdk_dir

    - name: 创建软链接,上部解压后的目录是 jdk1.8.0_181
      ansible.builtin.file:
        src: /usr/local/{{ jdk_dir.files.0 | regex_replace('/.*') }}
        dest: /usr/local/java
        state: link
    - name: 设置环境变量
      copy:
        src: java.sh
        dest: /etc/profile.d/java.sh
    - name: 验证是否部署成功
      shell: java -version
      register: java_version

    - name: 输出验证信息
      debug:
        var: java_version.stderr_lines.0
...

这个yml文件需要的文件

cat java.sh

内容如下

export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

jdk数据包
修改包名

mv  jdk-8u181-linux-x64.tar   jdk-8u181.tar.gz 

部署tomcat

- name: 部署 tomcat
  hosts: tomcat
  gather_facts: no
  remote_user: root
  tasks:
    - name: 解压 tomcat 压缩包到指定目录 /usr/local
      ansible.builtin.unarchive:
        src: tomcat-8.5.63.tar.gz
        dest: /usr/local/
        list_files: yes
      register: ret
    - name: 创建软链接
      ansible.builtin.file:
        src: /usr/local/{{ ret.files.0 | regex_replace('/.*') }}
        dest: /usr/local/tomcat
        state: link
    - name: 设置环境变量
      copy:
        src: tomcat.sh
        dest: /etc/profile.d/tomcat.sh
    - name: 验证是否成功
      shell: /usr/local/tomcat/bin/version.sh
      register: tomcat_version
    - name: 输出执行命令的结果
      when: tomcat_version.rc == 0
      debug:
        msg: "{{ tomcat_version.stdout_lines.0 }}"

需要的文件为:

cat tomcat.sh

内容如下

export TOMCAT_HOME=/usr/local/tomcat/

tomcat数据包
在这里插入图片描述
修改包名

mv apache-tomcat-8.5.63.tar   tomcat-8.5.63.tar.gz
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值