自动化运维工具?搭建负载均衡高可用集群只需一键

saltstack:
接上片:
这里用到四台机器:
server6,server1,用作负载均衡的受控节点显示效果
server5作为master兼职负载均衡的管理节点以及高可用的节点
server2 负载均衡的管理节点以及高可用的节点

[root@server5 salt]# cd keepalived/
[root@server5 keepalived]# tree .
.
├── files
│   ├── keepalived
│   ├── keepalived-2.0.6.tar.gz
│   └── keepalived.conf
├── install.sls
└── server.sls

以上为大体结构,在files里面写入了keepalived的启动脚本因为这里使用的是源码安装,所以还有源码包,以及模版配置文件
install 负责下载软件包安装
server 负责运行软件

[root@server5 keepalived]# cat install.sls 
include:
  - pkgs.make

kp-install:
  file.managed:
    - name: /mnt/keepalived-2.0.6.tar.gz
    - source: salt://keepalived/files/keepalived-2.0.6.tar.gz
  cmd.run:
    - name: cd /mnt && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/keepalived 
/etc/keepalived:
  file.directory:
    - mode: 755

/etc/sysconfig/keepalived:
  file.symlink:
    - target: /usr/local/keepalived/etc/sysconfig/keepalived
/sbin/keepalived:
  file.symlink:
    - target: /usr/local/keepalived/sbin/keepalived
[root@server5 keepalived]# cat server.sls 
include:
  - keepalived.install

/etc/keepalived/keepalived.conf:
  file.managed:
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja
    - context:
        STATE: {{ pillar['state'] }}
        VRID: {{ pillar['vrid'] }}
        PRIORITY: {{ pillar['priority'] }}
kp-service:
  file.managed:
    - name: /etc/init.d/keepalived
    - source: salt://keepalived/files/keepalived
    - mode: 755
  service.running:
    - name: keepalived
    - reload: True
    - watch:
      - file: /etc/keepalived/keepalived.conf

这里用到了pillar里的变量
在这里定义了变量的值

[root@server5 keepalived]# cat install.sls 
{% if grains['fqdn'] == 'server2' %}
state: MASTER
vrid: 51
priority: 100
{% elif grains['fqdn'] == 'server5' %}
state: BACKUP
vrid: 51
priority: 50
{% endif %}
[root@server5 keepalived]# pwd[root@server5 keepalived]# cat install.sls 
{% if grains['fqdn'] == 'server2' %}
state: MASTER
vrid: 51
priority: 100
{% elif grains['fqdn'] == 'server5' %}
state: BACKUP
vrid: 51
priority: 50
{% endif %}
[root@server5 keepalived]# pwd
/srv/pillar/keepalived
[root@server5 pillar]# cat top.sls 
base:
  '*':
    - web.install
    - keepalived.install

/srv/pillar/keepalived
[root@server5 pillar]# cat top.sls 
base:
  '*':
    - web.install
    - keepalived.install
[root@server5 salt]# cat top.sls 
base:
  'server5':
    - haproxy.install
    - keepalived.server
  'server2':
    - haproxy.install
    - keepalived.server
  'roles:apache':
    - match: grain
    - wulala
  'roles:nginx':
    - match: grain
    - nginx.files.nginx 

推送结果:
这里写图片描述
一个是6 一个是1 的测试页面
这里写图片描述
这里写图片描述
节点2出现了意外5就会接管
这里写图片描述
这里写图片描述
把数据返回到mysql服务器
在server1上的minion

# Default Minion returners. Can be a comma delimited string or a list:
#
#return: mysql
#
#return: mysql,slack,redis
#
#return:
#  - mysql
#  - hipchat
#  - slack
mysql.host: '172.25.19.5'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

重起服务
在master端
安装数据库并授权上述的用户密码

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all on salt.* to salt@'172.25.19.%' identified by 'salt'
    -> ;
Query OK, 0 rows affected (0.00 sec)
[root@server5 ~]# salt server1 test.ping --return mysql
server1:
    True
mysql> use salt
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+
3 rows in set (0.00 sec)

