公司局域网wifi下SVN服务器搭建,但是客户端电脑检出时,服务器电脑wifi就断了

公司局域网wifi下SVN服务器搭建,但是客户端电脑检出时,服务器电脑wifi就断了,第1张

win7无线网络DNS服务器未响应的解决步骤:

原因一:ARP冲突或者无法自动获取到DNS

解决方法:尝试设置静态IP

假设:路由器IP是19216811,具体参见路由器盒子上的标签或者说明书。

1、点右下角的网络标志,鼠标右键选择打开网络和共享中心;

2、点无线网络连接;

3、点属性;

4、选择Internet协议版本4(TCP/IPV4),点属性;

5、选中使用下面的IP地址;

IP地址:1921681100(19216812~1921681254都可);

子网掩码:2552552550;

路由器:19216811;

选中使用下面的DNS服务器地址;

首选DNS服务器:19216811(也可填写地区通用DNS);

使用SubVersion服务器,般使用乌龟,客户端使用xcode自带subversion配服务端,直接使用checkout,使用。

Windows环境我般使用TortoiseSVN搭建svn环境Mac环境由于Mac自带svn服务器端客户端功能所我装任何第三软件前提使用svn功能需做简单配置

我首先看何Mac环境搭建svn服务器端环境

创建代码仓库用存储客户端所传代码

我先/User/apple目录新建svn目录svn目录创建仓库目录

打终端创建mycode仓库输入指令:svnadmin create /Users/apple/svn/mycode

指令执行功发现硬盘/Users/apple/svn/mycode目录目录结构:

配置svn用户权限

主要修改/svn/mycode/conf目录三文件

1打svnserveconf列配置项前面#空格都掉

[java] view plaincopy

# anon-access = read

# auth-access = write

# password-db = passwd

# authz-db = authz

anon-access = read代表匿名访问候读若改anon-access = none代表禁止匿名访问需要帐号密码才能访问

2打passwd[users]面添加帐号密码比:

[java] view plaincopy

[users]

mj = 123

jj = 456

帐号mj密码123

3打authz配置用户组权限

我passwd添加用户配同用户组同用户组设置同权限没必要每用户进行单独设置权限

[groups]面添加组名用户名用户间用逗号(,)隔

[java] view plaincopy

[groups]

topgroup=mj,jj

说明mjjj都属于topgroup组接再进行权限配置

使用[/]代表svn服务器所资源库

[java] view plaincopy

[/]

@topgroup = rw

面配置说明topgroup组所用户所资源库都读写(rw)权限组名前面要用@

用户名用加@比mj用户读写权限

[java] view plaincopy

[/]

mj = rw

至于其精细权限控制参考authz文件其内容

4启svn服务器

前面配置关键看能否启服务器若启前面做再工作徒劳

终端输入列指令:svnserve -d -r /Users/apple/svn

或者输入:svnserve -d -r /Users/apple/svn/mycode

没任何提示说明启功

5关闭svn服务器

想要关闭svn服务器效办打实用工具面监视器

综合述我轻松搭建svn服务器环境

你的意思是说使用 http/https协议访问时,权限控制全都正常,但使用svn协议访问时,权限控制失效吗?

如果是这个问题的话,我估计是你只设置了基于apache的SVN访问权限,没有设置基于svn 协议的访问权限,这两者的设置是不同的,用户名/密码文件的格式也不一样

对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案。

Replication

要保证MySQL数据不丢失,replication是一个很好的解决方案,而MySQL也提供了一套强大的replication机制。只是我们需要知道,为了性能考量,replication是采用的asynchronous模式,也就是写入的数据并不会同步更新到slave上面,如果这时候master当机,我们仍然可能会面临数据丢失的风险。

为了解决这个问题,我们可以使用semi-synchronous replication,semi-synchronous replication的原理很简单,当master处理完一个事务,它会等待至少一个支持semi-synchronous的slave确认收到了该事件并将其写入relay-log之后,才会返回。这样即使master当机,最少也有一个slave获取到了完整的数据。

但是,semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在facebook的生产环境中使用了semi-synchronous(这里),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了facebook或者google。在这篇文章里面已经提到,MySQL 57之后已经使用了Loss-Less Semi-Synchronous replication,所以丢数据的概率已经很小了。

