利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 M

Chef 提供了一套自动化安装和配置软件的工具。它允许开发者以模块化的方式(cookbook)来定义软件的安装和配置流程(recipe),以及流程中的可定制参数(attribute)。当需要在特定的环境中创建软件服务时,用户指定模块名称以及相应的参数值,Chef 会负责在目标环境中执行预定义的安装和配置流程。

使用 Chef 需要安装 Chef Server 以及 Chef Development Kit(ChefDK)。Chef Server 负责保存开发者提供的软件安装和配置流程定义,并在目标机器上执行。ChefDK 则是开发者用来定义软件安装和配置流程的工具。

Mariadb Galera Cluster

Mariadb Galera Cluster 是 Mariadb 提供的一种同步多主节点的集群模式。这种模式与传统的 Maraidb Replication 功能的区别主要在于:

Galera Cluster 中的所有节点都在提供数据库服务。而 Replication 模式下只有一个主节点在提供数据库服务,其余的 Slave 节点虽然与主节点进行数据同步,但在其成为主节点之前并不提供数据库服务。

Galera Cluster 下的数据库操作都是同步的,也就是当一个事务结束时,所有节点上都已经包含了这一事务所做的修改。换言之,在任何一个时刻,集群中每个节点上的数据都是同步的。而在传统的 Replication 模式下,主从节点的数据同步是独立于修改数据的事务,同步通常存在一定的时间延迟。

部署准备

准备工作主要包括:

自动安装流程

本文所描述的自动安装流程的目标是在至少两台机器上安装 Mariadb Galera Cluster,主要包含如下几个步骤:

添加 Chef Server 上提供的 yum 源并安装 Mariadb。

开启 Cluster 节点之间的互相通信,主要是在操作系统上配置域名解析以及开放相应的防火墙端口。

开启 Galera Cluster。

修改操作系统上的 Mariadb 服务启动方式。注意虽然 Galera Cluster 里所有节点都可以同时提供数据库服务,但依照它们被加入 Cluster 的时间顺序,第一个节点的启动方式和其余节点有所不同。

详细实现

首先创建一个名为 mariadb-galera-cluster 的 cookbook 和名为 test.json 的 environment 文件,如清单 1 所示。创建 cookbook 会在当前目录下生成一个同名的目录,后续定义的大部分文件都放在这个目录下。environment 文件将包含所有针对当前环境的参数值,例如当前环境下节点的 IP 地址和域名。创建完成后的目录结构如清单 2 所示。

清单 1. 创建 cookbook 和 environment

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

knife cookbook create mariadb-galera-cluster

cat environments/test.json <<EOF

{

  "name": "test",

  "description": "",

  "cookbook_versions": {

 

  },

  "json_class": "Chef::Environment",

  "chef_type": "environment",

  "default_attributes": {

 

  },

  "override_attributes": {

 

  }

}

EOF

 

清单 2. 目录结构

1

2

3

4

5

6

7

8

9

10

11

 

..

environments/

    test.json

cookbooks/

    mariadb-galera-cluster/

        recipes/

            default.rb

        templates/

            default/

        attributes/

            default.rb

 

安装 Mariadb

利用在 Chef Server 机器上配置的 yum 源来安装 Mariadb,需要在目标机器的/etc/yum.repos.d 目录下加入相应的配置文件。将该配置文件的内容预先定义在 mariadb-galera-cluster/templates/default/chef_server.repo.erb 中,如清单 2 所示。同时,在 mariadb-galera-cluster/recipes/default.rb 中定义这一部分的安装流程,如清单 3 所示。配置好 yum 源后,即可通过 yum 命令安装预先下载好的 Mariadb 安装介质。

安装完成后,可以执行一些基本的数据库初始化任务,例如设置 root 用户的密码和权限,这些任务可以定义在一个 sql 文件中。另外也可以通过编辑/etc/my.cnf 对 Mariadb 进行一些基本的配置。全部完成后重启 Mariadb 的服务。

清单 3. templates/default/chef_server.repo.erb,定义 yum 配置

1

2

3

4

5

6

 

[chef_server_repo]

name=chef_server_repo

baseurl=http://chefserver:80/yum_repo

enabled=1

gpgcheck=0

sslverify=0

 

清单 4. recipes/default.rb,安装 Mariadb

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

 

template "/etc/yum.repos.d" do

        source "chef_server.repo.erb"

        owner 'root'

        mode 0755

        action :create

end

 

...

execute "Install Mariadb" do

        command "yum clean metadata && yum -y install mariadb-server"

end

...

bash "Config database settings..." do

        cwd "#{CWD}"

        user "root"

        group "root"

        code <<-EOF

       printf "\n[mysqld]\nlower_case_table_names=1" >> /etc/my.cnf

        systemctl enable mariadb.service

        systemctl start mariadb.service

        mysql < init.sql

        systemctl restart mariadb.service

        EOF

end

 

开启 Cluster 节点的相互通信

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/98b6f715011305504ad0d8bb4fa5f59e.html