2018-08-28 22:12:28 qq_43070609 阅读数 1652
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7137 人正在学习 去看看 良许

Keepalived的热备方式
基于VRRP热备份协议,以软件的方式实现Linux服务器的多机热备份功能。是通过共有的虚拟IP地址(VIP)对外提供服务;每个热备组内只能有一个服务器提供服务,其他服务器处于冗余状态,若当前服务器失效后,则其他处于冗余状态的服务器将接替他的工作(优先级高的),以继续提供服务。
## 漂移地址 ##
虚拟IP地址可以在热备组内的服务器间进行转移,所以也称为漂移IP地址;使用Keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件,而是由Keepalived根据配置文件自动管理。

Keepalived的故障转移

Keepalived可作为服务器的故障切换,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(不管是web、FTP、Mail、还是SSH、DNS)。
下面介绍Keepalived的配置:
实验环境:
两台centos7服务器(一主一备)

1.首先需要安装软件包(软件包需从网上下载)
yum -y install keepalived
为了方便使用,可将Keepalived服务设置为开机启动
systemctl enable keepalived
2.配置主服务器
安装Keepalived服务后,编辑Keepalived主配置文件:/etc/keepalived/keepalived.conf
在配置文件中,修改”global_defs{….}”区域可设置全局参数;修改“vrrp_instance 实例名称 {….}”区域可指定VRRP热备参数;
注释文字以”!”符号开头
修改配置文件:
vim /etc/keepalived/keepalived.conf
修改内容如下:
glabal_defs {
route_id R1 //服务器名称
}
vrrp-instance VI_1 {
state MASTER //确定热备类型(MASTER为主,BUCKUP为备)
interface ens33 //热备份接口
virtal_router_id 1 //热备份组号
priority 100 //优先级(高的为主)
advert_int 1 //Hello time
}
authentication {
auth_type PASS
auth_pass 12345 //密码认证(主备相同)
}
virtual_ipaddress {
192.168.18.254 //(VIP地址)
}

3. 修改后启动服务
systemctl start keepalived
实际状态为MASTER的主服务器将为ens33接口自动添加VIP地址,通过:
ip add show dev ens33 可查看。

4.配置备份服务器
在同一个Keepalived热备组内,所有服务器的Keepalived配置文件基本相同,所以在配置备份服务器时,可以参考主服务器的配置文件,只修改服务器名称、热备状态、优先级就可以了。
配置步骤与主基本相同:
安装软件包
yum -y install keepalived
编辑主配置文件
vim /etc/keepalived/keepalived.conf
glabal_defs {
route_id R2 //服务器名称
}
vrrp-instance VI_1 {
state BACKUP //确定热备类型(MASTER为主,BUCKUP为备)
interface ens33 //热备份接口
virtal_router_id 1 //热备份组号
priority 30 //优先级(高的为主)
advert_int 1 //Hello time
}
authentication {
auth_type PASS
auth_pass 12345 //密码认证(主备相同)
}
virtual_ipaddress {
192.168.18.254 //(VIP地址)
}

5.编辑后启动服务:
systemctl start keepalived
启动后主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备份状态,因此在备份服务器中将不会为ens33接口添加VIP地址
ip address show dev ens33

这样双机热备就实现了,
6.测试
可以通过一个简单的方法验证:使用客户机长pingVIP地址,然后将主服务器关闭,查看是否能通;
通过测试发现:当主服务器关闭后ping测试在中断一次后即恢复正常,说明备份服务器夺回了VIP地址的控制权,服务恢复正常运行。

通过查看R2(之前的备份服务器),发现它以成为主服务器

这样Keepalived就算成功实现了。

2015-06-10 17:52:43 caicongyang 阅读数 6265
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7137 人正在学习 去看看 良许

搭建准备:

机器两台 ip分别为192.168.100.128 192.168.100.129(可以用虚拟机测试,虚拟机网络模式为NET模式,且为静态ip)

另外需要准备一个虚拟ip对外提供服务,即通过该ip访问web程序。(keepalive会将虚拟ip绑定到两台机器上)keepalived的核心原理是vrrp协议,英文好可以查看最新协议RFC3768。

1.nginx安装

两台机器都需要安装,可以参考我的上篇博文 Linux tar包安装Nginx http://blog.csdn.net/caicongyang/article/details/46388845

2.安装keepalived (两台机器都要安装,并且都要做如下操作!)