如果真的想完全保证数据不会丢失,现阶段一个比较好的办法就是使用gelera,一个MySQL集群解决方案,它通过同时写三份的策略来保证数据不会丢失。笔者没有任何使用gelera的经验,只是知道业界已经有公司将其用于生产环境中,性能应该也不是问题。但gelera对MySQL代码侵入性较强,可能对某些有代码洁癖的同学来说不合适了:-)

我们还可以使用drbd来实现MySQL数据复制,MySQL官方文档有一篇文档有详细介绍,但笔者并未采用这套方案,MHA的作者写了一些采用drdb的问题,在这里,仅供参考。

在后续的项目中,笔者会优先使用semi-synchronous replication的解决方案,如果数据真的非常重要,则会考虑使用gelera。

Monitor

前面我们说了使用replication机制来保证master当机之后尽可能的数据不丢失,但是我们不能等到master当了几分钟才知道出现问题了。所以一套好的监控工具是必不可少的。

当master当掉之后,monitor能快速的检测到并做后续处理,譬如邮件通知管理员,或者通知守护程序快速进行failover。

通常,对于一个服务的监控,我们采用keepalived或者heartbeat的方式,这样当master当机之后,我们能很方便的切换到备机上面。但他们仍然不能很即时的检测到服务不可用。笔者的公司现阶段使用的是keepalived的方式,但后续笔者更倾向于使用zookeeper来解决整个MySQL集群的monitor以及failover。

对于任何一个MySQL实例,我们都有一个对应的agent程序,agent跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到zookeeper上面。这样,我们可以就能知道MySQL是否当机,主要有以下几种情况:

机器当机,这样MySQL以及agent都会当掉,agent与zookeeper连接自然断开

MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接

Agent当掉,但MySQL未当

上面三种情况,我们都可以认为MySQL机器出现了问题,并且zookeeper能够立即感知。agent与zookeeper断开了连接,zookeeper触发相应的children changed事件,监控到该事件的管控服务就可以做相应的处理。譬如如果是上面前两种情况,管控服务就能自动进行failover,但如果是第三种,则可能不做处理,等待机器上面crontab或者supersivord等相关服务自动重启agent。

使用zookeeper的好处在于它能很方便的对整个集群进行监控,并能即时的获取整个集群的变化信息并触发相应的事件通知感兴趣的服务,同时协调多个服务进行相关处理。而这些是keepalived或者heartbeat做不到或者做起来太麻烦的。

使用zookeeper的问题在于部署起来较为复杂,同时如果进行了failover,如何让应用程序获取到最新的数据库地址也是一个比较麻烦的问题。

对于部署问题,我们要保证一个MySQL搭配一个agent,幸好这年头有了docker,所以真心很简单。而对于第二个数据库地址更改的问题,其实并不是使用了zookeeper才会有的,我们可以通知应用动态更新配置信息,VIP,或者使用proxy来解决。

虽然zookeeper的好处很多,但如果你的业务不复杂,譬如只有一个master,一个slave,zookeeper可能并不是最好的选择,没准keepalived就够了。

Failover

通过monitor,我们可以很方便的进行MySQL监控,同时在MySQL当机之后通知相应的服务做failover处理,假设现在有这样的一个MySQL集群,a为master,b,c为其slave,当a当掉之后,我们需要做failover,那么我们选择b,c中的哪一个作为新的master呢?

原则很简单,哪一个slave拥有最近最多的原master数据,就选哪一个作为新的master。我们可以通过show slave status这个命令来获知哪一个slave拥有最新的数据。我们只需要比较两个关键字段Master_Log_File以及Read_Master_Log_Pos,这两个值代表了slave读取到master哪一个binlog文件的哪一个位置,binlog的索引值越大,同时pos越大,则那一个slave就是能被提升为master。这里我们不讨论多个slave可能会被提升为master的情况。

在前面的例子中,假设b被提升为master了,我们需要将c重新指向新的master b来开始复制。我们通过CHANGE MASTER TO来重新设置c的master,但是我们怎么知道要从b的binlog的哪一个文件,哪一个position开始复制呢?

GTID

为了解决这一个问题,MySQL 56之后引入了GTID的概念,即uuid:gid,uuid为MySQL server的uuid,是全局唯一的,而gid则是一个递增的事务id,通过这两个东西,我们就能唯一标示一个记录到binlog中的事务。使用GTID,我们就能非常方便的进行failover的处理。

