澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Bind主从搭建,开发工具箱

那篇博文接着上篇小说《使用 python 管理 mysql 开垦工具箱 - 1》,继续写下本身读书 python 管理 MySQL 中的知识记录。

选取 python 管理 mysql 开拓工具箱,pythonmysql

那篇博文接着上篇作品《使用 python 管理 mysql 开荒工具箱 - 1》,继续写下本身攻读 python 管理 MySQL 中的知识记录。

初稿地址:

Centos 7.1 Bind主从搭建

Centos 7.1 Bind主从搭建

##########################################################################

概览

DNS简单描述

1.条件希图

2.配置主DNS服务器

2.1.最首要安顿文件

2.2.配置/etc/named.conf

2.3.配置/etc/named.rfc1912.zones

2.4.布局/var/named/数据库文件

2.5开头服务以及测量试验

3.配置从dns服务器

3.1.主DNS服务器上修修改改

3.2.从DNS服务器修改

3.3.起初服务测量检验

###########################################################################

DNS简单描述

咱俩都晓得,互联网通讯中,数据链路等使用的地址是MAC地址;互连网层使用的是IP地址,传输层使用的地方是端口号,它们各有各的辨识情势。而和用户关系最稳重的正是IP地址,每一种入网的(不论是Internet或Intranet)Computer都必须有和好的IP地址,那样才可确定保障新闻的正确性传递。但IP地址是数字组成的,特别难与记忆和表达她的实在用途,所以人们用形象的域名代替IP,方便调换和记念,但须求注意的是,网络通讯中数据包的传输是靠IP地址进行的。也就是说,当www.syd.com与www1.syd.com发送新闻的时候,首先总得将自己的和对方的域名转化为实在的IP地址,并填写在数据包的头顶,才进行数据的传输。而到位域名到IP或IP到域名的翻译(解析)的软件正是DNS服务系统。DNS服务体系必然要设置在有些计算机上,那一个Computer正是所谓为的DNS服务器。**

近些日子甘休,达成这种域名分析的措施重要有三种:

1)hosts文件,但须要全数相互深入分析的机器必须都配备

2)NIS (SUN的本领)聚焦管理域名,只适合局域网,原因大家温馨想

3)DNS 完毕域名的档期的顺序化,分布式管理,最近大部分都以这种方法

DNS服务的安顿相比难,并且也许必要ISP的扶助,DNS也是各类网络应用服务的底蕴,譬喻网址,邮件。都急需域名的协理,并且有了DNS,IP的移植就便于多了。

###########################################################################

1.情形准备

主服务器IP:192.168.1.150

从服务器IP:192.168.1.200

关闭firewalld和selinux

OS:CentOS Linux release 7.1.1503 (Core)

bind软件:#yum install bindbind-utils

# rpm -qa bind*

bind-license-9.9.4-18.el7_1.5.noarch

bind-libs-lite-9.9.4-18.el7_1.5.x86_64

bind-libs-9.9.4-18.el7_1.5.x86_64

bind-utils-9.9.4-18.el7_1.5.x86_64

bind-9.9.4-18.el7_1.5.x86_64

域名:zrd.com

##########################################################################

2.配置主DNS服务器:


2.1.首要配备文件:

/etc/named.conf首要配备端口,安全,日志相关日志

/etc/named.rfc一九一四.zones定义正面与反面解区域连锁

/var/named/正面与反面解数据库


2.2.配置/etc/named.conf


#---------------------------------

#备份/etc/named.conf配置文件

#---------------------------------

[[email protected] ~]# cp /etc/named.conf/etc/named.conf.bak

#---------------------------------

#编辑/etc/named.conf配置文件

#双斜杠为注释内容

#---------------------------------

[[email protected]~]#vim/etc/named.conf

//

// named.conf

//

// Provided by Red Hat bindpackage to configure the ISC BIND named(8) DNS

// server as a caching onlynameserver (as a localhost DNS resolver only).

//

// See/usr/share/doc/bind*/sample/ for example named configuration files.

//

options {

//listen-onport 53 { 127.0.0.1; };

//listen-on-v6port 53 { ::1; };

directory"/var/named";

dump-file"/var/named/data/cache_dump.db";

statistics-file"/var/named/data/named_stats.txt";

memstatistics-file"/var/named/data/named_mem_stats.txt";

allow-query { any; };

/*

- If you are building an AUTHORITATIVE DNSserver, do NOT enable recursion.

- If you are building a RECURSIVE (caching)DNS server, you need to enable

recursion.

- If your recursive DNS server has a public IPaddress, you MUST enable access

control to limit queries to your legitimateusers. Failing to do so will

cause your server to become part of largescale DNS amplification

attacks. Implementing BCP38 within yournetwork would greatly

reduce such attack surface

*/

recursion yes;

//dnssec-enableyes;

//dnssec-validationyes;

//dnssec-lookasideauto;

/* Path to ISC DLV key */

bindkeys-file"/etc/named.iscdlv.key";

managed-keys-directory"/var/named/dynamic";

pid-file"/run/named/named.pid";

session-keyfile"/run/named/session.key";

};

logging {

channel default_debug {

file"data/named.run";

severity dynamic;

};

};

zone "." IN {

type hint;

file "named.ca";

};

include"/etc/named.rfc1912.zones";

//include"/etc/named.root.key";

2.3.配置/etc/named.rfc1912.zones

#------------------------------------------------------------------

#备份/etc/named.rfc一九一三.zones配置文件

#------------------------------------------------------------------

[[email protected]~]# cp/etc/named.rfc1912.zones/etc/named.rfc1912.zones.bak

#------------------------------------------------------------------

#编辑/etc/named.rfc一九一一.zones配置文件

#双斜杠为注释内容

#------------------------------------------------------------------

[[email protected] ~]# vim/etc/named.rfc1912.zones

zone"1.0.0.127.in-addr.arpa" IN {

type master;

file "named.loopback";

allow-update { none; };

};