下载最新版本的keepalived-1.2.17.tar.gz 下载地址:http://www.keepalived.org/download.html

将文件上传到/usr/local/目录下

#tar -zxvf keepalived-1.2.17.tar.gz

将解压出来的文件夹重命名

#mv keepalived-1.2.17 keeplived

进入文件夹,编译安装

#cd keepalived
#./configure --prefix=/usr/local/keepalived
#make && make install

修改配置文件 /usr/local/keepalived/etc/keepalived/keepalived.conf

主机器配置文件如下:

global_defs {
notification_email {
1491318829@qq.com               #接收警报的email地址,可以添加多个
}
notification_email_from admin@caicongyang.com   ###发件人地址
smtp_server 127.0.0.1          ###发送邮件的服务器
smtp_connect_timeout 30      ###超时时间
router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh” ####检测nginx状态的脚本路径
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER ############ 辅机为 BACKUP
interface eth0 ####HA 监测网络接口  此项默认为eth0,因为本人在虚拟机下做测试所以将其改为eth2,可以用ifconfing
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同
mcast_src_ip 192.168.100.128 ###本机IP地址
priority 100 ########### 权值要比 back 高
advert_int 1 #主备之间的通告间隔秒数
authentication {
auth_type PASS ###默认配置 主备切换时的验证 
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.100.133/24 ####虚拟ip,vip的地址
}
}

backup机器配置文件

global_defs {
notification_email {
1491318829@qq.com               #接收警报的email地址,可以添加多个
}
notification_email_from admin@caicongyang.com   ###发件人地址
smtp_server 127.0.0.1          ###发送邮件的服务器
smtp_connect_timeout 30      ###超时时间
router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh” ####检测nginx状态的脚本路径
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP ############ 辅机为 BACKUP
interface eth2 ####HA 监测网络接口 注意,此项默认为eth0,因为本人在虚拟机下做测试所以将其改为eth2,可以先查看自己的网络端口
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同
mcast_src_ip 192.168.100.129 ###本机IP地址
priority 90 ########### 权值要比 back 高
advert_int 1 #主备之间的通告间隔秒数
authentication {
auth_type PASS ###主备切换时的验证
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.100.133/24 ####虚拟ip,vip的地址
}
}
将keepalived安装成Linux系统服务

#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 

#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

#mkdir /etc/keepalived 

#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 

#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

设置开机启动服务

# chkconfig --level 2345 keepalived on

在/opt/下编写校验脚本,/opt/nginx_pid.sh(已配置在keepalived.conf中)

nginx_pid.sh :如果nginx停止运行,尝试启动,如果无法启动杀死本机keepalived进程,keepalied将虚拟ip绑定到备用机器上

建议脚本用vi或者vim在linux下编辑,因为linux的换行符和windows的不同,如果在windowsx下编辑,在传上去可能没法用!