mysql> select * from salt_returns;
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun       | jid                  | return | id      | success | full_ret                                                                                                                            | alter_time          |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20180817144852870789 | true   | server1 | 1       | {"fun_args": [], "jid": "20180817144852870789", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server1"} | 2018-08-17 14:48:53 |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
1 row in set (0.00 sec)

2.在节在master端更改

#####      Returner settings          ######
############################################
# Which returner(s) will be used for minion's result:
#return: mysql
master_job_cache: mysql
mysql.host: '172.25.19.5'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

######    Miscellaneous  settings     #####

随便输入一条推送命令,查看数据库

[root@server5 ~]# salt server1 cmd.run 'df -h'
server1:
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  990M   17G   6% /
    tmpfs                         499M   80K  499M   1% /dev/shm
    /dev/vda1                     485M   33M  427M   8% /boot
[root@server5 ~]# mysql -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.1.71 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| salt               |
+--------------------+
3 rows in set (0.00 sec)

mysql> use salt;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from salt_return;
ERROR 1146 (42S02): Table 'salt.salt_return' doesn't exist
mysql> select * from salt_returns;
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun       | jid                  | return                                                                                                                                                                                                                                           | id      | success | full_ret                                                                                                                                                                                                                                                                                                                                                                                                                                       | alter_time          |
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20180817144852870789 | true                                                                                                                                                                                                                                             | server1 | 1       | {"fun_args": [], "jid": "20180817144852870789", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server1"}                                                                                                                                                                                                                                                                                                            | 2018-08-17 14:48:53 |
| cmd.run   | 20180817150934759441 | "Filesystem                    Size  Used Avail Use% Mounted on\n/dev/mapper/VolGroup-lv_root   19G  990M   17G   6% /\ntmpfs                         499M   80K  499M   1% /dev/shm\n/dev/vda1                     485M   33M  427M   8% /boot" | server1 | 1       | {"fun_args": ["df -h"], "jid": "20180817150934759441", "return": "Filesystem                    Size  Used Avail Use% Mounted on\n/dev/mapper/VolGroup-lv_root   19G  990M   17G   6% /\ntmpfs                         499M   80K  499M   1% /dev/shm\n/dev/vda1                     485M   33M  427M   8% /boot", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2018-08-17T07:09:36.056318", "fun": "cmd.run", "id": "server1"} | 2018-08-17 15:09:36 |
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
2 rows in set (0.00 sec)

这样的话就不需要在命令后面加–return
也省去了在每个minion的配置文件里面的更改的麻烦
自行定义模块,当模块不满足我们的需求时:
我们可以自行定义模块;

[root@server5 ~]# mkdir /srv/salt/_modules
[root@server5 ~]# cd /srv/salt/_modules
[root@server5 _modules]# vim my_disk.py
cat my_disk.py
#!/usr/bin/env python

def df():
    return __salt__['cmd.run']('df -h')

[root@server5 _modules]# salt '*' saltutil.sync_modules
server2:
    - modules.my_disk
server1:
    - modules.my_disk
server6:
    - modules.my_disk
server5:
    - modules.my_disk
[root@server5 _modules]# salt '*' my_disk.df
server6:
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  1.1G   17G   6% /
    tmpfs                         246M   16K  246M   1% /dev/shm
    /dev/vda1                     485M   33M  427M   8% /boot
server2:
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  1.1G   17G   6% /
    tmpfs                         499M   16K  499M   1% /dev/shm
    /dev/vda1                     485M   33M  427M   8% /boot
server1:
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  990M   17G   6% /
    tmpfs                         499M   96K  499M   1% /dev/shm
    /dev/vda1                     485M   33M  427M   8% /boot
server5:
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  1.1G   17G   7% /
    tmpfs                         246M   52K  246M   1% /dev/shm
    /dev/vda1                     485M   33M  427M   8% /boot

server2主机作为topmaster
分离出来

[root@server5 salt]# yum install salt-syndic
在master配置文件中指出
r
# to receive commands from.

# Set the order_masters setting to True if this master will command lower
# masters' syndic interfaces.
#order_masters: False

# If this master will be running a salt syndic daemon, syndic_master tells
# this master where to receive commands from.
syndic_master: 172.25.19.2

# This is the 'ret_port' of the MasterOfMaster:

重起服务
并启动salt-syndic服务
topmaster端

#
# If this is a master that will be running a syndic daemon for passthrough, then
# the "syndic_master" setting needs to be set to the location of the master server
# to receive commands from.

# Set the order_masters setting to True if this master will command lower
# masters' syndic interfaces.
order_masters: True #把这个打开

# If this master will be running a s

salt-key 接受即可

当环境不允许在节点部署minion时
可以通过salt-ssh连接
下载salt-ssh

并在roster文件里写明你需要了连接的主机ip密码等
[root@server5 salt]# cat /etc/salt/roster 
# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2
server1:
  host: 172.25.19.1
  user: root
  passwd: redhat

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值