zone"0.in-addr.arpa" IN {

type master;

file "named.empty";

allow-update { none; };

};

//##########################

//自定义zrd.com正向解的区域

//##########################

zone"zrd.com" IN {

type master;

file "zrd.com.zone";

};

//####################################################

//自定义反向剖析

//####################################################

zone"1.168.192.in-addr.arpa" IN {

type master;

file "1.168.192.in-addr-arpa";

};

2.4.陈设/var/named/数据库文件

#------------------------------------------------------------------

#成立正向剖析数据库文件/var/named/zrd.com.zone

#------------------------------------------------------------------

[[email protected] ~]# vimzrd.com.zone

$TTL 600

@ INSOA dns.zrd.com. admin.zrd.com. (

2015091901

1H

5M

3D

12H

)

INNS dns

INMX 10 mail

dns INA 192.168.1.150

www INA 192.168.1.151

mail INA 192.168.1.152

pop INCNAME mail

修改属组

[[email protected] ~]#chown.named/var/named/zrd.com.zone

#------------------------------------------------------------------

#成立反向分析数据库文件/var/named/1.168.192.in-addr-arpa

#------------------------------------------------------------------

[[email protected] ~]# vim/var/named/1.168.192.in-addr-arpa

$TTL 600

@ INSOA dns.zrd.com. admin.zrd.com. (

2015091901

1H

5M

3D

12H

)

INNS dns.zrd.com.

150 INPTR dns.zrd.com.

151 INPTRwww.zrd.com.

152 INPTR mail.zrd.com.

2.5开发银行服务以及测量检验

2.5.1劳务相关(停,启,查,服务器自运转,禁止自运营)

[[email protected] ~]#systemctl stop named

[[email protected] ~]#systemctl start named

[[email protected] ~]#systemctl status named

[[email protected] ~]#systemctl enable named

[[email protected] ~]#systemctl disable named

图片 1

2.5.2测试

查阅侦听53端口domain服务是或不是曾经开启

图片 2

查阅正面与反面分析服务是还是不是符合规律

图片 3

图片 4

PS:至此;不配备从DNS服务器,一台轻巧的DNS服务器已铺排完结!

#######################################################################

#######################################################################

3.配置从dns服务器


3.1.主DNS服务器上改变

3.1.1修改/etc/named.rfc1912.zones

[[email protected] ~]# vim/etc/named.rfc1912.zones

//named.rfc1912.zones:

//

// Provided by RedHat caching-nameserver package

//

// ISC BIND namedzone configuration for zones recommended by

// RFC 1912 section4.1 : localhost TLDs and address zones

// and

// (c)2007 R WFranks

//

// See/usr/share/doc/bind*/sample/ for example named configuration files.

//

zone"localhost.localdomain" IN {

type master;

file "named.localhost";

allow-update { none; };

};

zone"localhost" IN {

type master;

file "named.localhost";

allow-update { none; };

};

zone"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"IN {

type master;

file "named.loopback";

allow-update { none; };

};

zone"1.0.0.127.in-addr.arpa" IN {

type master;

file "named.loopback";

allow-update { none; };

};

zone"0.in-addr.arpa" IN {

type master;

file "named.empty";

allow-update { none; };

};

/////////////////////////////////

//自定义zrd.com正解的区域

////////////////////////////////

zone"zrd.com" IN {

type master;

file "zrd.com.zone";

allow-transfer{ 127.0.0.1;192.168.1.150;192.168.1.200; };//只允许特定的DNS服务器恢复生机一同zone

};

////////////////////////////

//自定义反分析

////////////////////////////

zone"1.168.192.in-addr.arpa" IN {

type master;

file"1.168.192.in-addr-arpa";

allow-transfer { 127.0.0.1;192.168.1.150;192.168.1.200; };//只同意特定的DNS服务器恢复生机一同zone

};

3.1.2.正向分析文件修改

图片 5

3.1.3.反向分析文件修改

图片 6

3.2.从DNS服务器修改

#----------------------------------------------------------

#3.2.1./etc/named.conf配置

#----------------------------------------------------------

[[email protected] slaves]#vim /etc/named.conf

dnssec-validation yes;

dnssec-lookaside auto;

*/

/* Path to ISC DLV key */

bindkeys-file"/etc/named.iscdlv.key";

managed-keys-directory"/var/named/dynamic";

pid-file"/run/named/named.pid";

session-keyfile"/run/named/session.key";

};

logging {

channel default_debug {

file"data/named.run";

severity dynamic;

};

};

zone "."IN {

type hint;

file "named.ca";

};

include"/etc/named.rfc1912.zones";

//include"/etc/named.root.key";


#----------------------------------------------------------

#3.2.2/etc/named.rfc1912.zones配置

#----------------------------------------------------------

[[email protected] slaves]#vim /etc/named.rfc1912.zones

type master;

file "named.loopback";

allow-update { none; };

};

zone"0.in-addr.arpa" IN {

type master;

file "named.empty";

allow-update { none; };

};

////////////////////////////

//从服务器正解配置

////////////////////////////

zone"zrd.com." IN {

type slave;

masters { 192.168.1.150; };

file "slaves/zrd.com.zone";

allow-transfer {none; };

};

/////////////////////////

//从DNS服务器反解设置

/////////////////////////

zone"1.168.192.in-addr.arpa." IN {

type slave;

masters { 192.168.1.150; };

file"slaves/1.168.192.in-addr.zone";

allow-transfer{none; }; //作为从服务器不该让其余服务器zone传送。

};

#######################################################

3.3.开发银行服务测量检验

#systemctlstart named

正向分析测验

图片 7

反向深入分析测验

图片 8

7.1 Bind主从搭建 Centos 7.1 Bind主从搭建 ########################################################################## 大概浏览 DNS轻松描述 1.条件计划 2.布局主...

一、MySQL 的读写分离