#!/bin/bash
A=`ps -C nginx -–no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx ##这个地方写你nginx启动命令的路径
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

测试:

分别启动两台机器上nginx 和 keepalived

利用命令查看虚拟ip是否绑定成功

#ip a

主机的结果是

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ff:ca:24 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.128/24 brd 192.168.100.255 scope global eth1
    <span style="color:#ff6666;">inet 192.168.100.133/32 scope global eth1</span>
    inet6 fe80::20c:29ff:feff:ca24/64 scope link 
       valid_lft forever preferred_lft forever

可以看到 虚拟IP 192.168.100.133已经绑定到128的机器上了

另外可以利用杀死主服务的nginx进程,访问192.168.100.133是否依然能够访问web页面,再次利用#ip a 命令查看备用机器虚拟ip是否绑定成功!


也可以用下面的命令查看keepalived启动过程日志

#tail -f /var/log/messages


后记:双机热备模式虽然可用性高,但是有一台机器处于被分在状态,资源有点浪费。楼主将在下篇文章配置双机互为双主的模式。


不懂运维的程序员,不是好的工程师!



我的个人网站:http://www.caicongyang.com

我的CSDN博客地址: http://blog.csdn.net/caicongyang 








2018-01-22 22:33:58 weixin_40378804 阅读数 430
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7137 人正在学习 去看看 良许

【以下操作基于RHEL Hat 6.5】

一.双机热备

 通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。

 当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

二.VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。

 keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。

 在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。

 VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协 同工作,共同构成一台虚拟路由器。

 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由 中会重新选举出一个主控路由,来继续工作,来保障不间断服务。

 我们在本文中的测试环境如下:

 两台物理服务器和一个虚拟服务器(vip):

 master:172.25.50.1  backup: 172.25.50.4  vip: 172.25.50.100


  图解:节点A 172.25.50.1 (主节点), 节点B 172.25.50.4(备用节点),虚拟IP(对外提供服务的IP 172.25.50.100)

 在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。

 当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。

三.keepalived的原理

 keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。

 当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:

 172.25.50.100 这个IP对应的MAC地址为节点A网卡的MAC地址

 图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应172.25.50.100的MAC地址=节点A网卡的MAC地址。

 当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:

 172.25.50.100 这个IP对应的MAC地址为节点B网卡的MAC地址

 图中的其它电脑如客户端会更新自己的ARP表,对应172.25.50.100的MAC地址=节点B网卡的MAC地址。

四.操作步骤

 1,在主备机器上安装keepalived
 步骤如下:下载keepalived压缩包,然后解压安装
  #tar -zxf keepalived-1.3.6.tar.gz
  #cd keepalived文件夹
 安装keepalived
         ./configure --prefix=/usr/local/keepalived --with-init=SYSV
                 make && make install
        制作软连接
        ln -s /usr/local/keepalived/etc/keepalived/ /etc/
        ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
        ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
        chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
        ln -s /usr/local/keepalived/sbin/keepalived /sbin/

       

 2,配置keepalived
 配置中的state MASTER决定了节点为主节点
  priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
  主节点的配置如下:

global_defs {  
    router_id NodeA  
}  
vrrp_instance VI_1 {  
    state MASTER    #设置为主服务器  
    interface eth0  #监测网络接口  
    virtual_router_id 51  #主、备必须一样  
    priority 100   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)  
    advert_int 1   #VRRP Multicast广播周期秒数  
    authentication {  
    auth_type PASS  #VRRP认证方式,主备必须一致  
    auth_pass 1111   #(密码)  
}  
virtual_ipaddress {  
    172.25.50.100/24  #VRRP HA虚拟地址  
} 
  备用节点的配置如下:

    global_defs {  
        router_id NodeB  
    }  
    vrrp_instance VI_1 {  
        state BACKUP    #设置为主服务器  
        interface eth0  #监测网络接口  
        virtual_router_id 51  #主、备必须一样  
        priority 90   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)  
        advert_int 1   #VRRP Multicast广播周期秒数  
        authentication {  
        auth_type PASS  #VRRP认证方式,主备必须一致  
        auth_pass 1111   #(密码)  
    }  
    virtual_ipaddress {  
        172.25.50.100/24  #VRRP HA虚拟地址  
    }  
 3,启动keepalived:
  /etc/init.dkeepalived start

五.测试

 在物理机curl 172.25.50.100 能切换说明成功!


2017-12-29 08:45:45 zhaozihao88 阅读数 863
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7137 人正在学习 去看看 良许

双机热备的原理:

从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。

从我本次的环境中为公司搭建实现两套mysql的双机热备,就是使两台mysql互为主备,在一套服务出现故障的时候即使切换另一台备份服务器,即使对外提供服务  ,双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换。使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查、失败切换机制,从而实现MySQL数据库的高可用方案。下面说下Mysql+keeoalived双主热备高可用方案的实施。 

整个系统架构中最为重要的就是keepalived的VRRP(虚拟路由冗余协议)协议,是实现故障转移最为重要的基础,由VRRP所创建出来的虚拟路由器由主路由器和备份路由器组成,是路基概念的,一组虚拟路由器协同工作共同架构一套虚拟路由器,VRRP协议选举机制,选举出主路由器,其他为备份路由器,当主路由器宕机以后,会选举出新的主路由器,来继续工作从而保障服务不间断地进行。

(1)实现mysql的双主备份:先实现主从同步,再反过来实现主从同步,从而实现双主备份。

(2)再结合Keepalived的使用,通过VIP实现Mysql双主对外连接的统一接口。即客户端通过Vip连接数据库;当其中一台宕机后,VIP会漂移到另一台上,这个过程对于客户端的数据连接来说几乎无感觉,从而实现高可用

环境描述:

Ubuntu16.04

Master1:192.168.30.20   安装mysql keepailved

Master2192.168.30.2   安装mysql keepailved

Vip: 192.168.30.22(这个可以改成公网,实现对外连接)

要实现主主同步,可以先实现主从同步,即master1->master2的主从同步,然后master2->master1的主从同步.

这样,双方就完成了主主同步。

 

注意下面几点:

1)要保证同步服务期间之间的网络联通。即能相互ping通,能使用对方授权信息连接到对方数据库(防火墙开放3306端口)。在这里我是将防火墙全部关闭 iptables -F

2)同步前,双方数据库中需要同步的数据要保持一致。这样,同步环境实现后,再次更新的数据就会如期同步了。

一、Mysql主主同步环境部署

Mysql下载mysql二进制包安装

wgethttps://dev.mysql.com/downloads/file/?id=473335

tar -xvfmysql-server_5.7.20-1ubuntu16.04_amd64.deb-bundle.tar

 

解压后得到一系列的.deb文件。依次为:

libmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb

libmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb

libmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb

mysql-client_5.7.20-1ubuntu16.04_amd64.deb

mysql-common_5.7.20-1ubuntu16.04_amd64.deb

mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb

mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb

mysql-community-source_5.7.20-1ubuntu16.04_amd64.deb

mysql-community-test_5.7.20-1ubuntu16.04_amd64.deb

mysql-server_5.7.20-1ubuntu16.04_amd64.deb

mysql-server_5.7.20-1ubuntu16.04_amd64.deb-bundle.tar

mysql-testsuite_5.7.20-1ubuntu16.04_amd64.deb

 

3.安装文件

这里这些文件存在着依赖关系,如果一个一个安装,要安装顺序来安装:

dpkg -imysql-common_5.7.20-1ubuntu16.04_amd64.deb

dpkg -ilibmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb

dpkg -ilibmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb

dpkg -ilibmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb

注意在安装mysql-community-server会要求输入root账户密码

dpkg -imysql-server_5.7.20-1ubuntu16.04_amd64.deb    (此密码为mysql的登陆密码)

到这里个人认为服务器应该可以使用了(未测试),但是mysql命令还不能使用

dpkg -imysql-community-client_5.7.20-1ubuntu16.04_amd64.deb

dpkg -imysql-client_5.7.20-1ubuntu16.04_amd64.deb

.mysql安装之后,使用户可以从其它地址可以访问服务器

首先得修改/etc/mysql/my.cnf文件,将

bind-address   = 127.0.0.1

修改为

bind-address   = 0.0.0.0然后得创建远程访问的用户,并赋予其访问权限
  创建用户并且赋予权限,实际上有好几种方法。这里使用我个人最喜欢的方式,一部到位,需要进入到mysql之后执行命令

脚本如下:

GRANT<ALL|priv1,priv2,.....privn> ON

[object][IDENTIFIED BY 'password']

[WITHGRANT OPTION];

MAX_QUERIES_PER_HOURcount

MAX_UPDATES_PER_HOURcount

MAX_CONNECTIONS_PER_HOURcount

MAX_USER_CONNECTIONScount

说明:priv代表权限select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file14个权限

里我要说一条mysql下载安装简单的操作,但是要注意实操环境:为了保证下载的mysql为最新版本必须保证源的更新

apt-get install mysql-server

apt-get isntall mysql-client

apt-get install libmysqlclient-dev

netstat -tap | grep mysql

安装过程中同意会提示设置密码什么的】

---------master1服务器操作记录---------------

my.cnf文件的[mysqld]配置区域添加下面内容:

[root@master1 ~]# vim /etc/mysql/mysql.conf.d/mysqld.cnf

server-id = 1         

log-bin = mysql-bin     

sync_binlog = 1

binlog_checksum = none

binlog_format = mixed

auto-increment-increment= 2    

auto-increment-offset =1    

slave-skip-errors =all     

 

另外有一点需要注意将mysql的配置文件的

bind-address           = 127.0.0.0修改为bind-address           = 0.0.0.0

mysql5.7默认是不支持远程登陆的即使你设置了远程登陆账号,在user表中依然是NO

[root@master1 ~]# service mysql restart

数据同步授权(iptables防火墙开启3306端口)这样I/O线程就可以以这个用户的身份连接到主服务器,并且读取它的二进制日志。

mysql> grant replication slave,replicationclient on *.* to wang@'192.168.30.%' identified by "wang@123";

Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

最好将库锁住,仅仅允许读,以保证数据一致性;待主主同步环境部署后再解锁;

锁住后,就不能往表里写数据,但是重启mysql服务后就会自动解锁!

mysql> flush tableswithreadlock;  //注意该参数设置后,如果自己同步对方数据,同步前一定要记得先解锁!

Query OK, 0 rows affected(0.00 sec)

  

查看下log bin日志和pos值位置

mysql> show masterstatus;

+------------------+----------+--------------+--------------------------+-------------------+

| File            | Position | Binlog_Do_DB |Binlog_Ignore_DB         |Executed_Gtid_Set |

+------------------+----------+--------------+--------------------------+-------------------+

| mysql-bin.000004|      430|             | mysql,information_schema|                  |

+------------------+----------+--------------+--------------------------+-------------------+

1 rowinset(0.00 sec)

  

---------------master2服务器操作记录---------------

my.cnf文件的[mysqld]配置区域添加下面内容:

root@ubuntu:/home/zhaozihao# vim /etc/mysql/mysql.conf.d/mysqld.cnf

server-id= 2        

log-bin =mysql-bin    

sync_binlog = 1

binlog_checksum = none

binlog_format = mixed

auto-increment-increment= 2     

auto-increment-offset =2    

slave-skip-errors = all

同上修改bind-address           = 127.0.0.0或者注释

root@ubuntu:~# service mysql restart

mysql> grantreplication slave,replication client on *.* to wang@'192.168.30.%'identified by "wang@123";

Query OK, 0 rows affected(0.00 sec)

  

mysql> flushprivileges;

Query OK, 0 rows affected(0.00 sec)

  

mysql> flush tableswithreadlock;

Query OK, 0 rows affected(0.00 sec)

  

mysql> show masterstatus;

+------------------+----------+--------------+--------------------------+-------------------+

|File             |Position | Binlog_Do_DB |Binlog_Ignore_DB         |Executed_Gtid_Set |

+------------------+----------+--------------+--------------------------+-------------------+

| mysql-bin.000003|      430|             | mysql,information_schema|                  |

+------------------+----------+--------------+--------------------------+-------------------+

1 rowinset(0.00 sec)

  

---------------master1服务器做同步操作---------------------------------------------------------------------------------------

mysql> unlocktables;     //先解锁,将对方数据同步到自己的数据库中

mysql> slave stop

change master to master_host='192.168.30.21',master_user='wang',master_password='wang@123',master_log_file='mysql-bin.000003',master_log_pos=430;         

Query OK, 0 rowsaffected, 2 warnings (0.01 sec)

  

mysql> startslave;

Query OK, 0 rowsaffected (0.01 sec)

查看同步状态,如下出现两个“Yes” (我这里环境稍有改动,注意到Slave_IO_Running:  Slave_SQL_Running: 都是yes表示正确)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.30.21
                  Master_User: wang
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 576
               Relay_Log_File: mysql01-relay-bin.000008
                Relay_Log_Pos: 312
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 576
              Relay_Log_Space: 513
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 2
                  Master_UUID: 33229bbf-e54e-11e7-bb00-005056a6001c
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

这样,master1就和master2实现了主从同步,即master1同步master2的数据。

  

---------------master2服务器做同步操作---------------------------------------------------------------------------------------------

mysql> unlocktables;     //先解锁,将对方数据同步到自己的数据库中

mysql> slavestop

mysql>change  master to master_host='192.168.30.20',master_user='wang',master_password='wang@123',master_log_file='mysql-bin.000004',master_log_pos=430;  

Query OK, 0 rowsaffected, 2 warnings (0.06 sec)

,表明同步成功!

 

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.30.20
                  Master_User: wang
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 150
               Relay_Log_File: mysql02-relay-bin.000008
                Relay_Log_Pos: 355
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 150
              Relay_Log_Space: 718
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 2e48de76-e6dc-11e7-968d-005056a6001b
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

但这里我们就完成的真正的mysql双主同步,你可以试着在一台mysql上随意插入数据来测试两台机器是否真正能够实现备份。

二、配置Mysql+Keepalived故障转移的高可用环境

1)安装keepalived并将其配置成系统服务。master1master2两台机器上同样进行如下操作:

wgethttp://www.keepalived.org/software/keepalived-1.3.9

apt-get update && apt-get upgrade

apt-get insyall openssl-devel

apt-get install libssl-dev  

 apt-get install daemon

tar zxvf keepalived-1.3.9.tar.gz


cd keepalived-1.3.9/

编译    ./configure --prefix=/usr/local/keepalived

安装      make &&make install

把启动脚本放到默认的启动命令下  cp keepalived-1.3.9/keepalived/etc/init.d/keepalived /etc/init.d/(我这台服务器不用这一步直接命令可以启动)

编辑配置文件,修改以下的内容即可:

root@master1:~#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA    #写自己主机名
}
vrrp_script chk_mysql_port {
    script "/opt/chk_mysql.sh"   #检查mysql存活脚本放置位置
    interval 2
    weight -5
    fall 2
    rise 1
}
vrrp_instance VI_1 {
    state MASTER   #主
    interface ens32
    mcast_src_ip 192.168.30.20  #本机ip
    virtual_router_id 51   #两台必须一致,表示在一个组里
    priority 101   #优先级高的表示为主
    advert_int 1
    authentication {
        auth_type PASS  #密码
        auth_pass 1111   #保持一致
    }
    virtual_ipaddress {
        192.168.30.22  #虚拟ip
    }
track_script {
   chk_mysql_port
}

检查mysql存活的脚本  
root@master1:~# vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat-na|grep"LISTEN"|grep"3306"|wc-l)
if[ "${counter}"-eq0 ]; then
    /etc/init.d/keepalivedstop
fi
root@master1:~#chmod 755 /opt/chk_mysql.sh
root@master1:~#systemctl start keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id Mysql_HA
}
vrrp_script chk_mysql_port {
    script "/opt/chk_mysql.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    mcast_src_ip 192.168.30.21
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.22
    }
track_script {
   chk_mysql_port
cat /opt/chk_mysql.sh
}
}
# chmod 755 /opt/chk_mysql.sh
# systemctl keepalived start
使用 命令ipaddr查看vip是否已经创建(默认实在我们配置好的master1上面的)
root@master01:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:a6:00:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.20/24 brd 192.168.30.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.30.22/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea6:1b/64 scope link
       valid_lft forever preferred_lft forever
此时vip已经在master1上了

再查看master2
root@master2:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:a6:00:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.21/24 brd 192.168.30.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea6:1c/64 scope link
       valid_lft forever preferred_lft forever
三、Mysql+keepalived故障转移的高可用测试
停止master1机器上的mysql服务,查看vip资源将会切换到master2机器上。
root@master1:~#service mysql stop
查看mster1的系统日志查看vip的切换情况
root@master1:~# tail /var/log/syslog
Dec 29 13:49:47 mysql01 Keepalived_vrrp[24898]: /opt/chk_mysql.sh exited with status 127
Dec 29 13:49:49 mysql01 Keepalived_vrrp[24898]: /opt/chk_mysql.sh exited with status 127
Dec 29 13:49:49 mysql01 Keepalived_vrrp[24898]: VRRP_Script(chk_mysql_port) failed
Dec 29 13:49:49 mysql01 Keepalived_vrrp[24898]: VRRP_Instance(VI_1) Changing effective priority from 101 to 96
Dec 29 13:49:50 mysql01 Keepalived_vrrp[24898]: VRRP_Instance(VI_1) Received advert with higher priority 99, ours 96
Dec 29 13:49:50 mysql01 Keepalived_vrrp[24898]: VRRP_Instance(VI_1) Entering BACKUP STATE
Dec 29 13:49:51 mysql01 Keepalived_vrrp[24898]: /opt/chk_mysql.sh exited with status 127
Dec 29 13:49:57 mysql01 Keepalived_vrrp[24898]: message repeated 3 times: [ /opt/chk_mysql.sh exited with status 127]
Dec 29 13:49:58 mysql01 systemd[1]: Stopped MySQL Community Server.
Dec 29 13:49:59 mysql01 Keepalived_vrrp[24898]: /opt/chk_mysql.sh exited with status 127

查看master1的vip是否还存在
root@master1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:a6:00:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.20/24 brd 192.168.30.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea6:1b/64 scope link
查看master2的系统日志
root@master2:~# tail /var/log/syslog
Dec 29 10:15:42 mysql02 Keepalived_vrrp[19141]: Using LinkWatch kernel netlink reflector...
Dec 29 10:15:42 mysql02 Keepalived_vrrp[19141]: VRRP_Instance(VI_1) Entering BACKUP STATE
Dec 29 10:15:42 mysql02 Keepalived_vrrp[19141]: VRRP_Script(chk_mysql_port) succeeded
Dec 29 10:17:01 mysql02 CRON[19467]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Dec 29 11:17:01 mysql02 CRON[1474]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Dec 29 12:17:01 mysql02 CRON[15950]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Dec 29 13:17:01 mysql02 CRON[30382]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Dec 29 13:49:50 mysql02 Keepalived_vrrp[19141]: VRRP_Instance(VI_1) forcing a new MASTER election
Dec 29 13:49:51 mysql02 Keepalived_vrrp[19141]: VRRP_Instance(VI_1) Transition to MASTER STATE
Dec 29 13:49:52 mysql02 Keepalived_vrrp[19141]: VRRP_Instance(VI_1) Entering MASTER STATE
root@master2:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:a6:00:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.21/24 brd 192.168.30.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.30.22/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea6:1c/64 scope link
       valid_lft forever preferred_lft forever

再次启动master1的mysql和keepalived服务。(注意:如果restart重启mysql,那么还要启动下keepalived,因为mysql重启,根据脚本会造成keepalived关闭)
注意:一定要先启动mysql服务,然后再启动keepalived服务。如果先启动keepalived服务,按照上面的配置,mysql没有起来,就会自动关闭keepalived。
 root@master1:~#service mysql start
启动mysql后,会发现vip资源再次从master2机器上切换回来了。
  root@master1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:a6:00:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.20/24 brd 192.168.30.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.30.22/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea6:1b/64 scope link
       valid_lft forever preferred_lft foreve
再次查看master2系统日志
root@master1:~# tail /var/log/syslog
Dec 29 13:52:00 mysql01 Keepalived_vrrp[24898]: VRRP_Instance(VI_1) Transition to MASTER STATE
Dec 29 13:52:01 mysql01 Keepalived_vrrp[24898]: VRRP_Instance(VI_1) Entering MASTER STATE
Dec 29 13:54:33 mysql01 dbus[1085]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Dec 29 13:54:33 mysql01 kernel: [3030867.653728] IPVS: Creating netns size=2192 id=2
Dec 29 13:54:33 mysql01 systemd[1]: Starting Hostname Service...
Dec 29 13:54:33 mysql01 dbus[1085]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 29 13:54:33 mysql01 systemd[1]: Started Hostname Service.
Dec 29 13:54:33 mysql01 systemd-hostnamed[13163]: Changed static host name to 'master1'
Dec 29 13:54:33 mysql01 systemd-hostnamed[13163]: Changed host name to 'master1'
Dec 29 13:54:39 mysql01 systemd[1]: Started Session 953 of user root.
---------------------------------------------------------------------------------------------------------------------
至此我们已经将mysql的双机热备基础服务搭建完成,后期可以根据具体业务上的调整进行调整:
Keepalived的抢占和非抢占模式
架构之间的调整
后期存储的优化加快相应速度
mysql数据库的优化等等
























2013-09-07 12:25:53 weixin_33894992 阅读数 38
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7137 人正在学习 去看看 良许

拓扑图:

085615163.jpg

环境描述:

操作系统:CentOS6.3_x64

主:eth0 192.168.10.10 心跳:eth1 192.168.1.10

备:eth0 192.168.10.20 心跳:eth1 192.168.1.20

VTP:192.168.128.5

heartbeatLinux-HA)的工作原理heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

Heartbeat:(心跳检测)本身是整个集群的基础(cluster messaging layer),负责维护集群各节点的信息以及它们之前通信;只提供主从备份功能,并不能对各个节点进行监控,需要安装ldirectord

Resource-agent:(资源代理)就是各种的资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。

Cluster-glue:相当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;

Ldirectord:负责realserver的健康检查,可以自动将realserver中宕机的机器移除,不再分配求。

安装依赖包:

yum install -y gcc gcc-c++ autoconf libtool pkgconfig glib2-devel libxslt-devel libxml2-devel bzip2-devel libtool-ltdl-devel libuuid-devel docbook-style-xsl

安装资源接管服务依赖包:

yum install -y *Socket6* *libwww-perl* *URI* *MailTools* *HTML-Parser* perl-IO-Socket-*

配置host解析

vi /etc/hosts

192.168.10.10 master

192.168.10.20 slave

软件下载:http://www.linux-ha.org/wiki/Downloads

一、配置主从heartbeat服务器(配置相同)

创建需要的组和用户

groupadd haclient
useradd -g haclient -s /sbin/nologin -M hacluster

1.安装资源接管服务(要先安装资源接管服务,否则安装心跳服务会报错)

tar zxvf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
cd Reusable-Cluster-Components-glue--glue-1.0.9
./autogen.sh
./configure
make && make install

2.安装心跳服务

tar jxvf Heartbeat-3-0-7e3a82377fa8.tar.bz2
cd Heartbeat-3-0-7e3a82377fa8
./ConfigureMe configure
make && make install

报错:./configure: error: Core development headers were not found

解决:./ConfigureMe configure ,如果还解决不了,就是你没有安装Heartbeat服务

报错:gmake[1]: --xinclude: Command not found ,gmake[1]: *** [heartbeat.8] Error 127

解决:yum install libxslt-devel

3.安装中间件服务

tar jxvf ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
cd ClusterLabs-resource-agents-b735277
./autogen.sh
./configure
make && make install

报错:syntax error near unexpected token `DBUS,