仍然是前面的例子,假设b此时读取到的a最后一个GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:23,而c的为3E11FA47-71CA-11E1-9E33-C80AA9429562:15,当c指向新的master b的时候,我们通过GTID就可以知道,只要在b中的binlog中找到GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:15这个event,那么c就可以从它的下一个event的位置开始复制了。虽然查找binlog的方式仍然是顺序查找,稍显低效暴力,但比起我们自己去猜测哪一个filename和position,要方便太多了。

google很早也有了一个Global Transaction ID的补丁,不过只是使用的一个递增的整形,LedisDB就借鉴了它的思路来实现failover,只不过google貌似现在也开始逐步迁移到MariaDB上面去了。

MariaDB的GTID实现跟MySQL 56是不一样的,这点其实比较麻烦,对于我的MySQL工具集go-mysql来说,意味着要写两套不同的代码来处理GTID的情况了。后续是否支持MariaDB再看情况吧。

Pseudo GTID

GTID虽然是一个好东西,但是仅限于MySQL 56+,当前仍然有大部分的业务使用的是56之前的版本,笔者的公司就是55的,而这些数据库至少长时间也不会升级到56的。所以我们仍然需要一套好的机制来选择master binlog的filename以及position。

最初,笔者打算研究MHA的实现,它采用的是首先复制relay log来补足缺失的event的方式,但笔者不怎么信任relay log,同时加之MHA采用的是perl,一个让我完全看不懂的语言,所以放弃了继续研究。

幸运的是,笔者遇到了orchestrator这个项目,这真的是一个非常神奇的项目,它采用了一种Pseudo GTID的方式,核心代码就是这个

代码如下:create database if not exists meta;

drop event if exists metacreate_pseudo_gtid_view_event;

delimiter ;;

create event if not exists

metacreate_pseudo_gtid_view_event

on schedule every 10 second starts current_timestamp

on completion preserve

enable

do

begin

set @pseudo_gtid := uuid();

set @_create_statement := concat('create or replace view metapseudo_gtid_view as select \'', @pseudo_gtid, '\' as pseudo_gtid_unique_val from dual');

PREPARE st FROM @_create_statement;

EXECUTE st;

DEALLOCATE PREPARE st;

end

;;

delimiter ;

set global event_scheduler := 1;

它在MySQL上面创建了一个事件,每隔10s,就将一个uuid写入到一个view里面,而这个是会记录到binlog中的,虽然我们仍然不能像GTID那样直接定位到一个event,但也能定位到一个10s的区间了,这样我们就能在很小的一个区间里面对比两个MySQL的binlog了。

继续上面的例子,假设c最后一次出现uuid的位置为s1,我们在b里面找到该uuid,位置为s2,然后依次对比后续的event,如果不一致,则可能出现了问题,停止复制。当遍历到c最后一个binlog event之后,我们就能得到此时b下一个event对应的filename以及position了,然后让c指向这个位置开始复制。

使用Pseudo GTID需要slave打开log-slave-update的选项,考虑到GTID也必须打开该选项,所以个人感觉完全可以接受。

后续,笔者自己实现的failover工具,将会采用这种Pseudo GTID的方式实现。

在《MySQL High Availability》这本书中,作者使用了另一种GTID的做法,每次commit的时候,需要在一个表里面记录gtid,然后就通过这个gtid来找到对应的位置信息,只是这种方式需要业务MySQL客户端的支持,笔者不很喜欢,就不采用了。

后记

MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些最近研究的东西,有些相关工具会尽量在go-mysql中实现。

更新

经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟facebook这篇文章几乎一样,加之最近跟facebook的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。

新的HA,我会完全拥抱GTID,比较这玩意的出现就是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到56,完全支持GTID了。

不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样就能实时的将MySQL的binlog同步到一台机器上面。这可能就是我和fb方案的唯一区别了。

只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用最原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。

以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用绝对比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。

您可能感兴趣的文章:正确面对服务器数据存储防止数据丢失轻松搞定VMware虚拟机的数据恢复IIS备份 自动备份IIS设置和恢复IIS设置(自动还原Web服务器)linux svn服务器搭建、客户端操作、备份与恢复MySQL数据库InnoDB引擎下服务器断电数据恢复方法备份和恢复Windows IIS服务器设置的方法备份和恢复Windows IIS服务器设置服务器断电导致虚拟机数据丢失的恢复方法详解

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 公司局域网wifi下SVN服务器搭建,但是客户端电脑检出时,服务器电脑wifi就断了

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情