学习完 MySQL 主从复制之后,能够虚构完成 MySQL 的读写分离,进而进步 MySQL 系统的完全品质。具体调节读写的路由效率能够交给应用程序恐怕MySQL-Proxy 程序来落实。读写分离其实正是让 Client 写入 master,而读数据从 slave 节点,那样裁减了 master 既写又读的下压力。这里未有具体介绍如何落到实处读写分离的职能,后续研商一下 MySQL Proxy 程序,那是 MySQL 官方提供的贯彻读写分离的主次。

 

一、MySQL 的读写分离

学学完 MySQL 主从复制之后,能够设想完成 MySQL 的读写分离,进而加强 MySQL 系统的总体品质。具体调控读写的路由效能可以提交应用程序大概MySQL-Proxy 程序来促成。读写分离其实即是让 Client 写入 master,而读数据从 slave 节点,那样收缩了 master 既写又读的下压力。这里未有现实介绍怎么样促成读写分离的效率,后续研商一下 MySQL Proxy 程序,那是 MySQL 官方提供的兑现读写分离的次序。

 

Oracle 11g RAC SCAN ip的规律及布局

二、slave 节点的负荷均衡

1. 施用 DNS 来贯彻负载均衡

频频 slave 节点是多个,达成 slave 节点的负荷均衡是相当紧要的。其实能够动用 dns 的法力,四个域名指向多个 slave 的 IP 地址,这样 Client 每回分析到的 slave 地址都是平均布满的,轻巧的贯彻了负荷均衡的作用。

2. 健检监察和控制

我们温馨索要贯彻二个监理程序,检查 slave 的不奇怪化情状,包罗如下多少个地点:

  • 是或不是能三翻五次 slave 节点,决断 timeout 是还是不是会晚点就能够
  • 自己商量 slave 状态,是或不是能健康专业。实施 show slave statusG; 查看 IO/SQL Running 是还是不是正规。
  • 基本同步时间间隔是或不是过长。借使 Second_behind_master > 2 感觉太慢了

监督程序扫描所有slave 节点,决断上述指标,把符合规律的 slave 节点参预到 DNS 分析记录里边,有题指标删除出去。

 

二、slave 节点的载重均衡

1. 用到 DNS 来促成负载均衡

往往 slave 节点是八个,实现 slave 节点的载重均衡是不行首要的。其实可以应用 dns 的成效,一个域名指向四个slave 的 IP 地址,那样 Client 每一次剖析到的 slave 地址都以平均遍布的,简单的兑现了负荷均衡的效率。

2. 健康检查监控

咱俩和好索要完毕八个监督检查程序,检查 slave 的例行状态,包含如下多少个方面:

  • 是否能三翻五次 slave 节点,剖断 timeout 是还是不是会晚点就可以
  • 检查 slave 状态,是不是能平常干活。实施 show slave statusG; 查看 IO/SQL Running 是或不是平常。
  • 主干同步时间间隔是还是不是过长。假如 Second_behind_master > 2 以为太慢了

监察和控制程序扫描全数 slave 节点,判别上述指标,把平常的 slave 节点插足到 DNS 分析记录里边,有题指标删减出去。

 

  Oracle 11g RAC网格即插即用(GPnP)专门的学问规律:**
**

三、DNS 基本安装和配备

  1. 安装 rpm 包

    [root@vip ~]# yum install bind -y

2. 退换配置文件named.conf

options {
    listen-on port 53 { any; };    # 修改为any
    listen-on-v6 port 53 { ::1; };
    ... ... ... ...
    allow-query     { any; };      # 修改为any

拉长原委:

zone "example.com" IN {
    type master;
    file "example.com.zone";
};

3. 加上设置区域zone文件

[root@vip ~]# vim /var/named/example.com.zone     # 添加如下内容
$TTL 1D
@   IN SOA  ns.example.com. root.example.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H ); minimum
    NS  ns.example.com.
ns  A   192.168.0.8
www A   192.168.0.2

4. 启动named服务

[root@vip ~]# service named start
  1. 测试dns解析

    [root@vip ~]# host www.example.com. localhost Using domain server: Name: localhost Address: :: 1 #53 Aliases: # 成功剖判OK。 www.example.com has address 192.168.0.2

 

三、DNS 基本安装和布置

  1. 安装 rpm 包

    [[email protected] ~]# yum install bind -y

  2. 修改配置文件named.conf

    options {

     listen-on port 53 { any; };    # 修改为any
     listen-on-v6 port 53 { ::1; };
     ... ... ... ...
     allow-query     { any; };      # 修改为any
    

累加开始和结果:

zone "example.com" IN {
    type master;
    file "example.com.zone";
};
  1. 增进设置区域zone文件

    [[email protected] ~]# vim /var/named/example.com.zone # 加多如下内容 $TTL 1D @ IN SOA ns.example.com. root.example.com. (

                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H ); minimum
     NS  ns.example.com.
    

    ns A 192.168.0.8 www A 192.168.0.2

  2. 启动named服务

    [[email protected] ~]# service named start

  3. 测试dns解析

    [[email protected] ~]# host www.example.com. localhost Using domain server: Name: localhost Address: :: 1 #53 阿里ases: # 成功分析OK。 www.example.com has address 192.168.0.2

 

图片 9

四、DNS 完结动态记录更新

DNS动态更新须要性:

  • 有个别slave出现故障,DNS应该将该slave剔除,不要分析那么些slave节点
  • 复制非常的慢,拖后腿的slave节点也相应剔除出去。

设想:类似keepalived的健检。

  1. 生成key文件

    [root@vip ~]# dnssec-keygen -a HMAC-MD5 -b 256 -n HOST -r /dev/urandom dnskey

生成 2 个文件:

[root@vip ~]# ls Kexample.com. 157 46922.*
Kexample.com. 157 46922.key  Kexample.com. 157 46922.private

2. 修改配置文件named.conf,让dns帮忙立异:增多如下代码

key "example.com" {    # 该key为新增加内容
    algorithm HMAC-MD5;
    secret "25z/5wjwD4GsMgQluWagfkQ9TSqpoJzYbh/I/QEZo2M=";   # secret内容参考Kexample.com. 157 46922.key文件内容
};

zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { key "example.com"; };   # 增加一行
};

3. 创建update.txt文件

使用nsupdate前须求创制个文件,告诉nsupdate怎么着去立异update.txt,内容如下:

server 127.0.0.1
debug yes 
zone example.com.
update delete s.db.example.com. A
update add s.db.example.com. 86499 A 192.168.0.1
update add s.db.example.com. 86499 A 192.168.0.2
update add s.db.example.com. 86499 A 192.168.0.8
update add s.db.example.com. 86499 A 127.0.0.1
show 
send

4. 给予/var/named目录写权限

chmod g w /var/named

5. 手动更新dns记录

[root@vip ~]# nsupdate -k Kdnskey. 157 42183.key update.txt
  1. 验证

    [root@vip ~]# host s.db.example.com localhost Using domain server: Name: localhost Address: ::1#53 Aliases: s.db.example.com has address 192.168.0.1 s.db.example.com has address 192.168.0.2 s.db.example.com has address 192.168.0.8 s.db.example.com has address 127.0.0.1

  2. 标题总括

  • 1. 看日志文件log
  • 2. 看权限错误
    1. 看程序的用户 ps -ef | grep named
  • 4. 看有关布署文件的权杖
  • 5. iptables和selinux是还是不是关闭

 

四、DNS 实现动态记录更新

DNS动态更新须要性:

  • 有个别slave出现故障,DNS应该将该slave剔除,不要深入分析这么些slave节点
  • 复制非常慢,拖后腿的slave节点也应该剔除出去。

虚构:类似keepalived的健检。

  1. 生成key文件

    [[email protected] ~]# dnssec-keygen -a HMAC-MD5 -b 256 -n HOST -r /dev/urandom dnskey

生成 2 个文件:

[[email protected] ~]# ls Kexample.com. 157 46922.*
Kexample.com. 157 46922.key  Kexample.com. 157 46922.private

2. 改变配置文件named.conf,让dns援助革新:增加如下代码

key "example.com" {    # 该key为新增加内容
    algorithm HMAC-MD5;
    secret "25z/5wjwD4GsMgQluWagfkQ9TSqpoJzYbh/I/QEZo2M=";   # secret内容参考Kexample.com. 157 46922.key文件内容
};

zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { key "example.com"; };   # 增加一行
};
  1. 创建update.txt文件

行使nsupdate前必要创制个文本,告诉nsupdate怎么着去立异update.txt,内容如下:

server 127.0.0.1
debug yes 
zone example.com.
update delete s.db.example.com. A
update add s.db.example.com. 86499 A 192.168.0.1
update add s.db.example.com. 86499 A 192.168.0.2
update add s.db.example.com. 86499 A 192.168.0.8
update add s.db.example.com. 86499 A 127.0.0.1
show 
send
  1. 予以/var/named目录写权限

    chmod g w /var/named

  2. 手动更新dns记录

    [[email protected] ~]# nsupdate -k Kdnskey. 157 42183.key update.txt

  3. 验证

    [[email protected] ~]# host s.db.example.com localhost Using domain server: Name: localhost Address: ::1#53 Aliases: s.db.example.com has address 192.168.0.1 s.db.example.com has address 192.168.0.2 s.db.example.com has address 192.168.0.8 s.db.example.com has address 127.0.0.1

  4. 难点计算

    1. 看日志文件log
    1. 看权限错误
    1. 看程序的用户 ps -ef | grep named
    1. 占卜关布署文件的权力
    1. iptables和selinux是否关闭

 

SCAN概念:
   先介绍一下怎么样叫SCAN,SCAN(Single Client Access Name)是Oracle从11g R2开始生产的,客户端能够通过SCAN性格负载均衡地连接到RAC数据库。SCAN提供多个域名来访谈RAC,域名能够深入分析1个到3个(注意,最多3个)SCAN IP,大家得以由此DNS大概GNS来剖判完毕。当中DNS大家都很熟练,这里不多说。GNS(Grid Naming Service)则是Oracle 11g 福特Explorer2的新职能,能够透过DHCP服务为节点和SCAN分配VIP和SCAN IP。其余还也有个优点是,对于新加盟集群的节点,它会自动分配VIP地址,更新集群财富,客户端照旧通过SCAN本性负载均衡地连接受新增加集群节点上。DNS和GNS配置与剖判相关内容在上边还可能有表明。
     除了DNS和GNS深入分析方法外,SCAN也能够使用hosts文件来解析,但用过的人都驾驭,此办法不止在安装RAC的时候产生难点,早先时期使用也是存在问题的,比方SCAN域名只好定义两个SCAN IP。所以这种方式也是Oracle不推荐使用的。但就算如此,非常多生产上仍旧那样使用,也正是放任了11g的新特色SCAN,而是依旧选择VIP连接格局。

五、Python 实现 DNS 查询

急需使用到 dnspython 模块,须要实施 pip install dnspython 安装此模块。

参考:

 

五、Python 实现 DNS 查询

亟需动用到 dnspython 模块,供给实践 pip install dnspython 安装此模块。

参考:

 

SCAN ip 专门的学业原理:

六、Python 实现 DNS 动态更新

代码参谋:

# 动态更新dns记录
def dnsUpdate(zone, name, rdlist):
    key = dns.tsigkeyring.from_text({zone:keyring})
    up = dns.update.Update(zone, keyring=key)
    rdata_list = [dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, i) for i in rdlist]
    ttl = 60
    rdata_set  = dns.rdataset.from_rdata_list(ttl, rdata_list)
    up.replace(name, rdata_set)
    q = dns.query.tcp(up, '127.0.0.1')
# 调用
dnsUpdate('example.com', 's.db', alive)

 

六、Python 完结 DNS 动态更新

代码参谋:

# 动态更新dns记录
def dnsUpdate(zone, name, rdlist):
    key = dns.tsigkeyring.from_text({zone:keyring})
    up = dns.update.Update(zone, keyring=key)
    rdata_list = [dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, i) for i in rdlist]
    ttl = 60
    rdata_set  = dns.rdataset.from_rdata_list(ttl, rdata_list)
    up.replace(name, rdata_set)
    q = dns.query.tcp(up, '127.0.0.1')
# 调用
dnsUpdate('example.com', 's.db', alive)

 

图片 10

七、MySQL 从服务器状态检查

依据检查的须求,对 slave 实行健检,代码如下:

#!/usr/bin/env python
#encoding: utf-8

import MySQLdb

# 通过shell命令获取key列表格式
# mysql -S /tmp/slave01.sock -e "show slave statusG" | awk -F: 'NR!=1{print $1}' | awk '{printf """$1"",n"}' > a.txt
keys = (
    "Slave_IO_State",
    "Master_Host",
    "Master_User",
    "Master_Port",
    "Connect_Retry",
    "Master_Log_File",
    "Read_Master_Log_Pos",
    "Relay_Log_File",
    "Relay_Log_Pos",
    "Relay_Master_Log_File",
    "Slave_IO_Running",
    "Slave_SQL_Running",
    "Replicate_Do_DB",
    "Replicate_Ignore_DB",
    "Replicate_Do_Table",
    "Replicate_Ignore_Table",
    "Replicate_Wild_Do_Table",
    "Replicate_Wild_Ignore_Table",
    "Last_Errno",
    "Last_Error",
    "Skip_Counter",
    "Exec_Master_Log_Pos",
    "Relay_Log_Space",
    "Until_Condition",
    "Until_Log_File",
    "Until_Log_Pos",
    "Master_SSL_Allowed",
    "Master_SSL_CA_File",
    "Master_SSL_CA_Path",
    "Master_SSL_Cert",
    "Master_SSL_Cipher",
    "Master_SSL_Key",
    "Seconds_Behind_Master",
    "Master_SSL_Verify_Server_Cert",
    "Last_IO_Errno",
    "Last_IO_Error",
    "Last_SQL_Errno",
    "Last_SQL_Error",
)

# 模拟一下slave节点列表, 设置注意实验时设置某些实例为不健康状态
conf = {
    'master':'127.0.0.1:3306',
    'slave':[
            '127.0.0.1:3307',
            '192.168.0.8:3307',
            '127.0.0.1:3308',
            '192.168.0.8:3308',
            '127.0.0.1:3309',
            '192.168.0.8:3309',
    ]
}

# 检查slave节点的状态是否正常
def checkSlaveStatus(host, port):
    try:
        conn = MySQLdb.connect(host=host, port=port, user='root', connect_timeout=1)
    except Exception, e:
        print e
        return False
    cur = conn.cursor()
    cur.execute('show slave status')
    data = cur.fetchall()    # 只获取到了冒号后边的value, key没有获取到, 和sql shell显示不同.

    # 将keys和data组合为字典的结构
    data = dict(zip(keys, data[0]))

    # IO/SQL Running 是否正常
    if data['Slave_IO_Running'] == 'No' or data['Slave_SQL_Running'] == 'No':
        return False
    elif data['Seconds_Behind_Master'] > 2:  # 主从复制时间持续超过2秒, 太慢了
        return False

    # 到这里肯定是没问题的了
    return True

# 将ip:port解析为主机 端口
def parseIP(s):
    host, port = s.split(':')
    return host, int(port)

if __name__ == '__main__':
    #host = '127.0.0.1' # 写IP好像连不上, 需要授权相应的主机
    #port = 3307
    alive = []
    for ip in conf['slave']:
        host, port = parseIP(ip)
        print checkSlaveStatus(host, port)

 

七、MySQL 从服务器状态检查

遵守检查的须求,对 slave 实行健检,代码如下:

#!/usr/bin/env python
#encoding: utf-8

import MySQLdb

# 通过shell命令获取key列表格式
# mysql -S /tmp/slave01.sock -e "show slave statusG" | awk -F: 'NR!=1{print $1}' | awk '{printf """$1"",n"}' > a.txt
keys = (
    "Slave_IO_State",
    "Master_Host",
    "Master_User",
    "Master_Port",
    "Connect_Retry",
    "Master_Log_File",
    "Read_Master_Log_Pos",
    "Relay_Log_File",
    "Relay_Log_Pos",
    "Relay_Master_Log_File",
    "Slave_IO_Running",
    "Slave_SQL_Running",
    "Replicate_Do_DB",
    "Replicate_Ignore_DB",
    "Replicate_Do_Table",
    "Replicate_Ignore_Table",
    "Replicate_Wild_Do_Table",
    "Replicate_Wild_Ignore_Table",
    "Last_Errno",
    "Last_Error",
    "Skip_Counter",
    "Exec_Master_Log_Pos",
    "Relay_Log_Space",
    "Until_Condition",
    "Until_Log_File",
    "Until_Log_Pos",
    "Master_SSL_Allowed",
    "Master_SSL_CA_File",
    "Master_SSL_CA_Path",
    "Master_SSL_Cert",
    "Master_SSL_Cipher",
    "Master_SSL_Key",
    "Seconds_Behind_Master",
    "Master_SSL_Verify_Server_Cert",
    "Last_IO_Errno",
    "Last_IO_Error",
    "Last_SQL_Errno",
    "Last_SQL_Error",
)

# 模拟一下slave节点列表, 设置注意实验时设置某些实例为不健康状态
conf = {
    'master':'127.0.0.1:3306',
    'slave':[
            '127.0.0.1:3307',
            '192.168.0.8:3307',
            '127.0.0.1:3308',
            '192.168.0.8:3308',
            '127.0.0.1:3309',
            '192.168.0.8:3309',
    ]
}