解决:vi configure,注释这行PKG_CHECK_MODULES(DBUS, dbus-1, dbus-glib-1)

二、配置heartbeat

/etc/ha.d/ha.cf #定义心跳信息层,用于实现心跳信息传输。
/etc/ha.d/haresources #本地最重要的CRM,这个文件我们使用v1版本的配置文件,很简单。
/etc/ha.d/authkeys #实现两个节点之间传递,对心跳信息进行签名,或者加密,避免篡改;authkeys的权限非常重要,通常是400或者600的,如果设置不对无法启动heartbeat服务。
rm -rf /usr/etc/ha.d
ln -s /etc/ha.d /usr/etc
cp /usr/share/doc/heartbeat/haresources /etc/ha.d
cp /usr/share/doc/heartbeat/authkeys /etc/ha.d
cp /usr/share/doc/heartbeat/ha.cf /etc/ha.d
chmod 600 /etc/ha.d/authkeys
chkconfig heartbeat on

1.修改配置文件

vi authkeys
auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!

vi ha.cf
logfile /var/log/ha-log
logfacility local0 #如果未定义上述日志,默认写入/var/log/message
keepalive 2 #心跳间隔
deadtime 30 #死亡阀值
warntime 10 #警告时间
initdead 120 #首次启动heartbeat,等待多久才启动主服务资源
udpport 694 #连接端口
ucast eth1 192.168.1.20 #采用网卡的eth1组织心跳,后跟接口IP
auto_failback on #当主节点故障恢复后,自动获取资源并取代从节点
node master #主节点主机名
node slave #备份节点主机名
ping 192.168.1.1 #选择ping节点,ping的越好对HA集群越稳定,建议使用网关

