本文目录一览:
- 1、keepalived怎么重新加载配置文件
- 2、连接内网服务器上的mysql报错
- 3、MySQL的root密码忘记怎么办 修改root密码的方式
- 4、如何指定 /etc/init.d/mysqld 所加载的配置文件
keepalived怎么重新加载配置文件
keepalived.conf内容说明如下
●全局定义块
1、email通知。作用:有故障,发邮件报警。
2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。
3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。
●VRRP定义块
1、同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?
2、实例组group。至少包含一个vrrp实例。
3、Vrrp实例vrrp_instance。实例名出自实例组group所包含的那些名字。
(1) 实例状态state。只有MASTER和BACKUP两种状态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态。当 MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复 时,BACKUP从MASTER恢复到BACKUP状态。
(2)通信接口interface。对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2个或2个以上的接口,在选择服务接口时,一定要核实清楚。
(3)lvs_sync_daemon_inteface。 负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个 机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。
(4)虚拟路由标识virtual_router_id。这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。
(5)优先级priority。这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为150,那么BACKUP的priority只能是140或更小的数值。
(6)同步通知间隔advert_int。MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。
(7)验证authentication。包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。
4、 虚拟ip地址virtual_ipaddress。可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致!
●虚拟服务器virtual_server定义块
虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。
1、虚拟服务器virtual_server。这个ip来自于vrrp定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。
(1)delay_loop。健康检查时间间隔,单位是秒。
(2)lb_algo。负载均衡调度算法,互联网应用常使用wlc或rr。
(3)lb_kind。负载均衡转发规则。一般包括DR、NAT、TUN3种,在我的方案中,都使用DR的方式。
(4)persistence_timeout。 会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务 器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个, 负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他 在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了---登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。
(5)转发协议protocol。一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。
2、真实服务器real_server,也即服务器池。Real_server的值包括ip地址和端口号,多个连续的真实ip。
(1)权重weight,权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。
(2)Tcp检查tcp_check。
第③版更新内容如下:
每台服务器都有二块网卡,分别连接内外网;后端的mysql数据库与web连接采用内网方式,整个网络环境采用内网;
增加了keepalived.conf语法内容;
删除了lvs.sh脚本内容,直接让keepalived内容更直接明了;
lvs主从机上的keepalived.conf文件我直接从生产服务器上download下来了,可方便大家使用。
※值得注意的是:
1、你必须向你的服务器所在机房IDC多申请一个IP供VIP使用;多关注/var/log/messages和ipvsadm -ln,利用其有效信息排错。
2、服务器的iptables、Selinux均关闭;在生产环境中,我就遇到了iptables的NAT转发问题,导致了lvs失败。
3、 keepalived的启动过程并不会对配置文件进行语法检查,就算没有配置文件,keepalived的守护进程照样能够被运行起来。在默认状态下,即 不指定配置文件的位置--keepalived先查找文件/etc/keepalived/keepalived.conf。
4、session的过程默认是以文件的形式存在,在浏览器关闭或重启时删除;会话保持我建议写成120秒,如果这个值设置得不合理,用户将得到非常糟糕的访问效果。
5、 keepalived是lvs的扩展项目,因此它们之间具备良好的兼容性,这点应该是keepalived部署比其他类似工具能更简洁的原因 吧,lvs+keepalived目前是一个应用于生产环境的成熟架构,实现了真正意义上的负载均衡高可用,尤其适用于bbs和blog(它们均是访问频 繁,用户量大的对象),建议熟练掌握。
LVS 算法说明
LVS的常见八种调度算法:
一:轮叫调度(Round-Robin Scheduling)
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
二:加权轮叫调度(Weighted Round-Robin Scheduling)
加权轮叫调度 (Weighted Round-Robin Scheduling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
三:最小连接调度(Least-Connection Scheduling)
最 小连接调度(Least- Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调 度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
四:加权最小连接调度(Weighted Least-Connection Scheduling)
加权最小连接调 度(Weighted Least-Connection Scheduling)算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
五:基于局部性的最少链接(Locality-Based Least Connections Scheduling)
基 于局部性的最少链接调度(Locality-Based Least Connections Scheduling,以下简称为LBLC)算法是针对请 求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服 务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和 主存Cache命中率,从而整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的 且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将 请求发送到该服务器。
六: 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
带 复制的基于局部性最少链接调度(Locality- Based Least Connections with Replication Scheduling,以下简称为LBLCR)算法也是针对目标 IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护 从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会 从所有的Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超 载,就会重复上述过程选出新的Cache服务器。这样,可能会导致该“热门”站点的映像会出现在所有的Cache服务器上,降低了Cache服务器的使用 效率。LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务 器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的 Cache服务器上,从而提供Cache集群系统的使用效率。LBLCR算法先根据请求的目标IP 地址找出该目标IP地址对应的服务器组;按“最小连 接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按 “最小连接”原则从整个集群中选出一台服务器,将 该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
七:目标地址散列调度(Destination Hashing Scheduling)
目 标地址散列调度 (Destination Hashing Scheduling)算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过 一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分 配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
八:源地址散列调度(Source Hashing Scheduling)
源 地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键 (Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址 散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一一叙述。在实际应用 中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
此文出处抚琴煮酒之百度博客
连接内网服务器上的mysql报错
错误原因是:本地IP(xxx.xxx.xxx.xxx)没有访问远程数据库的权限。
于是下面开启本地IP(xxx.xxx.xxx.xxx)对远程mysql数据库的访问权限。
首先远程连接进入服务器,在cms中输入mysql -u root -p,然后回车,输入密码后回车进入mysql命令行。
输入use mysql;
输入select user,password,host from user;
可以看到host中只有localhost主机。我们需要将xxx.xxx.xxx.xxx也添加到这里才对。
添加方法如下:
输入
grant all privileges on *.* to root@"xxx.xxx.xxx.xxx" identified by "密码";
这相当于是给IP-xxx.xxx.xxx.xxx赋予了所有的权限,包括远程访问权限。
然后再输入
flush privileges;
这相当于是重新加载一下mysql权限,这一步必须有。
再次输入select user,password,host from user;
可以看到host中已经有了新加的IP。
现在再次用Navicat for MySQl访问远程mysql数据库,已经能正常打开了。
问题解决。
不过还有一个问题,发现双击打开某张表的时候很慢,至少要3秒。
原因是:
当远程访问mysql时, mysql会解析域名, 所以会导致访问速度很慢, 会有2,3秒延时!
解决办法:
修改mysql安装目录下的my.ini,加上下面这个配置可解决此问题。在[mysqld]下加入:skip-name-resolve
保存退出后重启mysql服务。
然后访问速度就和本地一样快啦。
MySQL的root密码忘记怎么办 修改root密码的方式
如果哪天你忘记了线上MySQL数据库的root密码,怎么办?
大家往往会想到skip-grant-tables参数,具体步骤如下:
1.
关闭MySQL数据库,因为root密码忘记了,mysqladmin无法使用,此时,只能通过kill
pid关闭程序。
在这里,科普一下kill
和kill
-9的区别
默认参数下,kill
发送SIGTERM信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。
kill
-9
发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出。与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理
所以,万不得已,不要通过kill
-9杀掉进程,这可能导致MySQL数据库的物理结构损坏,无法重新启动。
2.
在my.cnf文件[mysqld]部分添加skip-grant-tables参数
3.
登录数据库,修改root账户的密码
以下是修改root密码的三种方式:
1
mysql
set
password
for
'root'@'localhost'=password('123');
无需刷新权限表
2
mysql
update
mysql.user
set
password=password("456")
where
user="root"
and
host="localhost";
mysql
flush
privileges;
3
#
mysqladmin
-u
root
password
"123"
4.
关闭数据库,注释掉skip-grant-tables参数,重新启动数据库。
上面这种方式虽然不错,但是有个问题,你必须重启数据库,对于线上环境,这可能是不被允许的。
下面来谈谈另一种方法,有点“黑暗科技”的味道
这个方法利用的是mysql.user表还是MyISAM引擎的特性。
1.
将该实例的mysql.user表copy到另一个实例的目录下,譬如,test数据库的目录下
2.
登录另一个实例数据库,修改上述三个文件的权限,并修改root密码
mysql
select
user,host,password
from
test.user;
+------+-----------+-------------------------------------------+
|
user
|
host
|
password
|
+------+-----------+-------------------------------------------+
|
root
|
localhost
|
*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
|
+------+-----------+-------------------------------------------+
1
row
in
set
(0.00
sec)
mysql
update
test.user
set
password=password("hello")
where
user="root"
and
host="localhost";
Query
OK,
1
row
affected
(0.15
sec)
Rows
matched:
1
Changed:
1
Warnings:
3.
将上述三个文件copy回源数据库
4.
获取mysqld的pid,通过kill
-HUP
`pidof
mysqld`方式让mysqld进程重新加载配置文件
[root@keepalived01
~]#
mysql
-phello
Warning:
Using
a
password
on
the
command
line
interface
can
be
insecure.
ERROR
1045
(28000):
Access
denied
for
user
'root'@'localhost'
(using
password:
YES)
[root@keepalived01
~]#
kill
-HUP
4283
[root@keepalived01
~]#
mysql
-phello
Warning:
Using
a
password
on
the
command
line
interface
can
be
insecure.
Welcome
to
the
MySQL
monitor.
Commands
end
with
;
or
\g.
Your
MySQL
connection
id
is
2528
Server
version:
5.6.26
MySQL
Community
Server
(GPL)
Copyright
(c)
2000,
2015,
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
通过上述输出可以看出,kill
-HUP之前,直接用密码hello登录被拒绝,kill
-HUP之后,就可以直接登录了。
当然,以上方法仅供参考,在生产上慎用,毕竟安全压倒一切,天晓得哪里会出现问题。
以上就是本文的全部内容,希望可以帮助大家解决root密码忘记的困扰,谢谢大家的阅读。
如何指定 /etc/init.d/mysqld 所加载的配置文件
没办法直接修改mysqld 的linux 默认参数文件位置,你直接在mysqld 的参数中用 --init-file=file_name
或者重新修改编译mysql的C源文件。
或者在你的 /etc/init.d 不要直接放 mysqld ,面是放个脚本命令 mysql --init-file=file_name