# 检查slave节点的状态是否正常
def checkSlaveStatus(host, port):
    try:
        conn = MySQLdb.connect(host=host, port=port, user='root', connect_timeout=1)
    except Exception, e:
        print e
        return False
    cur = conn.cursor()
    cur.execute('show slave status')
    data = cur.fetchall()    # 只获取到了冒号后边的value, key没有获取到, 和sql shell显示不同.

    # 将keys和data组合为字典的结构
    data = dict(zip(keys, data[0]))

    # IO/SQL Running 是否正常
    if data['Slave_IO_Running'] == 'No' or data['Slave_SQL_Running'] == 'No':
        return False
    elif data['Seconds_Behind_Master'] > 2:  # 主从复制时间持续超过2秒, 太慢了
        return False

    # 到这里肯定是没问题的了
    return True

# 将ip:port解析为主机 端口
def parseIP(s):
    host, port = s.split(':')
    return host, int(port)

if __name__ == '__main__':
    #host = '127.0.0.1' # 写IP好像连不上, 需要授权相应的主机
    #port = 3307
    alive = []
    for ip in conf['slave']:
        host, port = parseIP(ip)
        print checkSlaveStatus(host, port)

 

通过DNS配置SCAN IP:

八、MySQL 从服务器状态更新

对 slave 健康状态检查后,将常规的节点列表记录,更新到 DNS 记录中。代码如下:

#!/usr/bin/env python
#encoding: utf-8

import MySQLdb
import dns.query
import dns.update
import dns.tsigkeyring

# 通过shell命令获取key列表格式
# mysql -S /tmp/slave01.sock -e "show slave statusG" | awk -F: 'NR!=1{print $1}' | awk '{printf """$1"",n"}' > a.txt
keys = (
    "Slave_IO_State",
    "Master_Host",
    "Master_User",
    "Master_Port",
    "Connect_Retry",
    "Master_Log_File",
    "Read_Master_Log_Pos",
    "Relay_Log_File",
    "Relay_Log_Pos",
    "Relay_Master_Log_File",
    "Slave_IO_Running",
    "Slave_SQL_Running",
    "Replicate_Do_DB",
    "Replicate_Ignore_DB",
    "Replicate_Do_Table",
    "Replicate_Ignore_Table",
    "Replicate_Wild_Do_Table",
    "Replicate_Wild_Ignore_Table",
    "Last_Errno",
    "Last_Error",
    "Skip_Counter",
    "Exec_Master_Log_Pos",
    "Relay_Log_Space",
    "Until_Condition",
    "Until_Log_File",
    "Until_Log_Pos",
    "Master_SSL_Allowed",
    "Master_SSL_CA_File",
    "Master_SSL_CA_Path",
    "Master_SSL_Cert",
    "Master_SSL_Cipher",
    "Master_SSL_Key",
    "Seconds_Behind_Master",
    "Master_SSL_Verify_Server_Cert",
    "Last_IO_Errno",
    "Last_IO_Error",
    "Last_SQL_Errno",
    "Last_SQL_Error",
)

# 模拟一下slave节点列表, 设置注意实验时设置某些实例为不健康状态
conf = {
    'master':'127.0.0.1:3306',
    'slave':[
            '127.0.0.1:3307',
            '192.168.0.8:3307',
            '127.0.0.1:3308',
            '192.168.0.8:3308',
            '127.0.0.1:3309',
            '192.168.0.8:3309',
    ]
}

keyring = '25z/5wjwD4GsMgQluWagfkQ9TSqpoJzYbh/I/QEZo2M='

# 检查slave节点的状态是否正常
def checkSlaveStatus(host, port):
    try:
        conn = MySQLdb.connect(host=host, port=port, user='root', connect_timeout=1)
    except Exception, e:
        print e
        return False
    cur = conn.cursor()
    cur.execute('show slave status')
    data = cur.fetchall()    # 只获取到了冒号后边的value, key没有获取到, 和sql shell显示不同.

    # 将keys和data组合为字典的结构
    data = dict(zip(keys, data[0]))

    # IO/SQL Running 是否正常
    if data['Slave_IO_Running'] == 'No' or data['Slave_SQL_Running'] == 'No':
        return False
    elif data['Seconds_Behind_Master'] > 2:  # 主从复制时间持续超过2秒, 太慢了
        return False

    # 到这里肯定是没问题的了
    return True

# 将ip:port解析为主机 端口
def parseIP(s):
    host, port = s.split(':')
    return host, int(port)


# 动态更新dns记录
def dnsUpdate(zone, name, rdlist):
    key = dns.tsigkeyring.from_text({zone:keyring})
    up = dns.update.Update(zone, keyring=key)
    rdata_list = [dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, i) for i in rdlist]
    ttl = 60
    rdata_set  = dns.rdataset.from_rdata_list(ttl, rdata_list)
    up.replace(name, rdata_set)
    q = dns.query.tcp(up, '127.0.0.1')
    #print q


if __name__ == '__main__':
    #host = '127.0.0.1' # 写IP好像连不上, 需要授权相应的主机
    #port = 3307
    alive = []
    for ip in conf['slave']:
        host, port = parseIP(ip)
        if checkSlaveStatus(host, port):
            alive.append(host)
    # 解释下这里为什么要设置slave的alive集群阈值
    # 如果不设置阈值, 那么存在健康的slave过少, 会导致slave的雪崩现象
    # 反而会影响服务的正常运行, 保证只有在一定数量情况下才更新dns记录.
    if float(len(alive))/len(conf['slave']) > 0.6:
        dnsUpdate('example.com', 's.db', alive)


# 注意:
# 1. dns服务一定要保证/var/named目录组用户有写的权限
# 2. iptables 和 selinux 一定要设置好, 最好设置为关闭状态.

 

八、MySQL 从服务器状态更新

对 slave 健康情形检查后,将符合规律的节点列表记录,更新到 DNS 记录中。代码如下:

#!/usr/bin/env python
#encoding: utf-8

import MySQLdb
import dns.query
import dns.update
import dns.tsigkeyring