vi haresources
master IPaddr::192.168.128.5 ldirectord::ldirectord.cf httpd
#格式:[主机名] [资源名与虚拟ip] [资源名与脚本] [高可用服务]
#每个资源都是一个shell脚本,后面还可以写虚拟IP和资源,heartbeat会使用init脚本来管理系统服务,在范围内搜索脚本并启用
scp -r /etc/ha.d root@slave:/etc/ha.d #配置好的复制到备份服务器上
rm -rf /usr/etc/ha.d
ln -s /etc/ha.d /usr/etc

2.配置ldirectord

cp ClusterLabs-resource-agents-b735277/ldirectord/ldirectord.cf /etc/ha.d/
vi /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
quiescent=yes
virtual=192.168.128.5:80
    real=192.168.1.10:80 gate
    real=192.168.1.20:80 gate
    fallback=127.0.0.1:80 gate
    service=http
    scheduler=rr
    protocol=tcp
    checkport=80

三、测试

service iptables stop #关闭防火墙
setenforce 0 #临时关闭selinux
service heartbeat start
ifconfig #会显示192.168.0.100绑定在主服务器eth0:0
echo “192.168.10.10″ > /var/www/html/index.html
echo “192.168.10.20″ > /var/www/html/index.html

hearbeat启动报错:

/etc/init.d/heartbeat: line 53: /etc/ha.d/shellfuncs: No such file or directory

解决:这是因为没有装ClusterLabs-resource-agents导致的,装了这个中间件会把shellfuncs自动复制过去,我们可以手动复制过去即可。

cp ClusterLabs-resource-agents-b735277/heartbeat/shellfuncs /etc/ha.d/


http://192.168.128.5 #正常访问到192.168.10.10

模拟down掉192.168.10.10的httpd服务,再刷新页面显示192.168.10.20,说明配置成功!

生产环境中,网站程序数据必须是一致的,可以采用rsync进行同步或使用共享存储(NFS、ISCSI),后台MySQL数据库可以采用双主热备,实现高可用性。


Keepalived双机热备

阅读数 27

没有更多推荐了,返回首页