# 通过shell命令获取key列表格式
# mysql -S /tmp/slave01.sock -e "show slave statusG" | awk -F: 'NR!=1{print $1}' | awk '{printf """$1"",n"}' > a.txt
keys = (
    "Slave_IO_State",
    "Master_Host",
    "Master_User",
    "Master_Port",
    "Connect_Retry",
    "Master_Log_File",
    "Read_Master_Log_Pos",
    "Relay_Log_File",
    "Relay_Log_Pos",
    "Relay_Master_Log_File",
    "Slave_IO_Running",
    "Slave_SQL_Running",
    "Replicate_Do_DB",
    "Replicate_Ignore_DB",
    "Replicate_Do_Table",
    "Replicate_Ignore_Table",
    "Replicate_Wild_Do_Table",
    "Replicate_Wild_Ignore_Table",
    "Last_Errno",
    "Last_Error",
    "Skip_Counter",
    "Exec_Master_Log_Pos",
    "Relay_Log_Space",
    "Until_Condition",
    "Until_Log_File",
    "Until_Log_Pos",
    "Master_SSL_Allowed",
    "Master_SSL_CA_File",
    "Master_SSL_CA_Path",
    "Master_SSL_Cert",
    "Master_SSL_Cipher",
    "Master_SSL_Key",
    "Seconds_Behind_Master",
    "Master_SSL_Verify_Server_Cert",
    "Last_IO_Errno",
    "Last_IO_Error",
    "Last_SQL_Errno",
    "Last_SQL_Error",
)

# 模拟一下slave节点列表, 设置注意实验时设置某些实例为不健康状态
conf = {
    'master':'127.0.0.1:3306',
    'slave':[
            '127.0.0.1:3307',
            '192.168.0.8:3307',
            '127.0.0.1:3308',
            '192.168.0.8:3308',
            '127.0.0.1:3309',
            '192.168.0.8:3309',
    ]
}

keyring = '25z/5wjwD4GsMgQluWagfkQ9TSqpoJzYbh/I/QEZo2M='

# 检查slave节点的状态是否正常
def checkSlaveStatus(host, port):
    try:
        conn = MySQLdb.connect(host=host, port=port, user='root', connect_timeout=1)
    except Exception, e:
        print e
        return False
    cur = conn.cursor()
    cur.execute('show slave status')
    data = cur.fetchall()    # 只获取到了冒号后边的value, key没有获取到, 和sql shell显示不同.

    # 将keys和data组合为字典的结构
    data = dict(zip(keys, data[0]))

    # IO/SQL Running 是否正常
    if data['Slave_IO_Running'] == 'No' or data['Slave_SQL_Running'] == 'No':
        return False
    elif data['Seconds_Behind_Master'] > 2:  # 主从复制时间持续超过2秒, 太慢了
        return False

    # 到这里肯定是没问题的了
    return True

# 将ip:port解析为主机 端口
def parseIP(s):
    host, port = s.split(':')
    return host, int(port)


# 动态更新dns记录
def dnsUpdate(zone, name, rdlist):
    key = dns.tsigkeyring.from_text({zone:keyring})
    up = dns.update.Update(zone, keyring=key)
    rdata_list = [dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, i) for i in rdlist]
    ttl = 60
    rdata_set  = dns.rdataset.from_rdata_list(ttl, rdata_list)
    up.replace(name, rdata_set)
    q = dns.query.tcp(up, '127.0.0.1')
    #print q


if __name__ == '__main__':
    #host = '127.0.0.1' # 写IP好像连不上, 需要授权相应的主机
    #port = 3307
    alive = []
    for ip in conf['slave']:
        host, port = parseIP(ip)
        if checkSlaveStatus(host, port):
            alive.append(host)
    # 解释下这里为什么要设置slave的alive集群阈值
    # 如果不设置阈值, 那么存在健康的slave过少, 会导致slave的雪崩现象
    # 反而会影响服务的正常运行, 保证只有在一定数量情况下才更新dns记录.
    if float(len(alive))/len(conf['slave']) > 0.6:
        dnsUpdate('example.com', 's.db', alive)


# 注意:
# 1. dns服务一定要保证/var/named目录组用户有写的权限
# 2. iptables 和 selinux 一定要设置好, 最好设置为关闭状态.

 


九、MySQL 监察和控制测量检验

经过上边包车型地铁代码已经达成了 slave 的健检,DNS 的动态更新。未来得以做一下测验:

> 执行:

[root@vip mysqlmanager]# python mysql_dns_monitor.py

> 结果:

[root@vip mysqlmanager]# host s.db.example.com localhost
Using domain server:
Name: localhost
Address: ::1#53
s.db.example.com has address 127.0.0.1   # 已经更新了记录
s.db.example.com has address 192.168.0.8 # 更新了记录,并解析到ip地址,表明已经成功OK.

> 扩展:
事实上能够筹划几台独立的虚构机来做测量试验,每台虚构机作为要给 slave 节点,模拟一些例行难题,看是或不是能够精确检查评定并更新到。

九、MySQL 监控测量检验

由此上面的代码已经完结了 slave 的健检,DNS 的动态更新。今后得以做一下测量检验:

> 执行:

[[email protected] mysqlmanager]# python mysql_dns_monitor.py

> 结果:

[[email protected] mysqlmanager]# host s.db.example.com localhost
Using domain server:
Name: localhost
Address: ::1#53
s.db.example.com has address 127.0.0.1   # 已经更新了记录
s.db.example.com has address 192.168.0.8 # 更新了记录,并解析到ip地址,表明已经成功OK.

> 扩展:
实际上能够希图几台独立的设想机来做测量检验,每台虚构机作为要给 slave 节点,模拟一些例行难题,看是不是能够科学检查测量试验并更新到。

以下案例是在Linux蒙受下布置DNS服务器:

十、MySQL 从服务器新闻来源CMDB

待更新。。。。

十、MySQL 从服务器音信来源CMDB

待更新。。。。

python 管理 mysql 开辟工具箱,pythonmysql 那篇博文接着上篇小说《使用 python 管理 mysql 开辟工具箱 - 1》,继续写下本身读书 python 管理...

步骤:

1、  安装须求软件

[root@Dns_master/]# yum install bind bind-chroot caching-nameserver –y

…. 

Installed:

bind.i38630:9.3.6-4.P1.el5_4.2

bind-chroot.i386 30:9.3.6-4.P1.el5_4.2 (能够不安装)

caching-nameserver.i386 30:9.3.6-4.P1.el5_4.2 

2、  配置

1)修改主配置文件

[root@Dns_master /]# cd/var/named/chroot/ 

[root@Dns_masterchroot]# pwd

/var/named/chroot

[root@Dns_masterchroot]# ls

dev  etc var

[root@Dns_masterchroot]# cd etc/

[root@Dns_masteretc]# ls

localtime  named.caching-nameserver.conf  named.rfc1912.zones  rndc.key

[root@Dns_master etc]# vi  named.caching-nameserver.conf 

options {

        listen-on port 53 { any; };    #监听端口

        listen-on-v6 port 53 { ::1; };

        directory       "/var/named";

        dump-file       "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        // Those options should be used carefully because they disable port

        // randomization

        // query-source    port 53;

        // query-source-v6 port 53;

        allow-query     { any; };   #询问地址

};

logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};

view any_resolver {

        match-clients      { any; };   #客户端

        match-destinations { any; };   #询问目标地址

        recursion yes;

        include "/etc/named.rfc1912.zones";

};

2)声雅培(Karicare)个域

[root@Dns_masteretc]# pwd 

/var/named/chroot/etc 

[root@Dns_masteretc]# ls 

localtime  named.caching-nameserver.conf  named.rfc1912.zones  rndc.key

[root@Dns_master etc]# vi  named.rfc1912.zones


zone "." IN {

        type hint;

        file "named.ca";

};

zone "localdomain" IN {

        type master;

        file "localdomain.zone";

        allow-update { none; };

};

zone "cuug.net" IN {

        type master;

        file "cuug.zone";

        notify no;

};

zone "8.168.192.in-addr.arpa" IN {

        type slave;

        file "192.zone";

         notify no;

};

zone "localhost" IN {

        type master;

        file "localhost.zone";

        allow-update { none; };

};

zone "0.0.127.in-addr.arpa" IN {

        type master;

        file "named.local";

        allow-update { none; };

};

3)建构相应的正解和反向区域文件 

[root@Dns_masteretc]# cd ../var/named/

[root@Dns_masternamed]# pwd 

/var/named/chroot/var/named

[root@Dns_masternamed]# ls 

data              localhost.zone   named.ca         named.local  slaves 

localdomain.zone  named.broadcast  named.ip6.local  named.zero 

正向深入分析文件:

[root@Dns_master named]# cat cuug.zone


$TTL    86400

@        IN    SOA    dns.cuug.net. root.mail.cuug.net. (

                1997022700    ; Serial

                28800    ; Refresh - 3 hours

                14400    ; Retry - 1 hour

                3600000    ; Expire - 1 week

                86400)    ; Minimum - 1 day

 

            IN       NS         dns.cuug.net.

            IN      MX  10      mail.cuug.net.

dns      IN     A    192.168.8.240

scan     IN     A     192.168.8.100

scan     IN    A     192.168.8.101

scan     IN    A     192.168.8.102

反向剖析文件:

[root@Dns_master named]# cat 192.zone

$TTL    86400

@        IN    SOA    dns.cuug.net. root.mail.cuug.net. (

                1997022700    ; Serial

                28800    ; Refresh - 3 hours

                14400    ; Retry - 1 hour

                3600000    ; Expire - 1 week

                86400)    ; Minimum - 1 day 

           IN       NS          dns.cuug.net.

            IN      MX  10      mail.cuug.net.

240         IN    PTR    dns.cuug.net.

100         IN    PTR   scan.cuug.net.

101         IN    PTR    scan.cuug.net.

102         IN    PTR    scan.cuug.net.

本机反向深入分析库文件:

net.127

$TTL    86400

@       IN      SOA     localhost. root.localhost. (

                1997022700  ; Serial

                28800    ; Refresh - 3 hours

                14400    ; Retry - 1 hour

                3600000    ; Expire - 1 week

                86400)    ; Minimum - 1 day

        IN    NS     localhost.

1       IN    PTR    localhost.

本机正向分析库文件:

net.local

$TTL    86400

@       IN      SOA     localhost. root.localhost. (

                1997022700  ; Serial

                28800    ; Refresh - 3 hours

                14400    ; Retry - 1 hour

                3600000    ; Expire - 1 week

                86400)    ; Minimum - 1 day

        IN    NS     localhost.

localhost    IN   A  127.0.0.1

4)修改区域文件的权杖

[root@Dns_master named]# chown :named cuug.zone

[root@Dns_master named]# chown :named 192.zone

5)检查布置文件语法 

[root@Dns_master named]#named-checkconf   ###检查评定配置文件是不是有语法错误

[root@Dns_master named]#named-checkzone  cuug.net  cuug.zone

zonelinuxidc/IN: loaded serial 42 

OK 

3、重新启航named服务 

[root@Dns_master named]# service  named restart

停止 named:                                              [确定]

启动 named:                                              [确定]

4、测试

先是增加DNS服务器记录

编辑nsswitch.conf 添加dns解析

[root@Dns_master named]# vi /etc/nsswitch.conf

在hosts: dns files  增加DNS解析

[root@Dns_Bind主从搭建,开发工具箱。masternamed]# cat /etc/resolv.conf

nameserver192.168.8.240 

[root@Dns_masternamed]# host scan.cuug.net

scan.cuug.net  has address 192.168.1.100

scan.cuug.net  has address 192.168.1.100

scan.cuug.net  has address 192.168.1.100

 

@至此,通过DNS解析scan ip成功!

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:Bind主从搭建,开发工具箱